)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"054668b0db79bd5c30188bea75468bc1cceb1469","unresolved":false,"context_lines":[{"line_number":11,"context_line":"instead of network_id if metadata network is enabled and"},{"line_number":12,"context_line":"a router port is connected to this network."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Later, MatadataDriver will register this uuid (i.e. router_id)"},{"line_number":15,"context_line":"with monitor for the new metadata proxy process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"But when disable_isolated_metadata_proxy() destroys a metadata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a710552_7a34b2dd","line":14,"updated":"2015-12-15 03:37:37.000000000","message":"nit: MetadataDriver","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"054668b0db79bd5c30188bea75468bc1cceb1469","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"But when disable_isolated_metadata_proxy() destroys a metadata"},{"line_number":18,"context_line":"proxy agent for a network, it always passes network_id as the uuid."},{"line_number":19,"context_line":"Thus MatadataDriver can not find the matching process. So the"},{"line_number":20,"context_line":"corresponding metadata proxy agent can not be destroyed."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Icab94f4e09e95fa6729c458522a3fe50e850a4be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a710552_fa1f4259","line":19,"updated":"2015-12-15 03:37:37.000000000","message":"nit: MetadataDriver","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"}],"neutron/agent/dhcp/agent.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"938cd27b264ebd6b2b249e2e119f5857283042db","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self.conf, **kwargs)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":390,"context_line":"        router_id \u003d self._find_router_on_metadata_network(network)"},{"line_number":391,"context_line":"        if router_id:"},{"line_number":392,"context_line":"            uuid \u003d router_id"},{"line_number":393,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_4179d492","line":390,"updated":"2015-12-14 23:24:49.000000000","message":"it would be nice if we stored this info locally so we don\u0027t need to fetch it later to look it up each time a delete needs to occur.\n\n\nalso should add a unit test for this.","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"523a5dc380c96cd68a94ff4d8026a756c0b4fe38","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self.conf, **kwargs)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":390,"context_line":"        router_id \u003d self._find_router_on_metadata_network(network)"},{"line_number":391,"context_line":"        if router_id:"},{"line_number":392,"context_line":"            uuid \u003d router_id"},{"line_number":393,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_c1f5c483","line":390,"in_reply_to":"5a710552_01e2ec03","updated":"2015-12-14 23:43:51.000000000","message":"sure, how about above in __init__(): \n\nself._is_router_uuid \u003d {}\nself._is_router_uuid[uuid] \u003d true/false when it is created \n\nand then look it up when it is removed. Also need to make sure the startup/sync logic populates this initially. \n\n\nYes, a unit tests to cover the logic added below.","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"},{"author":{"_account_id":17734,"name":"Shih-Hao Li","email":"shihli@vmware.com","username":"shli"},"change_message_id":"23eab58b8db855435e2ea9c79da8ff84454fe328","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self.conf, **kwargs)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":390,"context_line":"        router_id \u003d self._find_router_on_metadata_network(network)"},{"line_number":391,"context_line":"        if router_id:"},{"line_number":392,"context_line":"            uuid \u003d router_id"},{"line_number":393,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_01e2ec03","line":390,"in_reply_to":"5a710552_4179d492","updated":"2015-12-14 23:33:56.000000000","message":"Could you suggest where to store this info?\n\nAlso did you mean adding a unit test for disable_isolated_metadata_proxy?","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0011248d634172257ff0f1c74b40bacc074fbe6f","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self.conf, **kwargs)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":390,"context_line":"        router_id \u003d self._find_router_on_metadata_network(network)"},{"line_number":391,"context_line":"        if router_id:"},{"line_number":392,"context_line":"            uuid \u003d router_id"},{"line_number":393,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a710552_e737abe1","line":390,"in_reply_to":"5a710552_c1f5c483","updated":"2015-12-15 03:10:31.000000000","message":"I would vote for @Aaron \u0027s suggestion with caching router uuid for another reason.\n\nThe router might be disconnected from network during the enable-\u003edisable metadata. If this happens, you will not be able to retrieve the router id when disabling the metadata proxy.","commit_id":"765ecb05f29f9c74e108dafc250a61df7115ec8d"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"8a5599a5926a68c1bc42dc6c6207dc8d45871fd7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.dhcp_version \u003d self.dhcp_driver_cls.check_version()"},{"line_number":66,"context_line":"        self._populate_networks_cache()"},{"line_number":67,"context_line":"        # keep track of routers connected to a metadata network"},{"line_number":68,"context_line":"        self._metadata_routers \u003d {}  # {network_id: router_id}"},{"line_number":69,"context_line":"        self._process_monitor \u003d external_process.ProcessMonitor("},{"line_number":70,"context_line":"            config\u003dself.conf,"},{"line_number":71,"context_line":"            resource_type\u003d\u0027dhcp\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_361eb1bb","line":68,"range":{"start_line":68,"start_character":39,"end_line":68,"end_character":62},"updated":"2015-12-20 10:54:32.000000000","message":"IMO, this comment is unclear","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cf7df2390a80cd454ef92fdaf26f62b753f910d9","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.dhcp_version \u003d self.dhcp_driver_cls.check_version()"},{"line_number":66,"context_line":"        self._populate_networks_cache()"},{"line_number":67,"context_line":"        # keep track of routers connected to a metadata network"},{"line_number":68,"context_line":"        self._metadata_routers \u003d {}  # {network_id: router_id}"},{"line_number":69,"context_line":"        self._process_monitor \u003d external_process.ProcessMonitor("},{"line_number":70,"context_line":"            config\u003dself.conf,"},{"line_number":71,"context_line":"            resource_type\u003d\u0027dhcp\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_dd4897ce","line":68,"range":{"start_line":68,"start_character":39,"end_line":68,"end_character":62},"in_reply_to":"3a7e1126_361eb1bb","updated":"2015-12-21 10:24:34.000000000","message":"The comment at line 68 actually clarifies what this dict is.\nSome rephrasing of the comment at line 67 might be useful.\nSomething like:\n\n\"keep track of mappings between networks and routers for metatada processing\"\n\n(but probably the above is not really clearer)","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cf7df2390a80cd454ef92fdaf26f62b753f910d9","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":387,"context_line":"        if (self.conf.enable_metadata_network and"},{"line_number":388,"context_line":"            network.id in self._metadata_routers):"},{"line_number":389,"context_line":"            uuid \u003d self._metadata_routers[network.id]"},{"line_number":390,"context_line":"            del self._metadata_routers[network.id]"},{"line_number":391,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_9df1af6d","line":388,"range":{"start_line":388,"start_character":26,"end_line":388,"end_character":30},"updated":"2015-12-21 10:24:34.000000000","message":"question: will this work as intended across agent reboots?\nIf I read the code correctly self._metadata_routers will be reset, but actually there will still be a router serving metadata for network.id.\n\nHowever, the metadata driver will try and destroy metadata by network_id","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":17734,"name":"Shih-Hao Li","email":"shihli@vmware.com","username":"shli"},"change_message_id":"9028f9152d34437a1333ffd83c21a6b85108331d","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":387,"context_line":"        if (self.conf.enable_metadata_network and"},{"line_number":388,"context_line":"            network.id in self._metadata_routers):"},{"line_number":389,"context_line":"            uuid \u003d self._metadata_routers[network.id]"},{"line_number":390,"context_line":"            del self._metadata_routers[network.id]"},{"line_number":391,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_2d0b982b","line":388,"range":{"start_line":388,"start_character":26,"end_line":388,"end_character":30},"in_reply_to":"3a7e1126_9df1af6d","updated":"2015-12-21 17:17:57.000000000","message":"When DHCP agent reboot, it will restart all neutron-ns-metadata-proxy processes via enable_isolated_metadata_proxy(). So self._metadata_routers will be repopulated again. Does this answer your question?","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"8a5599a5926a68c1bc42dc6c6207dc8d45871fd7","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":387,"context_line":"        if (self.conf.enable_metadata_network and"},{"line_number":388,"context_line":"            network.id in self._metadata_routers):"},{"line_number":389,"context_line":"            uuid \u003d self._metadata_routers[network.id]"},{"line_number":390,"context_line":"            del self._metadata_routers[network.id]"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            uuid \u003d network.id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_f67a69f0","line":389,"range":{"start_line":389,"start_character":24,"end_line":389,"end_character":41},"updated":"2015-12-20 10:54:32.000000000","message":"prefer:\n\n uuid \u003d self._metadata_routers.pop(network.id)","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"cf7df2390a80cd454ef92fdaf26f62b753f910d9","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":387,"context_line":"        if (self.conf.enable_metadata_network and"},{"line_number":388,"context_line":"            network.id in self._metadata_routers):"},{"line_number":389,"context_line":"            uuid \u003d self._metadata_routers[network.id]"},{"line_number":390,"context_line":"            del self._metadata_routers[network.id]"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            uuid \u003d network.id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_3dc99b59","line":389,"range":{"start_line":389,"start_character":24,"end_line":389,"end_character":41},"in_reply_to":"3a7e1126_8d9ae86c","updated":"2015-12-21 10:24:34.000000000","message":"makes sense","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"3c6caeb051e52cf7da6aa7894999ccd5a34623a6","unresolved":false,"context_lines":[{"line_number":386,"context_line":"    def disable_isolated_metadata_proxy(self, network):"},{"line_number":387,"context_line":"        if (self.conf.enable_metadata_network and"},{"line_number":388,"context_line":"            network.id in self._metadata_routers):"},{"line_number":389,"context_line":"            uuid \u003d self._metadata_routers[network.id]"},{"line_number":390,"context_line":"            del self._metadata_routers[network.id]"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            uuid \u003d network.id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_8d9ae86c","line":389,"range":{"start_line":389,"start_character":24,"end_line":389,"end_character":41},"in_reply_to":"3a7e1126_f67a69f0","updated":"2015-12-21 07:48:17.000000000","message":"+1","commit_id":"3da42ad89e7435b56d59f6b2e8a4f608b74962ef"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da12f738b1224e6f2b54b24843e812d50ab9b415","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.dhcp_version \u003d self.dhcp_driver_cls.check_version()"},{"line_number":66,"context_line":"        self._populate_networks_cache()"},{"line_number":67,"context_line":"        # keep track of mappings between networks and routers for"},{"line_number":68,"context_line":"        # metadata processing"},{"line_number":69,"context_line":"        self._metadata_routers \u003d {}  # {network_id: router_id}"},{"line_number":70,"context_line":"        self._process_monitor \u003d external_process.ProcessMonitor("},{"line_number":71,"context_line":"            config\u003dself.conf,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_1d1251b5","line":68,"updated":"2015-12-22 20:46:25.000000000","message":"nit: I would adding some additional text here saying (which is used when configured with enable_metadata_network\u003dTrue).","commit_id":"daee3f1b9567407ee2d812b223268a12631b66e9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a37cbd12245481eb301311dac2bd959cf976346d","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            uuid \u003d self._metadata_routers.pop(network.id)"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            uuid \u003d network.id"},{"line_number":393,"context_line":"        metadata_driver.MetadataDriver.destroy_monitored_metadata_proxy("},{"line_number":394,"context_line":"            self._process_monitor, uuid, self.conf)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_fb25f7c1","line":393,"updated":"2015-12-30 19:06:18.000000000","message":"If this throws an exception, you will have lost the metadata router UUID due to the pop call on 390 so this can\u0027t be retried.\n\nPlease wait to remove it from the dictionary until after this statement.","commit_id":"daee3f1b9567407ee2d812b223268a12631b66e9"}]}
