diff --git a/dragonflow/cli/df_db.py b/dragonflow/cli/df_db.py index 123bbaf4c..a1414b667 100644 --- a/dragonflow/cli/df_db.py +++ b/dragonflow/cli/df_db.py @@ -179,7 +179,7 @@ def add_object_from_json(json_str, table): :param table: table name where object should be added :return: None """ - nb_api = api_nb.NbApi.get_instance(False) + nb_api = api_nb.NbApi.get_instance(False, True) try: model = model_framework.get_model(table) except KeyError: diff --git a/dragonflow/cmd/eventlet/df_metadata_service.py b/dragonflow/cmd/eventlet/df_metadata_service.py index 69ae55eca..74b522376 100644 --- a/dragonflow/cmd/eventlet/df_metadata_service.py +++ b/dragonflow/cmd/eventlet/df_metadata_service.py @@ -81,8 +81,7 @@ def main(): config.init(sys.argv[1:]) config.setup_logging() environment_setup() - cfg.CONF.set_override('enable_df_pub_sub', False, group='df') - nb_api = api_nb.NbApi.get_instance(False) + nb_api = api_nb.NbApi.get_instance(False, True) service_instance = metadata_service.DFMetadataProxyHandler( cfg.CONF, nb_api) df_service.register_service( diff --git a/dragonflow/controller/df_bgp_service.py b/dragonflow/controller/df_bgp_service.py index c9dbc8ba1..0a82fc802 100644 --- a/dragonflow/controller/df_bgp_service.py +++ b/dragonflow/controller/df_bgp_service.py @@ -165,10 +165,7 @@ class BGPService(service.Service): def main(): df_config.init(sys.argv) - # BGP dynamic route is not a service that needs real time response. - # So disable pubsub here and use period task to do BGP job. - cfg.CONF.set_override('enable_df_pub_sub', False, group='df') - nb_api = api_nb.NbApi.get_instance(False) + nb_api = api_nb.NbApi.get_instance(False, True) server = BGPService(nb_api) df_service.register_service('df-bgp-service', nb_api, server) service.launch(cfg.CONF, server).wait() diff --git a/dragonflow/controller/df_publisher_service.py b/dragonflow/controller/df_publisher_service.py index 3d13c22bc..cd3779af0 100644 --- a/dragonflow/controller/df_publisher_service.py +++ b/dragonflow/controller/df_publisher_service.py @@ -147,8 +147,7 @@ class PublisherService(object): def main(): df_config.init(sys.argv) - cfg.CONF.set_override('enable_df_pub_sub', False, group='df') - nb_api = api_nb.NbApi.get_instance(False) + nb_api = api_nb.NbApi.get_instance(False, True) service = PublisherService(nb_api) df_service.register_service('df-publisher-service', nb_api, service) service.initialize() diff --git a/dragonflow/db/api_nb.py b/dragonflow/db/api_nb.py index da925e156..4914ce5b1 100644 --- a/dragonflow/db/api_nb.py +++ b/dragonflow/db/api_nb.py @@ -60,15 +60,20 @@ class NbApi(object): self.pub_sub_use_multiproc = cfg.CONF.df.pub_sub_use_multiproc @staticmethod - def get_instance(is_neutron_server): + def get_instance(is_neutron_server, is_external_app=False): global _nb_api if _nb_api is None: nb_driver = df_utils.load_driver( cfg.CONF.df.nb_db_class, df_utils.DF_NB_DB_DRIVER_NAMESPACE) + # Do not use pubsub for external apps - this causes issues with + # threads and other issues. + use_pubsub = cfg.CONF.df.enable_df_pub_sub + if is_external_app: + use_pubsub = False nb_api = NbApi( nb_driver, - use_pubsub=cfg.CONF.df.enable_df_pub_sub, + use_pubsub=use_pubsub, is_neutron_server=is_neutron_server) nb_api.initialize(db_ip=cfg.CONF.df.remote_db_ip, db_port=cfg.CONF.df.remote_db_port)