)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b71e3b26f22e669e4f41c627826c987c695ef31","unresolved":false,"context_lines":[{"line_number":30,"context_line":"side."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: I34d7347595bfceb8a70685672a6287e1a44ede6b"},{"line_number":33,"context_line":"Closes-Bug: #1523780"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da6ed579_f7a2d04a","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":20},"updated":"2016-01-12 23:02:25.000000000","message":"I\u0027ve got a bunch of reviews that claim to close the same bug [1-7].  In general, we can only have one review close a bug.  If it needs other patches then it needs to depend on them and then wait for them all to get merged and then close the bug.\n\nAs it is now, the first one of these to merge will close the bug and then we\u0027ll be reviewing the rest on a bug marked closed.  Something needs to be done.  Here are some options.\n\n1.  You could line them all up properly with most of them marked with related-bug instead of closes-bug with the last one coming in a closing it.\n2.  You could keep them independent and file a bug for each independent fix.\n3.  Some mix of 1 and 2.\n4.  Tell me that they are all independent fixes for the same bug and which one is the best one to review (probably abandon most of the others).\n\n[1] https://review.openstack.org/#/c/265672/\n[2] https://review.openstack.org/#/c/265676/\n[3] https://review.openstack.org/#/c/265680/\n[4] https://review.openstack.org/#/c/265682/\n[5] https://review.openstack.org/#/c/265685/\n[6] https://review.openstack.org/#/c/266109/\n[7] https://review.openstack.org/#/c/260303/","commit_id":"e8199892d91878d0e362b1b221d03247c328f1c9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"67053d91bb927cf4dad342da72f2ca0660c25e83","unresolved":false,"context_lines":[{"line_number":30,"context_line":"side."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: I34d7347595bfceb8a70685672a6287e1a44ede6b"},{"line_number":33,"context_line":"Closes-Bug: #1523780"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da6ed579_facab0a0","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":20},"in_reply_to":"da6ed579_f7a2d04a","updated":"2016-01-13 01:58:18.000000000","message":"Thank you, as Kevin Benton mentioned in Patch Set 10 https://review.openstack.org/#/c/260303/10:\n\"to elaborate, the commit message identifies 4 different race conditions. please fix one in each patch so it\u0027s clear what is being done\". Different people have different views, so now each patch deal with each one race.\nMaybe I should register a separated lp bug for each patch.","commit_id":"e8199892d91878d0e362b1b221d03247c328f1c9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"5415a001311f83a3af8da18f9072c8863369077f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"side."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: I34d7347595bfceb8a70685672a6287e1a44ede6b"},{"line_number":33,"context_line":"Closes-Bug: #1523780"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da6ed579_7356ebd3","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":20},"in_reply_to":"da6ed579_facab0a0","updated":"2016-01-13 03:16:32.000000000","message":"New LP bug #1533454, and this patch is to deal with it in neutron server side.","commit_id":"e8199892d91878d0e362b1b221d03247c328f1c9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"2c0e00320c3cc40ae02d9989b16dc727ec3bb6c9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LIU Yulong \u003cliuyulong@letv.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-26 13:47:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Catch PorNotFound after HA router race condition"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When neutron server deleted all the resources of a"},{"line_number":10,"context_line":"HA router, L3 agent can not aware that, so race"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9aed3d3a_d03cc631","line":7,"updated":"2016-02-26 07:55:51.000000000","message":"PortNotFound","commit_id":"b77283b8d911c0e613cc4d4c847a43ada515dba2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d13e2bdabaa25d345d3078ba74a7af78c27e85ea","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LIU Yulong \u003cliuyulong@letv.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-26 13:47:19 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Catch PorNotFound after HA router race condition"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When neutron server deleted all the resources of a"},{"line_number":10,"context_line":"HA router, L3 agent can not aware that, so race"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9aed3d3a_30825295","line":7,"in_reply_to":"9aed3d3a_d03cc631","updated":"2016-02-26 08:02:43.000000000","message":"Done","commit_id":"b77283b8d911c0e613cc4d4c847a43ada515dba2"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5269426cb4084853b3e0f5a617a73041e77ec076","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":611,"context_line":"                    binding.state \u003d states[binding.router_id]"},{"line_number":612,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":613,"context_line":"                LOG.warning("},{"line_number":614,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":615,"context_line":"                        \"router was deleted concurrently.\"))"},{"line_number":616,"context_line":"            except db_exc.DBError as exp:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_6ae8417d","line":613,"range":{"start_line":613,"start_character":20,"end_line":613,"end_character":27},"updated":"2016-01-21 08:39:38.000000000","message":"I think that this should be info message or even debug, because router was already deleted.","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b5c44e2a59a38717236de08ebea53a936a9ec962","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":611,"context_line":"                    binding.state \u003d states[binding.router_id]"},{"line_number":612,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":613,"context_line":"                LOG.warning("},{"line_number":614,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":615,"context_line":"                        \"router was deleted concurrently.\"))"},{"line_number":616,"context_line":"            except db_exc.DBError as exp:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_0c6f2593","line":613,"range":{"start_line":613,"start_character":20,"end_line":613,"end_character":27},"in_reply_to":"9a68dd71_6ae8417d","updated":"2016-01-22 08:05:20.000000000","message":"Done","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5269426cb4084853b3e0f5a617a73041e77ec076","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                LOG.warning("},{"line_number":614,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":615,"context_line":"                        \"router was deleted concurrently.\"))"},{"line_number":616,"context_line":"            except db_exc.DBError as exp:"},{"line_number":617,"context_line":"                LOG.warning("},{"line_number":618,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":619,"context_line":"                        \"got DB error: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_eaaaf118","line":616,"range":{"start_line":616,"start_character":12,"end_line":616,"end_character":41},"updated":"2016-01-21 08:39:38.000000000","message":"Some unit tests on this?","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b5c44e2a59a38717236de08ebea53a936a9ec962","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                LOG.warning("},{"line_number":614,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":615,"context_line":"                        \"router was deleted concurrently.\"))"},{"line_number":616,"context_line":"            except db_exc.DBError as exp:"},{"line_number":617,"context_line":"                LOG.warning("},{"line_number":618,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":619,"context_line":"                        \"got DB error: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_4c451d15","line":616,"range":{"start_line":616,"start_character":12,"end_line":616,"end_character":41},"in_reply_to":"9a68dd71_eaaaf118","updated":"2016-01-22 08:05:20.000000000","message":"It\u0027s not easy to simulate concurrent procedure in DB\ndelete and update, but there are two predictable\nscenarios may cause the DBError:\n1. HA router in L3 agent change the state\n and notify neutron server, at the same time, the neutron\n server is deleting this HA router HA attributes after\n a router deleting API call.\n\n2. a HA router is deleted in neutron server,\n but l3 agent still notify neutron server the HA router\n state chage.","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5269426cb4084853b3e0f5a617a73041e77ec076","unresolved":false,"context_lines":[{"line_number":642,"context_line":"                self._core_plugin.update_port(admin_ctx, port[\u0027id\u0027],"},{"line_number":643,"context_line":"                                              {attributes.PORT: port})"},{"line_number":644,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":645,"context_line":"                LOG.warning(_LW(\"Failed to update router HA port, \""},{"line_number":646,"context_line":"                                \"it was deleted concurrently.\"))"},{"line_number":647,"context_line":"            except db_exc.DBError as exp:"},{"line_number":648,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_ca9a8d14","line":645,"range":{"start_line":645,"start_character":20,"end_line":645,"end_character":27},"updated":"2016-01-21 08:39:38.000000000","message":"ditto","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b5c44e2a59a38717236de08ebea53a936a9ec962","unresolved":false,"context_lines":[{"line_number":642,"context_line":"                self._core_plugin.update_port(admin_ctx, port[\u0027id\u0027],"},{"line_number":643,"context_line":"                                              {attributes.PORT: port})"},{"line_number":644,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":645,"context_line":"                LOG.warning(_LW(\"Failed to update router HA port, \""},{"line_number":646,"context_line":"                                \"it was deleted concurrently.\"))"},{"line_number":647,"context_line":"            except db_exc.DBError as exp:"},{"line_number":648,"context_line":"                LOG.warning("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_4ce19dfd","line":645,"range":{"start_line":645,"start_character":20,"end_line":645,"end_character":27},"in_reply_to":"9a68dd71_ca9a8d14","updated":"2016-01-22 08:05:20.000000000","message":"Done","commit_id":"4be0fe131bbeb9bb26d4538bdd2ebcfbf1f41a67"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f2df012c80d634eed14746cb81090be20580ce7d","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":637,"context_line":"                LOG.debug(\"Failed to update router HA port binding state, \""},{"line_number":638,"context_line":"                          \"router was deleted concurrently.\")"},{"line_number":639,"context_line":"            except db_exc.DBError as exp:"},{"line_number":640,"context_line":"                LOG.warning("},{"line_number":641,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":642,"context_line":"                        \"got DB error: %s\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_ef688a89","line":639,"updated":"2016-01-28 23:52:16.000000000","message":"What specific exception were you seeing?","commit_id":"91eedd631d4d419c5f9602785d1d5fdee3bf8606"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7543deea4de589415bd9e67949eed7ad6c3ff543","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            except (orm.exc.StaleDataError, orm.exc.ObjectDeletedError):"},{"line_number":637,"context_line":"                LOG.debug(\"Failed to update router HA port binding state, \""},{"line_number":638,"context_line":"                          \"router was deleted concurrently.\")"},{"line_number":639,"context_line":"            except db_exc.DBError as exp:"},{"line_number":640,"context_line":"                LOG.warning("},{"line_number":641,"context_line":"                    _LW(\"Failed to update router HA port binding state, \""},{"line_number":642,"context_line":"                        \"got DB error: %s\"),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_7abbefe5","line":639,"in_reply_to":"7a5de9d1_ef688a89","updated":"2016-01-29 07:24:45.000000000","message":"It\u0027s something like \"DBError: UPDATE statement on table \u0027xxx\u0027 expected to update 1 row(s); 0 were matched. But it\u0027s not easy to reproduce it now. And here are some results I currently tested: https://bugs.launchpad.net/neutron/+bug/1533454/comments/2","commit_id":"91eedd631d4d419c5f9602785d1d5fdee3bf8606"}],"neutron/tests/unit/db/test_l3_hamode_db.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f2df012c80d634eed14746cb81090be20580ce7d","unresolved":false,"context_lines":[{"line_number":721,"context_line":"            self.assertNotIn(\u0027HA network tenant %s\u0027 % tenant_id,"},{"line_number":722,"context_line":"                             nets_after)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_update_ha_routers_states_and_delete_ha_router_concurrently(self):"},{"line_number":725,"context_line":"        # Actually this test case test nothing, it just explained two"},{"line_number":726,"context_line":"        # race condition scenarios between l3 agent and neutron server"},{"line_number":727,"context_line":"        router1 \u003d self._create_router()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_cf6d8e99","line":724,"updated":"2016-01-28 23:52:16.000000000","message":"This test passes without the changes to l3_hamode_db.","commit_id":"91eedd631d4d419c5f9602785d1d5fdee3bf8606"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7543deea4de589415bd9e67949eed7ad6c3ff543","unresolved":false,"context_lines":[{"line_number":721,"context_line":"            self.assertNotIn(\u0027HA network tenant %s\u0027 % tenant_id,"},{"line_number":722,"context_line":"                             nets_after)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_update_ha_routers_states_and_delete_ha_router_concurrently(self):"},{"line_number":725,"context_line":"        # Actually this test case test nothing, it just explained two"},{"line_number":726,"context_line":"        # race condition scenarios between l3 agent and neutron server"},{"line_number":727,"context_line":"        router1 \u003d self._create_router()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_1a799b2f","line":724,"in_reply_to":"7a5de9d1_cf6d8e99","updated":"2016-01-29 07:24:45.000000000","message":"As the test case comment said that this test case test nothing. It\u0027s not easy to simulate those two race scenarios here.","commit_id":"91eedd631d4d419c5f9602785d1d5fdee3bf8606"}]}
