Exemple #1
0
    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()
Exemple #2
0
 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))
Exemple #3
0
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())