)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e673c77661c17b375fba7efd4c86b94129b4a7f1","unresolved":false,"context_lines":[{"line_number":12,"context_line":"on a controller node."},{"line_number":13,"context_line":"This patch fixes the problem by using rpc call instead"},{"line_number":14,"context_line":"of cast in routers_update method when router is created."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I12b645968b664e3fca398dbf0bdc07de2753e619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5a18252c_a73deede","line":15,"updated":"2016-04-15 06:06:11.000000000","message":"Usually, there will be launchpad bug here to describe the problem.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"fc361c9c75d8d5d08eac3e8027c87a84af09f7fc","unresolved":false,"context_lines":[{"line_number":12,"context_line":"on a controller node."},{"line_number":13,"context_line":"This patch fixes the problem by using rpc call instead"},{"line_number":14,"context_line":"of cast in routers_update method when router is created."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I12b645968b664e3fca398dbf0bdc07de2753e619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_05124709","line":15,"in_reply_to":"1a122d0e_4f326360","updated":"2016-04-23 19:51:43.000000000","message":"Done","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3402c2fe9ff2eeaca2bab815db37eebca95f1596","unresolved":false,"context_lines":[{"line_number":12,"context_line":"on a controller node."},{"line_number":13,"context_line":"This patch fixes the problem by using rpc call instead"},{"line_number":14,"context_line":"of cast in routers_update method when router is created."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I12b645968b664e3fca398dbf0bdc07de2753e619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_4f326360","line":15,"in_reply_to":"1a122d0e_6f42fa3f","updated":"2016-04-19 17:41:04.000000000","message":"Inessa, please file an upstream bug for this","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"a60f7d3dc458835357ef27abdb5c32be90bf22e7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"on a controller node."},{"line_number":13,"context_line":"This patch fixes the problem by using rpc call instead"},{"line_number":14,"context_line":"of cast in routers_update method when router is created."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I12b645968b664e3fca398dbf0bdc07de2753e619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_6f42fa3f","line":15,"in_reply_to":"5a18252c_a73deede","updated":"2016-04-18 21:37:20.000000000","message":"The problem was faced first on mos HA build and there is an appropriate mos bug (https://bugs.launchpad.net/mos/10.0.x/+bug/1529820), but I could not find relevant upstream LP bug.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"642b2cfcc78efcab316c4a5b21e7a43ad7cf1b54","unresolved":false,"context_lines":[{"line_number":12,"context_line":"on a controller node."},{"line_number":13,"context_line":"This patch fixes the problem by using rpc call instead"},{"line_number":14,"context_line":"of cast in routers_update method when router is created."},{"line_number":15,"context_line":"Closes-Bug: #1574092"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I12b645968b664e3fca398dbf0bdc07de2753e619"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a461143_4d424baf","line":15,"updated":"2017-02-01 02:40:48.000000000","message":"What happens during an upgrade where the server is running on a newer version. The amount of complexity brought in by this change makes me think twice if it\u0027s really necessary.\n\nDon\u0027t a periodic agent resync eventually bring the namespaces where they need to be?","commit_id":"8be2f09a95c123a38b347a574d3247c764a23938"}],"neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e673c77661c17b375fba7efd4c86b94129b4a7f1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                cctxt \u003d self.client.prepare(topic\u003dtopics.L3_AGENT,"},{"line_number":73,"context_line":"                                            server\u003dhost,"},{"line_number":74,"context_line":"                                            version\u003d\u00271.1\u0027)"},{"line_number":75,"context_line":"                rpc_method \u003d (ag_utils.retry(cctxt.call,"},{"line_number":76,"context_line":"                                             AGENT_NOTIFY_MAX_ATTEMPTS)"},{"line_number":77,"context_line":"                              if use_call else cctxt.cast)"},{"line_number":78,"context_line":"                rpc_method(context, method, routers\u003d[router_id])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"},{"line_number":81,"context_line":"                                operation, data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a18252c_cc3acae6","line":78,"range":{"start_line":75,"start_character":0,"end_line":78,"end_character":64},"updated":"2016-04-15 06:06:11.000000000","message":"For HA router, if use_call if True, this will send notification to agent one by one. I am not sure it is a good way. First, the router creation time will be longer.\n\nSecond, the first agent will get more chance to host the active HA router, because it will have more chance to spawn the first HA router instance. So, if we have 3 l3 agents, and the HA router is configured to spawn to 3 agents, the first l3 agent will host more active HA router than other agents, if the order of them is certain.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"5621b2f84045d94972c2b29571a1c15f8b442939","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                cctxt \u003d self.client.prepare(topic\u003dtopics.L3_AGENT,"},{"line_number":73,"context_line":"                                            server\u003dhost,"},{"line_number":74,"context_line":"                                            version\u003d\u00271.1\u0027)"},{"line_number":75,"context_line":"                rpc_method \u003d (ag_utils.retry(cctxt.call,"},{"line_number":76,"context_line":"                                             AGENT_NOTIFY_MAX_ATTEMPTS)"},{"line_number":77,"context_line":"                              if use_call else cctxt.cast)"},{"line_number":78,"context_line":"                rpc_method(context, method, routers\u003d[router_id])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"},{"line_number":81,"context_line":"                                operation, data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_8f28b19b","line":78,"range":{"start_line":75,"start_character":0,"end_line":78,"end_character":64},"in_reply_to":"1a122d0e_d84489b8","updated":"2016-04-20 21:16:32.000000000","message":"Hmm.. I like the idea. I\u0027ll come up with a patch and let\u0027s see if any objections follow.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"a60f7d3dc458835357ef27abdb5c32be90bf22e7","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                cctxt \u003d self.client.prepare(topic\u003dtopics.L3_AGENT,"},{"line_number":73,"context_line":"                                            server\u003dhost,"},{"line_number":74,"context_line":"                                            version\u003d\u00271.1\u0027)"},{"line_number":75,"context_line":"                rpc_method \u003d (ag_utils.retry(cctxt.call,"},{"line_number":76,"context_line":"                                             AGENT_NOTIFY_MAX_ATTEMPTS)"},{"line_number":77,"context_line":"                              if use_call else cctxt.cast)"},{"line_number":78,"context_line":"                rpc_method(context, method, routers\u003d[router_id])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"},{"line_number":81,"context_line":"                                operation, data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_3474ca66","line":78,"range":{"start_line":75,"start_character":0,"end_line":78,"end_character":64},"in_reply_to":"5a18252c_cc3acae6","updated":"2016-04-18 21:37:20.000000000","message":"There are some very good questions you pose. I\u0027ll have to think that over.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c93f9b75bff6b0f8e0d46acdc1ebdd2a094ce9e4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                cctxt \u003d self.client.prepare(topic\u003dtopics.L3_AGENT,"},{"line_number":73,"context_line":"                                            server\u003dhost,"},{"line_number":74,"context_line":"                                            version\u003d\u00271.1\u0027)"},{"line_number":75,"context_line":"                rpc_method \u003d (ag_utils.retry(cctxt.call,"},{"line_number":76,"context_line":"                                             AGENT_NOTIFY_MAX_ATTEMPTS)"},{"line_number":77,"context_line":"                              if use_call else cctxt.cast)"},{"line_number":78,"context_line":"                rpc_method(context, method, routers\u003d[router_id])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"},{"line_number":81,"context_line":"                                operation, data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_d84489b8","line":78,"range":{"start_line":75,"start_character":0,"end_line":78,"end_character":64},"in_reply_to":"5a18252c_cc3acae6","updated":"2016-04-19 13:24:10.000000000","message":"what if we spawn a new greenthread for each ag_utils.retry?","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3402c2fe9ff2eeaca2bab815db37eebca95f1596","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def routers_updated(self, context, router_ids, operation\u003dNone, data\u003dNone,"},{"line_number":158,"context_line":"                        shuffle_agents\u003dFalse, schedule_routers\u003dTrue,"},{"line_number":159,"context_line":"                        use_call\u003dTrue):"},{"line_number":160,"context_line":"        if router_ids:"},{"line_number":161,"context_line":"            self._notification(context, \u0027routers_updated\u0027, router_ids,"},{"line_number":162,"context_line":"                               operation, shuffle_agents, schedule_routers,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_af421766","line":159,"range":{"start_line":159,"start_character":24,"end_line":159,"end_character":32},"updated":"2016-04-19 17:41:04.000000000","message":"call or cast is a notifier implementation detail. I\u0027d suggest to rename to smth like \u0027wait_response\u0027.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"fc361c9c75d8d5d08eac3e8027c87a84af09f7fc","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def routers_updated(self, context, router_ids, operation\u003dNone, data\u003dNone,"},{"line_number":158,"context_line":"                        shuffle_agents\u003dFalse, schedule_routers\u003dTrue,"},{"line_number":159,"context_line":"                        use_call\u003dTrue):"},{"line_number":160,"context_line":"        if router_ids:"},{"line_number":161,"context_line":"            self._notification(context, \u0027routers_updated\u0027, router_ids,"},{"line_number":162,"context_line":"                               operation, shuffle_agents, schedule_routers,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_255823fa","line":159,"range":{"start_line":159,"start_character":24,"end_line":159,"end_character":32},"in_reply_to":"1a122d0e_af421766","updated":"2016-04-23 19:51:43.000000000","message":"I like the idea, thanks. Though I prefer the longer \u0027wait_for_response\u0027.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3105c79b2c6f0eb6629ad68fbd10e03c6cebc732","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                for host in hosts:"},{"line_number":93,"context_line":"                    _notify_agent(host, router_id)"},{"line_number":94,"context_line":"                return"},{"line_number":95,"context_line":"            # send notification to each agent via rpc call in different threads"},{"line_number":96,"context_line":"            pool \u003d eventlet.GreenPool()"},{"line_number":97,"context_line":"            failed_hosts \u003d []"},{"line_number":98,"context_line":"            for failed in pool.imap(_notify_agent, hosts,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7369f8f8","line":95,"range":{"start_line":95,"start_character":12,"end_line":95,"end_character":79},"updated":"2016-05-11 08:01:40.000000000","message":"would be good to also explain why we need separate threads","commit_id":"8a26e866a2c7ad4de79fb375abaa934fbac7e3b5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ffc5779b49f3d6109976fd579a3b8a1135582df4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                    [router_id] * len(hosts)):"},{"line_number":100,"context_line":"                if failed is not None:"},{"line_number":101,"context_line":"                    failed_hosts.append(failed)"},{"line_number":102,"context_line":"            if len(failed_hosts) \u003d\u003d 0:"},{"line_number":103,"context_line":"                # notifications succeeded"},{"line_number":104,"context_line":"                return"},{"line_number":105,"context_line":"            error \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_fa7034a6","line":102,"updated":"2016-05-10 17:39:18.000000000","message":"nit: I\u0027d reverse this to have the warning code inside the if(), but it\u0027s a nit","commit_id":"8a26e866a2c7ad4de79fb375abaa934fbac7e3b5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ffc5779b49f3d6109976fd579a3b8a1135582df4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            if len(failed_hosts) \u003d\u003d 0:"},{"line_number":103,"context_line":"                # notifications succeeded"},{"line_number":104,"context_line":"                return"},{"line_number":105,"context_line":"            error \u003d ("},{"line_number":106,"context_line":"                \"Failed to notify hosts \u0027%(hosts)s\u0027 in %(num)d attempts\" %"},{"line_number":107,"context_line":"                {\u0027hosts\u0027: \u0027,\u0027.join(failed_hosts),"},{"line_number":108,"context_line":"                    \u0027num\u0027: AGENT_NOTIFY_MAX_ATTEMPTS})"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_bf833e55","line":105,"updated":"2016-05-10 17:39:18.000000000","message":"s/error/msg since you\u0027re not logging an error below","commit_id":"8a26e866a2c7ad4de79fb375abaa934fbac7e3b5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ffc5779b49f3d6109976fd579a3b8a1135582df4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                \"Failed to notify hosts \u0027%(hosts)s\u0027 in %(num)d attempts\" %"},{"line_number":107,"context_line":"                {\u0027hosts\u0027: \u0027,\u0027.join(failed_hosts),"},{"line_number":108,"context_line":"                    \u0027num\u0027: AGENT_NOTIFY_MAX_ATTEMPTS})"},{"line_number":109,"context_line":"            LOG.warn(error)"},{"line_number":110,"context_line":"            raise oslo_messaging.MessagingTimeout(error)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3f274ecb","line":109,"updated":"2016-05-10 17:39:18.000000000","message":"You need to use _LW() for LOG.warn for i18n.\n\nAnd this is actually a little complicated as you need the message to be defined something like msg \u003d _(), but LOG.warn needs _LW(), I\u0027m not sure how to do this without defining the message as just a string, and using the _() and _LW() in each case.","commit_id":"8a26e866a2c7ad4de79fb375abaa934fbac7e3b5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"893b6a37a31c0e779760cc166c2c3305cc42e789","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":62,"context_line":"            service_constants.L3_ROUTER_NAT)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        def _notify_agent(host, router_id):"},{"line_number":65,"context_line":"            \"\"\"A helper function to notify a host about the change."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            Performs logging and fires relevant rpc method (call or cast)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_6d1e9b64","line":64,"updated":"2016-08-16 09:26:56.000000000","message":"I\u0027d prefer you separate this out into a regular bound method. these closures are less pleasant to deal with when it comes to unit testing and it makes it hard to have small methods.","commit_id":"8773ace01920ff246c1813b1f99c5967467eafed"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"96f75dc4b02a0720c94d08569037fd3783cb8bd5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":62,"context_line":"            service_constants.L3_ROUTER_NAT)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        def _notify_agent(host, router_id):"},{"line_number":65,"context_line":"            \"\"\"A helper function to notify a host about the change."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            Performs logging and fires relevant rpc method (call or cast)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_9c8ae019","line":64,"in_reply_to":"3ac371cc_6d1e9b64","updated":"2016-08-17 12:04:50.000000000","message":"Will fix that, thanks.","commit_id":"8773ace01920ff246c1813b1f99c5967467eafed"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"893b6a37a31c0e779760cc166c2c3305cc42e789","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    \"Failed to notify hosts \u0027%(hosts)s\u0027 in %(num)d attempts\") %"},{"line_number":110,"context_line":"                    {\u0027hosts\u0027: \u0027,\u0027.join(failed_hosts),"},{"line_number":111,"context_line":"                     \u0027num\u0027: AGENT_NOTIFY_MAX_ATTEMPTS})"},{"line_number":112,"context_line":"                raise oslo_messaging.MessagingTimeout("},{"line_number":113,"context_line":"                    _(\"Failed to notify some hosts\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_4d191f79","line":112,"updated":"2016-08-16 09:26:56.000000000","message":"This is now an API behavior change. If an agent goes offline we are going to throw an error back to the API caller even though everything has already been committed to the DB at this point.\n\nThis can\u0027t raise.","commit_id":"8773ace01920ff246c1813b1f99c5967467eafed"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"96f75dc4b02a0720c94d08569037fd3783cb8bd5","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    \"Failed to notify hosts \u0027%(hosts)s\u0027 in %(num)d attempts\") %"},{"line_number":110,"context_line":"                    {\u0027hosts\u0027: \u0027,\u0027.join(failed_hosts),"},{"line_number":111,"context_line":"                     \u0027num\u0027: AGENT_NOTIFY_MAX_ATTEMPTS})"},{"line_number":112,"context_line":"                raise oslo_messaging.MessagingTimeout("},{"line_number":113,"context_line":"                    _(\"Failed to notify some hosts\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_5c0228b5","line":112,"in_reply_to":"3ac371cc_4d191f79","updated":"2016-08-17 12:04:50.000000000","message":"Sounds reasonable. Imo it is ok to raise MessagingTimeout in case all hosts fail. What do you think?","commit_id":"8773ace01920ff246c1813b1f99c5967467eafed"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"14619113cdc5e1eb5838c4ccec6f4e0557588da6","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    \"Failed to notify hosts \u0027%(hosts)s\u0027 in %(num)d attempts\"),"},{"line_number":112,"context_line":"                    {\u0027hosts\u0027: \u0027,\u0027.join(failed_hosts),"},{"line_number":113,"context_line":"                     \u0027num\u0027: AGENT_NOTIFY_MAX_ATTEMPTS})"},{"line_number":114,"context_line":"                raise oslo_messaging.MessagingTimeout("},{"line_number":115,"context_line":"                    _(\"Failed to notify all hosts\"))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _agent_notification_arp(self, context, method, router_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"dfeb2761_7f35ef45","line":114,"updated":"2017-04-02 08:38:16.000000000","message":"Is this being raised back to the user? If so, what does it really tell them? It\u0027s not like this is going to rollback the transaction. We can simplify this quite a bit if we just fire off the greenthreads and move on, allowing them to log any encounted exceptions so the operator can see there is a problem.","commit_id":"8be2f09a95c123a38b347a574d3247c764a23938"}],"neutron/db/l3_db.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"e673c77661c17b375fba7efd4c86b94129b4a7f1","unresolved":false,"context_lines":[{"line_number":1589,"context_line":"    def update_router(self, context, id, router):"},{"line_number":1590,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"},{"line_number":1591,"context_line":"                                                                 id, router)"},{"line_number":1592,"context_line":"        self.notify_router_updated(context, router_dict[\u0027id\u0027], None)"},{"line_number":1593,"context_line":"        return router_dict"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"    def delete_router(self, context, id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a18252c_acb2eee2","line":1592,"range":{"start_line":1592,"start_character":8,"end_line":1592,"end_character":68},"updated":"2016-04-15 06:06:11.000000000","message":"What if the router is created without \"external_gateway_info\", and then updated to have router port. I think in such case, router namespace will be created with the notification in this method.","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"a60f7d3dc458835357ef27abdb5c32be90bf22e7","unresolved":false,"context_lines":[{"line_number":1589,"context_line":"    def update_router(self, context, id, router):"},{"line_number":1590,"context_line":"        router_dict \u003d super(L3_NAT_db_mixin, self).update_router(context,"},{"line_number":1591,"context_line":"                                                                 id, router)"},{"line_number":1592,"context_line":"        self.notify_router_updated(context, router_dict[\u0027id\u0027], None)"},{"line_number":1593,"context_line":"        return router_dict"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"    def delete_router(self, context, id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_396fb0c6","line":1592,"range":{"start_line":1592,"start_character":8,"end_line":1592,"end_character":68},"in_reply_to":"5a18252c_acb2eee2","updated":"2016-04-18 21:37:20.000000000","message":"The scope of this patch addresses only notifications sent during router_creation. The case you are talking about (create without ext_gateway then update) will use notify_router_update with use_call\u003dFalse during update().","commit_id":"795ce9616ae63a806798a6f76d489c1b516efdda"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9742c1361440da44e18e329581c85a3f4883be55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a1b2928_00a8ae1e","updated":"2016-04-11 14:20:23.000000000","message":"changes here seem not quite related to the bug, am I missing something?","commit_id":"3bcb17fedbd9d3743c081e436f8456b0393807fb"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"48f32214e074d324c368afd69345aed2d98d2d91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a1b2928_4e301757","in_reply_to":"7a1b2928_00a8ae1e","updated":"2016-04-11 14:41:15.000000000","message":"Yes, never should push anything on saturday night :)","commit_id":"3bcb17fedbd9d3743c081e436f8456b0393807fb"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9742c1361440da44e18e329581c85a3f4883be55","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        is_ha \u003d self._is_ha(router[\u0027router\u0027])"},{"line_number":454,"context_line":"        router[\u0027router\u0027][\u0027ha\u0027] \u003d is_ha"},{"line_number":455,"context_line":"        router_dict \u003d super(L3_HA_NAT_db_mixin,"},{"line_number":456,"context_line":"                            self).create_router(context, router)"},{"line_number":457,"context_line":"        if is_ha:"},{"line_number":458,"context_line":"            try:"},{"line_number":459,"context_line":"                router_db \u003d self._get_router(context, router_dict[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_20304a01","line":456,"range":{"start_line":456,"start_character":34,"end_line":456,"end_character":47},"updated":"2016-04-11 14:20:23.000000000","message":"this should use \"enhanced\" notification already","commit_id":"3bcb17fedbd9d3743c081e436f8456b0393807fb"}]}
