)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e7d6df151f1d5fdb901ac2c022486bc5452d07da","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbhaley@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-12-13 11:16:27 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"L3 agent graceful shutdown"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add an option to delete all routers on agent shutdown."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3fa7e38b_a415b7e8","line":7,"range":{"start_line":7,"start_character":9,"end_line":7,"end_character":17},"updated":"2019-12-16 03:29:31.000000000","message":"This can cause some misunderstand for developers when then read such titile. This \u0027graceful\u0027 has relative conditions, it is for some deployment scenarios. So I would like to rephrase this to something like this: \"Add ability for L3 agent to clean up resources on shutdown\".","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f0786c8a6183bb7964100b80cd3cc2fb3855873a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbhaley@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-12-13 11:16:27 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"L3 agent graceful shutdown"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add an option to delete all routers on agent shutdown."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3fa7e38b_71ac4d88","line":7,"range":{"start_line":7,"start_character":9,"end_line":7,"end_character":17},"in_reply_to":"3fa7e38b_a415b7e8","updated":"2019-12-16 22:02:07.000000000","message":"Done","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c528d6cee8b40dd5fd32e800f6725f2df8c5c946","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e2c5cd5d","line":900,"updated":"2019-11-07 14:58:55.000000000","message":"I think this log need to be moved after the if statement to avoid confusing.\n\nOr maybe it need to be reworded to avoid confusing, I think it\u0027s confusing to say we stop something here and do nothing due to the if statement below and if user pass false through `cleanup_on_shutdown`.\n\nMaybe the log info below is enough in this case.\n\nThoughts?","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"410ebcb3951ee2b0892996b7267ca4c7c646cf77","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e885a45a","line":900,"in_reply_to":"3fa7e38b_054ca9c6","updated":"2019-11-08 08:59:09.000000000","message":"The confusing is that we logs info here and we doing nothing after.\n\nMy main concern was more to logging info only if necessary to avoid to misleading through the logging analyze during debug.\n\nAnyway it\u0027s not an earthquake and your changes seems ok, so why not.","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"85dd914819753abdf1c57d85cc8273b7b228766d","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_054ca9c6","line":900,"in_reply_to":"3fa7e38b_e2c5cd5d","updated":"2019-11-08 08:18:26.000000000","message":"What exactly is confusing? Stopping does not mean we cleanup something. It just informs that agent is about to stop","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e19a21874579d53538b8aa0a694794428620a2ba","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_dc46f821","line":900,"range":{"start_line":900,"start_character":27,"end_line":900,"end_character":32},"updated":"2019-11-19 01:49:13.000000000","message":"nit: L3 agent","commit_id":"92f6691c21098c6b34e4557b99d79d91a1e4c16d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fee0d27e6ac652e8b550c9356f43b6a3b27ac34b","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_72728b4c","line":900,"range":{"start_line":900,"start_character":27,"end_line":900,"end_character":32},"in_reply_to":"3fa7e38b_dc46f821","updated":"2019-11-19 09:13:34.000000000","message":"Done","commit_id":"92f6691c21098c6b34e4557b99d79d91a1e4c16d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"826a0f5293e49b1db3c593678d47d1f5b79b5fc1","unresolved":false,"context_lines":[{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping L3 agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_ad2177a0","line":901,"range":{"start_line":901,"start_character":21,"end_line":901,"end_character":40},"updated":"2019-11-20 09:18:43.000000000","message":"So, please add a WARNING log for this during l3-agent init if it is True, of course, saying something to attract operators\u0027 eyes.","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8089d688a7952831081afe0ba7c7bf84eecb6c90","unresolved":false,"context_lines":[{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def stop(self):"},{"line_number":900,"context_line":"        LOG.info(\"Stopping L3 agent\")"},{"line_number":901,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_cd243a63","line":901,"range":{"start_line":901,"start_character":21,"end_line":901,"end_character":40},"in_reply_to":"3fa7e38b_ad2177a0","updated":"2019-12-04 07:12:29.000000000","message":"Why should this be a warning? the default is False, if it\u0027s True then I suppose operator did it intentionally. Do you think info log below is not enough?","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"826a0f5293e49b1db3c593678d47d1f5b79b5fc1","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"},{"line_number":905,"context_line":"                router.delete()"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def create_pd_router_update(self):"},{"line_number":908,"context_line":"        router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0a29919a","line":905,"range":{"start_line":905,"start_character":16,"end_line":905,"end_character":31},"updated":"2019-11-20 09:18:43.000000000","message":"1. This makes the new config option a very dangous choice. If opreators incorrectly set this for their cloud, a simple l3-agent stop can cause all router to be delete in this agent, and all HA router will do state change, then data-plane down for a while. For non-HA, data-plane down forever.\n\n2. For the dvr local router (dvr agent mode), we can skip such delete ?","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8089d688a7952831081afe0ba7c7bf84eecb6c90","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"},{"line_number":905,"context_line":"                router.delete()"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def create_pd_router_update(self):"},{"line_number":908,"context_line":"        router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0dd0122b","line":905,"range":{"start_line":905,"start_character":16,"end_line":905,"end_character":31},"in_reply_to":"3fa7e38b_0a29919a","updated":"2019-12-04 07:12:29.000000000","message":"1.Well, we can\u0027t really protect everything if operator sets incorrect config. We take care of default value and assume operator reads config description before changing it.\n2. Why? I\u0027d prefer consistency. For each agent operator is able to set required value (only changing cleanup_on_shutdown to True where needed)","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"28ffed06443089240cea59520d9e7418f947c1b5","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"},{"line_number":905,"context_line":"                router.delete()"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def create_pd_router_update(self):"},{"line_number":908,"context_line":"        router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_fc276262","line":905,"range":{"start_line":905,"start_character":16,"end_line":905,"end_character":31},"in_reply_to":"3fa7e38b_0dd0122b","updated":"2019-12-04 12:27:18.000000000","message":"Data-plane down, that\u0027s why a warning log is needed. As you said in your response 2, compute node and network node may have different choice, so a warning log can help cloud operator to correct the mis-settings during the cloud deployment cycle.","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"41cfde3024ceac8886ee1bd069b545d736a0e8ef","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.exiting \u003d True"},{"line_number":903,"context_line":"            LOG.info(\"Deleting routers\")"},{"line_number":904,"context_line":"            for router in self.router_info.values():"},{"line_number":905,"context_line":"                router.delete()"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def create_pd_router_update(self):"},{"line_number":908,"context_line":"        router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_9ccd0e60","line":905,"range":{"start_line":905,"start_character":16,"end_line":905,"end_character":31},"in_reply_to":"3fa7e38b_fc276262","updated":"2019-12-04 12:42:04.000000000","message":"agree","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"81cfac94174703e9c37ead9905a204a58fd9a42e","unresolved":false,"context_lines":[{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class L3NATAgentWithStateReport(L3NATAgent):"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":921,"context_line":"        super(L3NATAgentWithStateReport, self).__init__(host\u003dhost, conf\u003dconf)"},{"line_number":922,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.REPORTS)"},{"line_number":923,"context_line":"        self.failed_report_state \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_850ff22d","line":920,"range":{"start_line":920,"start_character":4,"end_line":920,"end_character":40},"updated":"2019-12-04 15:13:54.000000000","message":"I wonder if the WARNING log should be set here, not the final stop function:\n\n        if self.conf.cleanup_on_shutdown:\n            LOG.warning(\"cleanup_on_shutdown is set to True, so agent will \"\n                        \"cleanup all its routers, \"\n                        \"data-plane will be affected.\")\n\nOr line 272.","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"acbe1a923747232a442cc6bb33304542cc84767c","unresolved":false,"context_lines":[{"line_number":917,"context_line":""},{"line_number":918,"context_line":"class L3NATAgentWithStateReport(L3NATAgent):"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":921,"context_line":"        super(L3NATAgentWithStateReport, self).__init__(host\u003dhost, conf\u003dconf)"},{"line_number":922,"context_line":"        self.state_rpc \u003d agent_rpc.PluginReportStateAPI(topics.REPORTS)"},{"line_number":923,"context_line":"        self.failed_report_state \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_0e19d678","line":920,"range":{"start_line":920,"start_character":4,"end_line":920,"end_character":40},"in_reply_to":"3fa7e38b_850ff22d","updated":"2019-12-05 08:33:22.000000000","message":"Done","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca2a7fa64143a83a112b3d88e48a56d58d391e53","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_config(self):"},{"line_number":350,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":351,"context_line":"            LOG.warning(\"cleanup_on_shutdown is set to True, so agent will \""},{"line_number":352,"context_line":"                        \"cleanup all its routers when exiting, \""},{"line_number":353,"context_line":"                        \"data-plane will be affected.\")"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_fe8c1e2f","line":351,"range":{"start_line":351,"start_character":64,"end_line":351,"end_character":69},"updated":"2019-12-05 19:31:11.000000000","message":"nit: l3-agent","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"45f729987b59e59c0511b5429dcf9ab8fb727842","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def check_config(self):"},{"line_number":350,"context_line":"        if self.conf.cleanup_on_shutdown:"},{"line_number":351,"context_line":"            LOG.warning(\"cleanup_on_shutdown is set to True, so agent will \""},{"line_number":352,"context_line":"                        \"cleanup all its routers when exiting, \""},{"line_number":353,"context_line":"                        \"data-plane will be affected.\")"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_896daf30","line":351,"range":{"start_line":351,"start_character":64,"end_line":351,"end_character":69},"in_reply_to":"3fa7e38b_fe8c1e2f","updated":"2019-12-06 07:16:40.000000000","message":"Done","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e2aa3931fb3947a1955b76499c51d53e04b4632","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        self.fullsync \u003d True"},{"line_number":297,"context_line":"        self.sync_routers_chunk_size \u003d SYNC_ROUTERS_MAX_CHUNK_SIZE"},{"line_number":298,"context_line":"        self.exiting \u003d False"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # Get the HA router count from Neutron Server"},{"line_number":301,"context_line":"        # This is the first place where we contact neutron-server on startup"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2add6d6c","line":298,"updated":"2019-12-09 15:52:20.000000000","message":"super nit: I always prefer to create private member variables.","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d1632d182d5797e86acb86001c51762b7b222bda","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        self.fullsync \u003d True"},{"line_number":297,"context_line":"        self.sync_routers_chunk_size \u003d SYNC_ROUTERS_MAX_CHUNK_SIZE"},{"line_number":298,"context_line":"        self.exiting \u003d False"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # Get the HA router count from Neutron Server"},{"line_number":301,"context_line":"        # This is the first place where we contact neutron-server on startup"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2553536e","line":298,"in_reply_to":"3fa7e38b_2add6d6c","updated":"2019-12-10 09:49:45.000000000","message":"Done","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e2aa3931fb3947a1955b76499c51d53e04b4632","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        self._queue.add(router_update)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def _process_router_update(self):"},{"line_number":679,"context_line":"        if self.exiting:"},{"line_number":680,"context_line":"            return"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        for rp, update in self._queue.each_update_to_next_resource():"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_aaa39dfe","line":679,"updated":"2019-12-09 15:52:20.000000000","message":"I agree with this but you should also limit the creation of new threads in \"_process_routers_loop\".\n\nIMO, the \"while True\" loop should be controlled by self.exiting","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d1632d182d5797e86acb86001c51762b7b222bda","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        self._queue.add(router_update)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def _process_router_update(self):"},{"line_number":679,"context_line":"        if self.exiting:"},{"line_number":680,"context_line":"            return"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        for rp, update in self._queue.each_update_to_next_resource():"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2501133a","line":679,"in_reply_to":"3fa7e38b_aaa39dfe","updated":"2019-12-10 09:49:45.000000000","message":"Done","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"}],"neutron/conf/agent/l3/config.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e2aa3931fb3947a1955b76499c51d53e04b4632","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                      \u0027(by default), the user executing the L3 agent will be \u0027"},{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Gracefully delete all routers on agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6b6bae84","line":103,"updated":"2019-12-09 15:52:20.000000000","message":"The config option and the feature itself deserve a release note, IMO.","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"df3b611e1f1f455632baa04b4b6d1c2989c5fe4e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Gracefully delete all routers on agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_e5dca646","line":104,"range":{"start_line":104,"start_character":24,"end_line":104,"end_character":34},"updated":"2019-12-04 14:37:12.000000000","message":"I guess graceful is relative :)","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"acbe1a923747232a442cc6bb33304542cc84767c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Gracefully delete all routers on agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_0e47964e","line":104,"range":{"start_line":104,"start_character":24,"end_line":104,"end_character":34},"in_reply_to":"3fa7e38b_e5dca646","updated":"2019-12-05 08:33:22.000000000","message":":D agree","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca2a7fa64143a83a112b3d88e48a56d58d391e53","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Delete all routers on agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_1ee01acc","line":104,"range":{"start_line":104,"start_character":46,"end_line":104,"end_character":51},"updated":"2019-12-05 19:31:11.000000000","message":"s/L3 agent","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"45f729987b59e59c0511b5429dcf9ab8fb727842","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Delete all routers on agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_29eefb8a","line":104,"range":{"start_line":104,"start_character":46,"end_line":104,"end_character":51},"in_reply_to":"3fa7e38b_1ee01acc","updated":"2019-12-06 07:16:40.000000000","message":"Done","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1237a5e8bad5d05b1adb570ff6a860f3223eb515","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Delete all routers on L3 agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_52a85389","line":104,"updated":"2019-12-13 15:47:27.000000000","message":"IMO it would be useful to add here note/warning that setting this option to True will affect data plane during stopping/restarting L3 agent","commit_id":"555a8a069b649c5a0b2e553d456d1e47e8cb0192"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1d8042e8e0fb191b1b4d3296c6ae9e13b74ff8ac","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027passed. If \"root\" specified, because radvd is spawned \u0027"},{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\"Delete all routers on L3 agent shutdown.\")),"},{"line_number":105,"context_line":"]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_7261cf10","line":104,"in_reply_to":"3fa7e38b_52a85389","updated":"2019-12-13 16:15:58.000000000","message":"Ack, I\u0027ll it here and the release note for completeness.","commit_id":"555a8a069b649c5a0b2e553d456d1e47e8cb0192"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e7d6df151f1d5fdb901ac2c022486bc5452d07da","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e48e4f32","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"updated":"2019-12-16 03:29:31.000000000","message":"I would like to say \"radical\".","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4d5e9c5ee2403c363205f2e9cc949c5c016ee80d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_f6b2734a","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"in_reply_to":"3fa7e38b_7940c107","updated":"2019-12-16 20:16:12.000000000","message":"@Slawek, this is the reason, I just assumed people may read all of my comments. : )\nhttps://review.opendev.org/#/c/693323/9//COMMIT_MSG@7","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9b549ce20110502f155db164fbc5ee5454eb4cc6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_65981269","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"in_reply_to":"3fa7e38b_7940c107","updated":"2019-12-16 15:31:22.000000000","message":"I can just remove the word \u0027graceful\u0027 and leave it as \u0027includes a shutdown\u0027 but would not consider it radical.","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"977b4e380bf2dd40098690f27c4a9d9e43d92d35","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_876f4bc3","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"in_reply_to":"3fa7e38b_91b1c9e3","updated":"2019-12-17 01:05:28.000000000","message":"Thanks Brian.","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d0c414fba915af699e29bae05e976b73dbe94d59","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_7940c107","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"in_reply_to":"3fa7e38b_e48e4f32","updated":"2019-12-16 11:46:23.000000000","message":"why? IMO it\u0027s graceful stop of keepalived so it can clean after itself.","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f0786c8a6183bb7964100b80cd3cc2fb3855873a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                      \u0027as root, no \"username\" parameter will be passed.\u0027)),"},{"line_number":103,"context_line":"    cfg.BoolOpt(\u0027cleanup_on_shutdown\u0027, default\u003dFalse,"},{"line_number":104,"context_line":"                help\u003d_(\u0027Delete all routers on L3 agent shutdown. For L3 HA \u0027"},{"line_number":105,"context_line":"                       \u0027routers it includes a graceful shutdown of keepalived \u0027"},{"line_number":106,"context_line":"                       \u0027and the state change monitor. NOTE: Setting to True \u0027"},{"line_number":107,"context_line":"                       \u0027could affect the data plane when stopping or \u0027"},{"line_number":108,"context_line":"                       \u0027restarting the L3 agent.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_91b1c9e3","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":54},"in_reply_to":"3fa7e38b_f6b2734a","updated":"2019-12-16 22:02:07.000000000","message":"Done","commit_id":"7e27b5fcb562631a013e560613489e8f0d1e713d"}],"neutron/service.py":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"c528d6cee8b40dd5fd32e800f6725f2df8c5c946","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            self.manager.stop()"},{"line_number":432,"context_line":"        except AttributeError:"},{"line_number":433,"context_line":"            pass"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def wait(self):"},{"line_number":436,"context_line":"        super(Service, self).wait()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_62b23d09","line":433,"updated":"2019-11-07 14:58:55.000000000","message":"What do you think about having some LOG.debug here?\n\nIt can be useful in some situations.\n\nThoughts?","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"85dd914819753abdf1c57d85cc8273b7b228766d","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            self.manager.stop()"},{"line_number":432,"context_line":"        except AttributeError:"},{"line_number":433,"context_line":"            pass"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def wait(self):"},{"line_number":436,"context_line":"        super(Service, self).wait()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_c5ec5194","line":433,"in_reply_to":"3fa7e38b_62b23d09","updated":"2019-11-08 08:18:26.000000000","message":"What should be logged here in your opinion? It is not required from manager to have stop() method, but in case it has one - it will be called.","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"410ebcb3951ee2b0892996b7267ca4c7c646cf77","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            self.manager.stop()"},{"line_number":432,"context_line":"        except AttributeError:"},{"line_number":433,"context_line":"            pass"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def wait(self):"},{"line_number":436,"context_line":"        super(Service, self).wait()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e8ea840c","line":433,"in_reply_to":"3fa7e38b_c5ec5194","updated":"2019-11-08 08:59:09.000000000","message":"Something like:\n\n```\nLOG.debug(\"manager have no stop method, skipping closing...\")\n```\n\nMainly for debug purpose.","commit_id":"85da274dd8f80f172b1a4ec01302c316f12d1bec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e2aa3931fb3947a1955b76499c51d53e04b4632","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            except Exception:"},{"line_number":428,"context_line":"                LOG.exception(\"Exception occurs when timer stops\")"},{"line_number":429,"context_line":"        self.timers \u003d []"},{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            self.manager.stop()"},{"line_number":432,"context_line":"        except AttributeError:"},{"line_number":433,"context_line":"            pass"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def wait(self):"},{"line_number":436,"context_line":"        super(Service, self).wait()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6a78452a","line":433,"range":{"start_line":430,"start_character":8,"end_line":433,"end_character":16},"updated":"2019-12-09 15:52:20.000000000","message":"Sorry, but this is not the idea of having metaclasses as interfaces.\n\nA manager (dhcp, l3, metering) class will (must) inherit from neutron.manager.Manager. Implement \"stop\" method in this class, not as an abstractmethod but with \"pass\". In \"L3NATAgent\" override this method as you already have done.","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d1632d182d5797e86acb86001c51762b7b222bda","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            except Exception:"},{"line_number":428,"context_line":"                LOG.exception(\"Exception occurs when timer stops\")"},{"line_number":429,"context_line":"        self.timers \u003d []"},{"line_number":430,"context_line":"        try:"},{"line_number":431,"context_line":"            self.manager.stop()"},{"line_number":432,"context_line":"        except AttributeError:"},{"line_number":433,"context_line":"            pass"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def wait(self):"},{"line_number":436,"context_line":"        super(Service, self).wait()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e5277bc7","line":433,"range":{"start_line":430,"start_character":8,"end_line":433,"end_character":16},"in_reply_to":"3fa7e38b_6a78452a","updated":"2019-12-10 09:49:45.000000000","message":"Done","commit_id":"387c58753dbf0bcf746aef5d849ba73250c3b2ad"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"df3b611e1f1f455632baa04b4b6d1c2989c5fe4e","unresolved":false,"context_lines":[{"line_number":3992,"context_line":""},{"line_number":3993,"context_line":"    def test_stop_cleanup(self):"},{"line_number":3994,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":3995,"context_line":"        agent.conf.cleanup_on_shutdown \u003d True"},{"line_number":3996,"context_line":"        router \u003d mock.Mock()"},{"line_number":3997,"context_line":"        agent.router_info[1] \u003d router"},{"line_number":3998,"context_line":"        self.assertFalse(agent.exiting)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_857a9222","line":3995,"updated":"2019-12-04 14:37:12.000000000","message":"I think this should be before the agent is created, like other tests above:\n\nself.conf.set_override(\u0027cleanup_on_shutdown\u0027, True)\nagent \u003d ...","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"acbe1a923747232a442cc6bb33304542cc84767c","unresolved":false,"context_lines":[{"line_number":3992,"context_line":""},{"line_number":3993,"context_line":"    def test_stop_cleanup(self):"},{"line_number":3994,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":3995,"context_line":"        agent.conf.cleanup_on_shutdown \u003d True"},{"line_number":3996,"context_line":"        router \u003d mock.Mock()"},{"line_number":3997,"context_line":"        agent.router_info[1] \u003d router"},{"line_number":3998,"context_line":"        self.assertFalse(agent.exiting)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_ae6f62c2","line":3995,"in_reply_to":"3fa7e38b_857a9222","updated":"2019-12-05 08:33:22.000000000","message":"Done","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"}],"releasenotes/notes/l3_agent_graceful_shutdown-87bf3304e6fab8a5.yaml":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"826a0f5293e49b1db3c593678d47d1f5b79b5fc1","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwars"},{"line_number":9,"context_line":"    compatibility."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_ed020f09","line":8,"range":{"start_line":8,"start_character":57,"end_line":8,"end_character":65},"updated":"2019-11-20 09:18:43.000000000","message":"backward","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"41cfde3024ceac8886ee1bd069b545d736a0e8ef","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwars"},{"line_number":9,"context_line":"    compatibility."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3fa7e38b_0db9f2ea","line":8,"range":{"start_line":8,"start_character":57,"end_line":8,"end_character":65},"in_reply_to":"3fa7e38b_ed020f09","updated":"2019-12-04 12:42:04.000000000","message":"will fix, thanks","commit_id":"85d14deae936de59d5adf62f4b74e83aa3dea6c9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"df3b611e1f1f455632baa04b4b6d1c2989c5fe4e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \u0027cleanup_on_shutdown\u0027 L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa7e38b_45ffbaaa","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":11},"updated":"2019-12-04 14:37:12.000000000","message":"These should be `` so the option is shown as bold in the release note.  Same below.","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"acbe1a923747232a442cc6bb33304542cc84767c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \u0027cleanup_on_shutdown\u0027 L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa7e38b_0e60f6ce","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":11},"in_reply_to":"3fa7e38b_45ffbaaa","updated":"2019-12-05 08:33:22.000000000","message":"Done","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"df3b611e1f1f455632baa04b4b6d1c2989c5fe4e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \u0027cleanup_on_shutdown\u0027 L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwards"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa7e38b_252e3e42","line":5,"range":{"start_line":5,"start_character":19,"end_line":5,"end_character":21},"updated":"2019-12-04 14:37:12.000000000","message":"s/the L3","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"acbe1a923747232a442cc6bb33304542cc84767c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new \u0027cleanup_on_shutdown\u0027 L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwards"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3fa7e38b_6e8f2a76","line":5,"range":{"start_line":5,"start_character":19,"end_line":5,"end_character":21},"in_reply_to":"3fa7e38b_252e3e42","updated":"2019-12-05 08:33:22.000000000","message":"Done","commit_id":"86f5ea7e94c87a36b7da2c1ced813c88da056210"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca2a7fa64143a83a112b3d88e48a56d58d391e53","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new ``cleanup_on_shutdown`` L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True the L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_1e09fa93","line":4,"updated":"2019-12-05 19:31:11.000000000","message":"A new configuration option, ``cleanup_on_shutdown``, was added to the L3 agent.","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"45f729987b59e59c0511b5429dcf9ab8fb727842","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new ``cleanup_on_shutdown`` L3 agent config option was added."},{"line_number":5,"context_line":"    If set to True the L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_c9508761","line":4,"in_reply_to":"3fa7e38b_1e09fa93","updated":"2019-12-06 07:16:40.000000000","message":"Done","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ca2a7fa64143a83a112b3d88e48a56d58d391e53","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    If set to True the L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwards"},{"line_number":9,"context_line":"    compatibility."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_3ed4f6e9","line":8,"range":{"start_line":8,"start_character":5,"end_line":8,"end_character":24},"updated":"2019-12-05 19:31:11.000000000","message":"this needs `` around as well.  And maybe re-write at:\n\nThe default value of ``cleanup_on_shutdown`` is False to maintain backward compatibility.","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"45f729987b59e59c0511b5429dcf9ab8fb727842","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    If set to True the L3 agent will explicitly delete all routers on shutdown."},{"line_number":6,"context_line":"    For L3 HA routers it will mean graceful shutdown of keepalived and state"},{"line_number":7,"context_line":"    change monitor, which will allow a faster failover in certain conditions."},{"line_number":8,"context_line":"    \u0027cleanup_on_shutdown\u0027 is set to False by default for backwards"},{"line_number":9,"context_line":"    compatibility."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3fa7e38b_29c59b0a","line":8,"range":{"start_line":8,"start_character":5,"end_line":8,"end_character":24},"in_reply_to":"3fa7e38b_3ed4f6e9","updated":"2019-12-06 07:16:40.000000000","message":"Done","commit_id":"20fa63cc0890ae088c04e5065d919dafe0b161c3"}]}
