)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"dfdfc25617077a8e1ebd6b49bbc5bdd72b5b1199","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shanhe \u003cshan.he@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-28 09:52:38 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"establish only one connection with NbApi"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id032345908fcd43c03ff1864167892aabcd4ea11"},{"line_number":10,"context_line":"Closes-bug:#1606454"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bacf61ea_b87c3a73","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":29},"updated":"2016-08-04 07:16:20.000000000","message":"if you mean the connection to backend database, i suggest you only reuse the db connection object.","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"b7b7ea5a3bef889235f9c93252f3aa10d3ca7312","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shanhe \u003cshan.he@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-28 09:52:38 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"establish only one connection with NbApi"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id032345908fcd43c03ff1864167892aabcd4ea11"},{"line_number":10,"context_line":"Closes-bug:#1606454"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9ad45d7e_0dc77546","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":29},"in_reply_to":"bacf61ea_b87c3a73","updated":"2016-08-08 09:34:21.000000000","message":"yes, I mean the connection to backend database.\nyou mean the NbApi object?","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cd8418fe71bba156f454016d50d07bb59da6261d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_nb_api \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def get_nb_api():"},{"line_number":43,"context_line":"    global _nb_api"},{"line_number":44,"context_line":"    return _nb_api"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_9ca60ea9","line":42,"updated":"2016-08-07 11:45:10.000000000","message":"In case @LiMa\u0027s suggestion doesn\u0027t change this code:\n\nConsider making this a static function in NbApi (e.g. NbApi.get_instance())\n\nPlease initialise _nb_api if it is None. The information should be available via configuration.","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"38389b647a18a0ba059bb3560d7282da7488e4c7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_nb_api \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def get_nb_api():"},{"line_number":43,"context_line":"    global _nb_api"},{"line_number":44,"context_line":"    return _nb_api"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_6e88e771","line":42,"in_reply_to":"9ad45d7e_9e8876e9","updated":"2016-08-11 11:45:27.000000000","message":"I think just making is_neutron_server as a parameter of NBApi.get_instance() is more directly. what\u0027s your opinion?","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ec0fdf85a8f21a2e4f03ed1741091818f5b1c21","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_nb_api \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def get_nb_api():"},{"line_number":43,"context_line":"    global _nb_api"},{"line_number":44,"context_line":"    return _nb_api"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_9e8876e9","line":42,"in_reply_to":"9ad45d7e_ad2aa9e5","updated":"2016-08-09 07:11:07.000000000","message":"The database driver, use_pubsub, ip, and port are all available via configuration. Therefore, you can construct and initialise nb_api here.\n\nis_neutron_server may need a little more work, but can also be inferred (e.g. a global variable in df_local_controller, with default value False, and set to True if this is a local controller and not a neutron server.)","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"b7b7ea5a3bef889235f9c93252f3aa10d3ca7312","unresolved":false,"context_lines":[{"line_number":39,"context_line":"_nb_api \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def get_nb_api():"},{"line_number":43,"context_line":"    global _nb_api"},{"line_number":44,"context_line":"    return _nb_api"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_ad2aa9e5","line":42,"in_reply_to":"bacf61ea_9ca60ea9","updated":"2016-08-08 09:34:21.000000000","message":"what do you mean \" The information should be available via configuration.\"?","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"}],"dragonflow/neutron/ml2/mech_driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cd8418fe71bba156f454016d50d07bb59da6261d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":58,"context_line":"        self._set_base_port_binding()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        nb_driver \u003d df_utils.load_driver("},{"line_number":61,"context_line":"            cfg.CONF.df.nb_db_class,"},{"line_number":62,"context_line":"            df_utils.DF_NB_DB_DRIVER_NAMESPACE)"},{"line_number":63,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_1ce85eb2","line":60,"updated":"2016-08-07 11:45:10.000000000","message":"You only need this variable if NbApi was not constructed yet. Please move it inside the if block.","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"38389b647a18a0ba059bb3560d7282da7488e4c7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":58,"context_line":"        self._set_base_port_binding()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        nb_driver \u003d df_utils.load_driver("},{"line_number":61,"context_line":"            cfg.CONF.df.nb_db_class,"},{"line_number":62,"context_line":"            df_utils.DF_NB_DB_DRIVER_NAMESPACE)"},{"line_number":63,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_01142b42","line":60,"in_reply_to":"9ad45d7e_1ec2c633","updated":"2016-08-11 11:45:27.000000000","message":"gotcha","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8ec0fdf85a8f21a2e4f03ed1741091818f5b1c21","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":58,"context_line":"        self._set_base_port_binding()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        nb_driver \u003d df_utils.load_driver("},{"line_number":61,"context_line":"            cfg.CONF.df.nb_db_class,"},{"line_number":62,"context_line":"            df_utils.DF_NB_DB_DRIVER_NAMESPACE)"},{"line_number":63,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_1ec2c633","line":60,"in_reply_to":"9ad45d7e_6d4ef1c2","updated":"2016-08-09 07:11:07.000000000","message":"The test is on self.nb_api. You don\u0027t need nb_driver if self.nb_api is already initialised. nb_driver is only referenced inside the if block.","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"b7b7ea5a3bef889235f9c93252f3aa10d3ca7312","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vif_type \u003d portbindings.VIF_TYPE_OVS"},{"line_number":58,"context_line":"        self._set_base_port_binding()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        nb_driver \u003d df_utils.load_driver("},{"line_number":61,"context_line":"            cfg.CONF.df.nb_db_class,"},{"line_number":62,"context_line":"            df_utils.DF_NB_DB_DRIVER_NAMESPACE)"},{"line_number":63,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_6d4ef1c2","line":60,"in_reply_to":"bacf61ea_1ce85eb2","updated":"2016-08-08 09:34:21.000000000","message":"but I must get it before checking if it is None","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"}],"dragonflow/neutron/services/l3_router_plugin.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"cd8418fe71bba156f454016d50d07bb59da6261d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.router_scheduler \u003d importutils.import_object("},{"line_number":71,"context_line":"            cfg.CONF.router_scheduler_driver)"},{"line_number":72,"context_line":"        super(DFL3RouterPlugin, self).__init__()"},{"line_number":73,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":74,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"},{"line_number":75,"context_line":"        if self.nb_api is None:"},{"line_number":76,"context_line":"            self.nb_api \u003d api_nb.NbApi("}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_5cce565a","line":73,"updated":"2016-08-07 11:45:10.000000000","message":"Same here re: usage of nb_driver_class variable.","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"b7b7ea5a3bef889235f9c93252f3aa10d3ca7312","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.router_scheduler \u003d importutils.import_object("},{"line_number":71,"context_line":"            cfg.CONF.router_scheduler_driver)"},{"line_number":72,"context_line":"        super(DFL3RouterPlugin, self).__init__()"},{"line_number":73,"context_line":"        nb_driver_class \u003d importutils.import_class(cfg.CONF.df.nb_db_class)"},{"line_number":74,"context_line":"        self.nb_api \u003d api_nb.get_nb_api()"},{"line_number":75,"context_line":"        if self.nb_api is None:"},{"line_number":76,"context_line":"            self.nb_api \u003d api_nb.NbApi("}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_2ddb59ef","line":73,"in_reply_to":"bacf61ea_5cce565a","updated":"2016-08-08 09:34:21.000000000","message":"ok","commit_id":"525411de5b5e2444f6a136a81339f5acca079566"}]}
