def start(self, driver): # The implementation of this function is same as the base class start() # except that OvnIdl object is created instead of idl.Idl with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() helper.register_all() self.idl = OvnIdl(driver, self.connection, helper) self.idl.set_lock(self.idl.event_lock_name) idlutils.wait_for_change(self.idl, self.timeout) # We would have received the initial dump of all the logical # ports as events by now. Unwatch the create events for # logical ports as it is no longer necessary. self.idl.unwatch_logical_port_create_events() self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, plugin): # The implementation of this function is same as the base class start() # except that OvnIdl object is created instead of idl.Idl with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() helper.register_all() self.idl = OvnIdl(plugin, self.connection, helper) self.idl.set_lock(self.idl.event_lock_name) idlutils.wait_for_change(self.idl, self.timeout) # We would have received the initial dump of all the logical # ports as events by now. Unwatch the create events for # logical ports as it is no longer necessary. self.idl.unwatch_logical_port_create_events() self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self): with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() helper.register_all() self.idl = idl.Idl(self.connection, helper) idlutils.wait_for_change(self.idl, self.timeout) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self): with self.lock: if self.idl is not None: return self.idl = idl.Idl(self.connection, self._schema_helper) idlutils.wait_for_change(self.idl, self.timeout) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def do_commit(self): start_time = time.time() attempts = 0 while True: elapsed_time = time.time() - start_time if attempts > 0 and elapsed_time > self.context.vsctl_timeout: raise RuntimeError("OVS transaction timed out") attempts += 1 # TODO(twilson) Make sure we don't loop longer than vsctl_timeout txn = idl.Transaction(self.api.idl) for i, command in enumerate(self.commands): LOG.debug("Running txn command(idx=%(idx)s): %(cmd)s", { 'idx': i, 'cmd': command }) try: command.run_idl(txn) except Exception: with excutils.save_and_reraise_exception() as ctx: txn.abort() if not self.check_error: ctx.reraise = False seqno = self.api.idl.change_seqno status = txn.commit_block() if status == txn.TRY_AGAIN: LOG.debug("OVSDB transaction returned TRY_AGAIN, retrying") if self.api.idl._session.rpc.status != 0: 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, seqno) continue elif status == txn.ERROR: msg = _LE("OVSDB Error: %s") % txn.get_error() if self.log_errors: LOG.error(msg) if self.check_error: # For now, raise similar error to vsctl/utils.execute() raise RuntimeError(msg) return elif status == txn.ABORTED: LOG.debug("Transaction aborted") return elif status == txn.UNCHANGED: LOG.debug("Transaction caused no change") return [cmd.result for cmd in self.commands]
def do_commit(self): start_time = time.time() attempts = 0 while True: elapsed_time = time.time() - start_time 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 txn = idl.Transaction(self.api.idl) for i, command in enumerate(self.commands): LOG.debug("Running txn command(idx=%(idx)s): %(cmd)s", {'idx': i, 'cmd': command}) try: command.run_idl(txn) except Exception: with excutils.save_and_reraise_exception() as ctx: txn.abort() if not self.check_error: ctx.reraise = False seqno = self.api.idl.change_seqno status = txn.commit_block() if status == txn.TRY_AGAIN: LOG.debug("OVSDB transaction returned TRY_AGAIN, retrying") if self.api.idl._session.rpc.status != 0: LOG.debug("Lost connection to OVSDB, reconnecting!") self.api.idl.force_reconnect() idlutils.wait_for_change( self.api.idl, self.timeout - elapsed_time, seqno) continue elif status == txn.ERROR: msg = _LE("OVSDB Error: %s") % txn.get_error() if self.log_errors: LOG.error(msg) if self.check_error: # For now, raise similar error to vsctl/utils.execute() raise RuntimeError(msg) return elif status == txn.ABORTED: LOG.debug("Transaction aborted") return elif status == txn.UNCHANGED: LOG.debug("Transaction caused no change") return [cmd.result for cmd in self.commands]
def start(self, table_name_list=None): """ :param table_name_list: A list of table names for schema_helper to register. When this parameter is given, schema_helper will only register tables which name are in list. Otherwise, schema_helper will register all tables for given schema_name as default. """ self._schema_filter = table_name_list with self.lock: if self.idl is not None: return self.idl = self.idl_factory() idlutils.wait_for_change(self.idl, self.timeout) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, table_name_list=None): """ :param table_name_list: A list of table names for schema_helper to register. When this parameter is given, schema_helper will only register tables which name are in list. Otherwise, schema_helper will register all tables for given schema_name as default. """ with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection, set_timeout=True) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() if table_name_list is None: helper.register_all() else: for table_name in table_name_list: helper.register_table(table_name) self.idl = self.idl_class(self.connection, helper) idlutils.wait_for_change(self.idl, self.timeout) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, driver, table_name_list=None): # The implementation of this function is same as the base class start() # except that OvnIdl object is created instead of idl.Idl and the # enable_connection_uri() helper isn't called (since ovs-vsctl won't # exist on the controller node when using the reference architecture). with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # There is a small window for a race, so retry up to a second @tenacity.retry( wait=tenacity.wait_exponential(multiplier=0.01), stop=tenacity.stop_after_delay(1), reraise=True) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() if table_name_list is None: helper.register_all() else: for table_name in table_name_list: helper.register_table(table_name) idl_cls = self.get_ovn_idl_cls() self.idl = idl_cls(driver, self.connection, helper) self.idl.set_lock(self.idl.event_lock_name) idlutils.wait_for_change(self.idl, self.timeout) self.idl.post_initialize(driver) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, driver, table_name_list=None): # The implementation of this function is same as the base class start() # except that OvnIdl object is created instead of idl.Idl with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() if table_name_list is None: helper.register_all() else: for table_name in table_name_list: helper.register_table(table_name) idl_cls = self.get_ovn_idl_cls() self.idl = idl_cls(driver, self.connection, helper) self.idl.set_lock(self.idl.event_lock_name) idlutils.wait_for_change(self.idl, self.timeout) self.idl.post_initialize(driver) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, table_name_list=None): """ :param table_name_list: A list of table names for schema_helper to register. When this parameter is given, schema_helper will only register tables which name are in list. Otherwise, schema_helper will register all tables for given schema_name as default. """ with self.lock: if self.idl is not None: return try: helper = idlutils.get_schema_helper(self.connection, self.schema_name) except Exception: # We may have failed do to set-manager not being called helpers.enable_connection_uri(self.connection) # There is a small window for a race, so retry up to a second @retrying.retry(wait_exponential_multiplier=10, stop_max_delay=1000) def do_get_schema_helper(): return idlutils.get_schema_helper(self.connection, self.schema_name) helper = do_get_schema_helper() if table_name_list is None: helper.register_all() else: for table_name in table_name_list: helper.register_table(table_name) self.idl = idl.Idl(self.connection, helper) idlutils.wait_for_change(self.idl, self.timeout) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()
def start(self, driver, table_name_list=None): # The implementation of this function is same as the base class start() # except that OvnIdl object is created instead of idl.Idl. with self.lock: if self.idl is not None: return helper = self.get_schema_helper() if table_name_list is None: helper.register_all() else: for table_name in table_name_list: helper.register_table(table_name) idl_cls = self.get_ovn_idl_cls() self.idl = idl_cls(driver, self.connection, helper) self.idl.set_lock(self.idl.event_lock_name) idlutils.wait_for_change(self.idl, self.timeout) self.idl.post_initialize(driver) self.poller = poller.Poller() self.thread = threading.Thread(target=self.run) self.thread.setDaemon(True) self.thread.start()