Enhance OVSDB Transaction timeout configuration

OVSDB Transaction currently takes the timeout parameter
from a context object that assume to have a vsctl_timeout attribute
This doesnt fit well for other users of this class (like OVN)

This fix configure the transaction timeout in a more common way

Change-Id: I51bb8d8fdc6d061d44af828818aaf62e187795fd
Closes-Bug: #1444277
This commit is contained in:
Gal Sagie 2015-04-15 09:26:54 +03:00
parent e270fb41ae
commit ae0107f956
1 changed files with 6 additions and 5 deletions

View File

@ -40,15 +40,15 @@ LOG = logging.getLogger(__name__)
class Transaction(api.Transaction):
def __init__(self, context, api, ovsdb_connection,
def __init__(self, api, ovsdb_connection, timeout,
check_error=False, log_errors=False):
self.context = context
self.api = api
self.check_error = check_error
self.log_errors = log_errors
self.commands = []
self.results = Queue.Queue(1)
self.ovsdb_connection = ovsdb_connection
self.timeout = timeout
def add(self, command):
"""Add a command to the transaction
@ -74,7 +74,7 @@ class Transaction(api.Transaction):
attempts = 0
while True:
elapsed_time = time.time() - start_time
if attempts > 0 and elapsed_time > self.context.vsctl_timeout:
if attempts > 0 and elapsed_time > self.timeout:
raise RuntimeError("OVS transaction timed out")
attempts += 1
# TODO(twilson) Make sure we don't loop longer than vsctl_timeout
@ -97,7 +97,7 @@ class Transaction(api.Transaction):
LOG.debug("Lost connection to OVSDB, reconnecting!")
self.api.idl.force_reconnect()
idlutils.wait_for_change(
self.api.idl, self.context.vsctl_timeout - elapsed_time,
self.api.idl, self.timeout - elapsed_time,
seqno)
continue
elif status == txn.ERROR:
@ -137,7 +137,8 @@ class OvsdbIdl(api.API):
return self._tables['Open_vSwitch'].rows.values()[0]
def transaction(self, check_error=False, log_errors=True, **kwargs):
return Transaction(self.context, self, OvsdbIdl.ovsdb_connection,
return Transaction(self, OvsdbIdl.ovsdb_connection,
self.context.vsctl_timeout,
check_error, log_errors)
def add_br(self, name, may_exist=True):