def post_fork_initialize(self, resource, event, trigger, payload=None): # NOTE(rtheis): This will initialize all workers (API, RPC, # plugin service and OVN) with OVN IDL connections. self._post_fork_event.clear() self._ovn_client_inst = None self._nb_ovn, self._sb_ovn = impl_idl_ovn.get_ovn_idls(self, trigger) # Override agents API methods self.patch_plugin_merge("get_agents", get_agents) self.patch_plugin_choose("get_agent", get_agent) self.patch_plugin_choose("update_agent", update_agent) self.patch_plugin_choose("delete_agent", delete_agent) # Now IDL connections can be safely used. self._post_fork_event.set() if utils.get_method_class(trigger) == worker.OvnWorker: # Call the synchronization task if its ovn worker # This sync neutron DB to OVN-NB DB only in inconsistent states self.nb_synchronizer = ovn_db_sync.OvnNbSynchronizer( self._plugin, self._nb_ovn, self._sb_ovn, config.get_ovn_neutron_sync_mode(), self) self.nb_synchronizer.sync() # This sync neutron DB to OVN-SB DB only in inconsistent states self.sb_synchronizer = ovn_db_sync.OvnSbSynchronizer( self._plugin, self._sb_ovn, self) self.sb_synchronizer.sync() if utils.get_method_class(trigger) == maintenance.MaintenanceWorker: self._maintenance_thread = maintenance.MaintenanceThread() self._maintenance_thread.add_periodics( maintenance.DBInconsistenciesPeriodics(self._ovn_client)) self._maintenance_thread.start()
def get_ovn_idl_retry(cls): trigger_class = utils.get_method_class(trigger) LOG.info('Getting %(cls)s for %(trigger)s with retry', { 'cls': cls.__name__, 'trigger': trigger_class.__name__ }) return cls(get_connection(cls, trigger, driver))
def get_connection(db_class, trigger=None, driver=None): # The trigger is the start() method of the worker class if db_class == OvsdbNbOvnIdl: args = (cfg.get_ovn_nb_connection(), 'OVN_Northbound') cls = ovsdb_monitor.OvnNbIdl elif db_class == OvsdbSbOvnIdl: args = (cfg.get_ovn_sb_connection(), 'OVN_Southbound') cls = ovsdb_monitor.OvnSbIdl if trigger and utils.get_method_class(trigger) == ovsdb_monitor.OvnWorker: idl_ = cls.from_server(*args, driver=driver) else: if db_class == OvsdbSbOvnIdl: idl_ = ovsdb_monitor.BaseOvnSbIdl.from_server(*args) else: idl_ = ovsdb_monitor.BaseOvnIdl.from_server(*args) return connection.Connection(idl_, timeout=cfg.get_ovn_ovsdb_timeout())