Fixed race condition in tempest plugin
With running concurrent tests, tempest can face race condition trying create several same share-networks, that is restricted. Change-Id: I1c7d79078ea9491dfc8f3fb2045741b011e7b059
This commit is contained in:
parent
e2bd55c23b
commit
a6d256f866
@ -14,6 +14,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import time
|
||||||
|
|
||||||
from tempest import clients_share as clients
|
from tempest import clients_share as clients
|
||||||
from tempest.common import isolated_creds
|
from tempest.common import isolated_creds
|
||||||
@ -172,6 +173,36 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def provide_share_network(cls, shares_client, network_client):
|
def provide_share_network(cls, shares_client, network_client):
|
||||||
|
"""This is retry-wrapper for method "_provide_share_network".
|
||||||
|
|
||||||
|
There is unique constraint for share-networks, it contains
|
||||||
|
'tenant_id', 'neutron_net_id' and 'neutron_subnet_id'.
|
||||||
|
Running tests with tempest in several threads can cause
|
||||||
|
race condition, when we can get "http 400 bad request".
|
||||||
|
"""
|
||||||
|
|
||||||
|
share_network_id = None
|
||||||
|
timeout = int(time.time()) + 10
|
||||||
|
while (share_network_id is None and (int(time.time()) < timeout)):
|
||||||
|
try:
|
||||||
|
share_network_id = cls._provide_share_network(shares_client,
|
||||||
|
network_client)
|
||||||
|
break
|
||||||
|
except exceptions.BadRequest:
|
||||||
|
# Appears when suitable network and subnet exist, but no
|
||||||
|
# share-network yet. More than one attempt to create
|
||||||
|
# share-network were sent and unique constraint faced.
|
||||||
|
time.sleep(1)
|
||||||
|
except exceptions.Unauthorized:
|
||||||
|
time.sleep(1)
|
||||||
|
else:
|
||||||
|
# Last attempt
|
||||||
|
share_network_id = cls._provide_share_network(shares_client,
|
||||||
|
network_client)
|
||||||
|
return share_network_id
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _provide_share_network(cls, shares_client, network_client):
|
||||||
"""Used for finding/creating share network for multitenant driver.
|
"""Used for finding/creating share network for multitenant driver.
|
||||||
|
|
||||||
This method creates/gets entity share-network for one tenant. This
|
This method creates/gets entity share-network for one tenant. This
|
||||||
|
Loading…
x
Reference in New Issue
Block a user