)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Dongcan Ye \u003chellochosen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-22 18:34:10 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_b9cf39b2","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":68},"updated":"2016-07-25 14:34:40.000000000","message":"As per the link in the line below, this line should be limited to 50 chars.","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Dongcan Ye \u003chellochosen@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-22 18:34:10 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_d3448075","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":68},"in_reply_to":"dada55a8_b9cf39b2","updated":"2016-07-25 15:52:50.000000000","message":"Done","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"},{"line_number":11,"context_line":"reloading configuration."},{"line_number":12,"context_line":"In some situation SIGHUP can kill keepalived vrrp child process, then the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_42d1eafa","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":76},"updated":"2016-07-25 14:34:40.000000000","message":"Please ensure that the lines here don\u0027t go past 72 chars, as described in [1] (search for \"Summary of Git commit message structure\").\n\n[1]: https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"},{"line_number":11,"context_line":"reloading configuration."},{"line_number":12,"context_line":"In some situation SIGHUP can kill keepalived vrrp child process, then the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_19bf65fd","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":42},"updated":"2016-07-25 14:34:40.000000000","message":"Please note somewhere that this only affects DVR+HA (as the launchpad bug suggests).","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"},{"line_number":11,"context_line":"reloading configuration."},{"line_number":12,"context_line":"In some situation SIGHUP can kill keepalived vrrp child process, then the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_b3474c76","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":42},"in_reply_to":"dada55a8_19bf65fd","updated":"2016-07-25 15:52:50.000000000","message":"Done","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix wrong HA router state when keepalived vrrp subprocess respawning"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we do router operations for HA router, like router interface add/delete"},{"line_number":10,"context_line":"or router gateway set/clear, SIGHUP signal will send to keepalived for"},{"line_number":11,"context_line":"reloading configuration."},{"line_number":12,"context_line":"In some situation SIGHUP can kill keepalived vrrp child process, then the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_f359c45c","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":76},"in_reply_to":"dada55a8_42d1eafa","updated":"2016-07-25 15:52:50.000000000","message":"Done","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":17,"context_line":"When this option is specified, if the vrrp child process exit,"},{"line_number":18,"context_line":"the keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"We need to remove the ha cidr for ha device in namespace, because after"},{"line_number":21,"context_line":"enable keepalived manager in ha_router.py, we check ha_cidr in"},{"line_number":22,"context_line":"update_initial_state, if the ha cidr in that namespace, we think that"},{"line_number":23,"context_line":"ha_state is \u0027master\u0027, the keepalived state change monitor will never"},{"line_number":24,"context_line":"received the ha cidr change event, so the ha state will never send to"},{"line_number":25,"context_line":"neutron server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_90d31e38","line":22,"range":{"start_line":20,"start_character":66,"end_line":22,"end_character":20},"updated":"2016-07-25 14:34:40.000000000","message":"initialize() (which calls update_initial_state()) is only called when the router is created (or when the agent restarts). When the keepalived process restarts, it isn\u0027t called so I don\u0027t understand why this is needed.","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"When this option is specified, if the vrrp child process exit,"},{"line_number":18,"context_line":"the keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"We need to remove the ha cidr for ha device in namespace, because after"},{"line_number":21,"context_line":"enable keepalived manager in ha_router.py, we check ha_cidr in"},{"line_number":22,"context_line":"update_initial_state, if the ha cidr in that namespace, we think that"},{"line_number":23,"context_line":"ha_state is \u0027master\u0027, the keepalived state change monitor will never"},{"line_number":24,"context_line":"received the ha cidr change event, so the ha state will never send to"},{"line_number":25,"context_line":"neutron server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_1655664f","line":22,"range":{"start_line":20,"start_character":66,"end_line":22,"end_character":20},"in_reply_to":"dada55a8_90d31e38","updated":"2016-07-25 15:52:50.000000000","message":"Yes, when the keepalived process restarts, it isn\u0027t called. When keepalived process restarts(in original l3 agent), ha router in other l3 agent becomes active, but ha interface in original l3 agent still have ha cidr, the keepalived state change monitor will never received the ha cidr change event. So the ha state still active after keepalived process restarts.\n\nI will make clear in next PS.","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] Search \"dont-respawn\" in http://www.keepalived.org/changelog.html"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Closes-Bug: #1602320"},{"line_number":30,"context_line":"Change-Id: I0a4aa9d62f248fa5e3e69e9105c32e622ffb7048"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_19c9257a","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":20},"updated":"2016-07-25 14:34:40.000000000","message":"Taken from the launchpad comment I put in earlier today:\n\n\"\"\"Please note that, as I understand it from the descriptions going on in this thread, that once an update is required the keepalived process will restart (it will kill itself and then the l3 agent will need to re-start it). This will, in turn, trigger the bug described in [1] and might cause an active/active configuration anyway.\n\n[1]: https://bugs.launchpad.net/neutron/+bug/1597461\"\"\"\n\nIn other words, this doesn\u0027t fix the bug that causes the active/active configuration, it just changes the reason of why it happens. I suggest getting this patch to depend on the bug that will fix 1597461 (which hasn\u0027t been submitted for review yet... :\u003c)","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[1] Search \"dont-respawn\" in http://www.keepalived.org/changelog.html"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Closes-Bug: #1602320"},{"line_number":30,"context_line":"Change-Id: I0a4aa9d62f248fa5e3e69e9105c32e622ffb7048"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dada55a8_a19532e5","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":20},"in_reply_to":"dada55a8_19c9257a","updated":"2016-07-25 15:52:50.000000000","message":"John, do you mean I need a Depends-On tag? I\u0027m not sure about the situation @Ann Taraday said, but this bug is same with @Brian Haley comment in https://bugs.launchpad.net/neutron/+bug/1597461/comments/5","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"fd28913e1ffab021d6d7ea364c1faab91c862199","unresolved":false,"context_lines":[{"line_number":18,"context_line":"this option is specified, if the vrrp child process exit, the"},{"line_number":19,"context_line":"keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"We need to remove the ha cidr for ha device in namespace, When"},{"line_number":22,"context_line":"keepalived process restarts(in original L3 agent), ha state in"},{"line_number":23,"context_line":"other L3 agent becomes active, but ha interface in original L3"},{"line_number":24,"context_line":"agent still have ha cidr (although we had seen keepalived state"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3ac371cc_6724650c","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":57},"updated":"2016-08-18 12:23:34.000000000","message":"I\u0027m not sure (my keepalived is a bit rusty), but I\u0027m under the impression that if you remove the ha_cidr from ha devices, then the keepalived instances won\u0027t be able to ping each other.\n\nThe previously-backup nodes will now turn to failed (since the interface don\u0027t contain the IP it should), and I\u0027m not sure if the master keepalived will report itselvf as master or backup (since it can\u0027t ping its\u0027 \"designated others\"). I\u0027ll need to look into this early next week, when I\u0027ll have an available setup to check this on.","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"efbdb188bb6b4b504bedd8a9f7cfe578bfc20784","unresolved":false,"context_lines":[{"line_number":18,"context_line":"this option is specified, if the vrrp child process exit, the"},{"line_number":19,"context_line":"keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"We need to remove the ha cidr for ha device in namespace, When"},{"line_number":22,"context_line":"keepalived process restarts(in original L3 agent), ha state in"},{"line_number":23,"context_line":"other L3 agent becomes active, but ha interface in original L3"},{"line_number":24,"context_line":"agent still have ha cidr (although we had seen keepalived state"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a89bdaa_41737780","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":57},"in_reply_to":"1ac06dbe_2cb0778b","updated":"2016-09-06 10:58:18.000000000","message":"Finally I understood what\u0027s going on here. Please specify the IP that is removed explicitly (i.e. 168.192.0.1/24) for clarity.","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"1e4ad413e672ed376126c6bcc2ace9cb213b5fcd","unresolved":false,"context_lines":[{"line_number":18,"context_line":"this option is specified, if the vrrp child process exit, the"},{"line_number":19,"context_line":"keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"We need to remove the ha cidr for ha device in namespace, When"},{"line_number":22,"context_line":"keepalived process restarts(in original L3 agent), ha state in"},{"line_number":23,"context_line":"other L3 agent becomes active, but ha interface in original L3"},{"line_number":24,"context_line":"agent still have ha cidr (although we had seen keepalived state"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ac06dbe_2cb0778b","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":57},"in_reply_to":"1ac06dbe_e908112b","updated":"2016-08-19 11:06:15.000000000","message":"John, not sure here \"ha_cidr\" is mislead you, actually it\u0027s a VIP for the vrrp instance.","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"f0bfc66bb6e3eb4544ec3913a033cf3e970d3221","unresolved":false,"context_lines":[{"line_number":18,"context_line":"this option is specified, if the vrrp child process exit, the"},{"line_number":19,"context_line":"keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"We need to remove the ha cidr for ha device in namespace, When"},{"line_number":22,"context_line":"keepalived process restarts(in original L3 agent), ha state in"},{"line_number":23,"context_line":"other L3 agent becomes active, but ha interface in original L3"},{"line_number":24,"context_line":"agent still have ha cidr (although we had seen keepalived state"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ac06dbe_e908112b","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":57},"in_reply_to":"3ac371cc_6724650c","updated":"2016-08-19 10:35:14.000000000","message":"John, sorry for belated reply. we no need to remove ha_cidr in previously-backup nodes. we just remove previously-active node. To be honest, previously-backup nodes didn\u0027t contain ha_cidr, ha_cidr only exists in active node.\n\nThe procedure like this:\n1. agent_A(active) agent_B(standby) agent_C(standby)\n2. agent_A (vrrp child process killed, with -R param, keepalived parent process exit)\n3. agent_B or agent_C will become active\n4. agent_A: keepalived spawn, remove ha_cidr in namespace, VRRP_Instance state in /var/log/messages is BACKUP, and ha state in Neutron is standby.\n5. End result: agent_A(standby) agent_B(standby) agent_C(active)","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"4df3037863281d3bb94a0355839af4087979949b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"this option is specified, if the vrrp child process exit, the"},{"line_number":19,"context_line":"keepalived parent process will raise the SIGTERM signal and exit.[1]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"We need to remove the ha cidr for ha device in namespace, When"},{"line_number":22,"context_line":"keepalived process restarts(in original L3 agent), ha state in"},{"line_number":23,"context_line":"other L3 agent becomes active, but ha interface in original L3"},{"line_number":24,"context_line":"agent still have ha cidr (although we had seen keepalived state"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a89bdaa_971cddc2","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":57},"in_reply_to":"9a89bdaa_41737780","updated":"2016-09-06 11:34:56.000000000","message":"Done","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"fd28913e1ffab021d6d7ea364c1faab91c862199","unresolved":false,"context_lines":[{"line_number":26,"context_line":"monitor will never received the ha cidr change event, so the ha state"},{"line_number":27,"context_line":"will never send to Neutron Server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"To slove cyclic import for HA_DEV_PREFIX, we put this constant to"},{"line_number":30,"context_line":"neutron/common/constants."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"[1] Search \"dont-respawn\" in http://www.keepalived.org/changelog.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3ac371cc_279b8d67","line":29,"range":{"start_line":29,"start_character":3,"end_line":29,"end_character":9},"updated":"2016-08-18 12:23:34.000000000","message":"s/slove/solve/","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"f0bfc66bb6e3eb4544ec3913a033cf3e970d3221","unresolved":false,"context_lines":[{"line_number":26,"context_line":"monitor will never received the ha cidr change event, so the ha state"},{"line_number":27,"context_line":"will never send to Neutron Server."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"To slove cyclic import for HA_DEV_PREFIX, we put this constant to"},{"line_number":30,"context_line":"neutron/common/constants."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"[1] Search \"dont-respawn\" in http://www.keepalived.org/changelog.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ac06dbe_2913495e","line":29,"range":{"start_line":29,"start_character":3,"end_line":29,"end_character":9},"in_reply_to":"3ac371cc_279b8d67","updated":"2016-08-19 10:35:14.000000000","message":"Done","commit_id":"f65ca926d6c077ce5772fae0aaba043e9dd95838"}],"neutron/agent/linux/keepalived.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"},{"line_number":439,"context_line":"                    if prefix \u003d\u003d str(PRIMARY_VIP_RANGE_SIZE):"},{"line_number":440,"context_line":"                        device.addr.delete(address[\u0027cidr\u0027])"},{"line_number":441,"context_line":"                        LOG.debug(\"Remove ha cidr %s from namespace %s\","},{"line_number":442,"context_line":"                                  address[\u0027cidr\u0027], self.namespace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_54188475","line":439,"range":{"start_line":439,"start_character":20,"end_line":439,"end_character":61},"updated":"2016-07-25 14:34:40.000000000","message":"Probably better to check if address \u003d\u003d self.get_primary_vip() - this will remove some of the split() logic here.","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"},{"line_number":439,"context_line":"                    if prefix \u003d\u003d str(PRIMARY_VIP_RANGE_SIZE):"},{"line_number":440,"context_line":"                        device.addr.delete(address[\u0027cidr\u0027])"},{"line_number":441,"context_line":"                        LOG.debug(\"Remove ha cidr %s from namespace %s\","},{"line_number":442,"context_line":"                                  address[\u0027cidr\u0027], self.namespace)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_fcd6b1c1","line":439,"range":{"start_line":439,"start_character":20,"end_line":439,"end_character":61},"in_reply_to":"dada55a8_54188475","updated":"2016-07-25 15:52:50.000000000","message":"Done","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e77847b9ab0263c8b72f642d2d5de4776a5b85ac","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_b807f316","line":435,"updated":"2016-08-10 15:25:08.000000000","message":"Is this string defined in a constants file somewhere?","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"91516536ac6d22b7b601241c05caad960b60d7e0","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_bc864e63","line":435,"in_reply_to":"7ac969e8_219fd504","updated":"2016-08-13 05:49:56.000000000","message":"Yes, you can put it in the neutron constants file first, then start a second patch for neutron-lib.  When it merges and version is bumped in neutron you\u0027ll have to change neutron again to use *that* constants file and remove the local definition.  Although if nothing outside of the neutron tree will use it, you can just skip the neutron-lib change.","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"bb7c1048dec77b12ddff4efb35bbb353649ac079","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_c1ba41c0","line":435,"in_reply_to":"7ac969e8_a13465de","updated":"2016-08-13 05:02:50.000000000","message":"I wouldn\u0027t wait for neutron-lib, since not only does the patch need to be created and merge, but neutron-lib needs to be released and requirements.txt needs to move forward.","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"1f9c94386e780c13d8d342471814e4360145a8ea","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_fce1e6ff","line":435,"in_reply_to":"7ac969e8_bc864e63","updated":"2016-08-13 06:14:22.000000000","message":"Done","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"d49df2960c76541661a86e46a7e249fcb1d6dcbd","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_219fd504","line":435,"in_reply_to":"7ac969e8_c1ba41c0","updated":"2016-08-13 05:27:58.000000000","message":"Got it, but how we avoid the cyclic import between these two modules? Can we put HA_DEV_PREFIX in neutron.common.constants ?","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"4df8dbf0da7a9615d61818c731bccf656acb2995","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_a13465de","line":435,"in_reply_to":"7ac969e8_e372e5ac","updated":"2016-08-13 04:23:02.000000000","message":"Thanks, Brian. I will make change after patch merged in neutron-lib.","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe27d929d92ed36b253fde0c5b3e08fe3d1a17b2","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ac969e8_e372e5ac","line":435,"in_reply_to":"9ad45d7e_5924dd5e","updated":"2016-08-13 02:37:56.000000000","message":"Then I would use that, and create another patch to move it to the constants file in neutron-lib.","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"6ff25bb55afc9eb3fbfc19e9dcc6f3e3302742dc","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        devices \u003d ip_wrapper.get_devices()"},{"line_number":433,"context_line":"        for device in devices:"},{"line_number":434,"context_line":"            name \u003d device.name"},{"line_number":435,"context_line":"            if name.startswith(\u0027ha-\u0027):"},{"line_number":436,"context_line":"                addresses \u003d device.addr.list()"},{"line_number":437,"context_line":"                for address in addresses:"},{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_5924dd5e","line":435,"in_reply_to":"9ad45d7e_b807f316","updated":"2016-08-11 06:03:34.000000000","message":"Yes, it defined as HA_DEV_PREFIX in agent.l3.ha_router","commit_id":"bedd97d1760ca84cb5e04758497759459ceeec1e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d01c1b6a9e768b1decf6aa8e50e731dc613486","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"},{"line_number":439,"context_line":"                    if prefix \u003d\u003d str(PRIMARY_VIP_RANGE_SIZE):"},{"line_number":440,"context_line":"                        device.addr.delete(address[\u0027cidr\u0027])"},{"line_number":441,"context_line":"                        LOG.debug(\"Remove ha cidr %s from namespace %s\","},{"line_number":442,"context_line":"                                  address[\u0027cidr\u0027], self.namespace)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def _get_keepalived_process_callback(self, vrrp_pm, config_path):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_c31bb871","line":441,"updated":"2016-09-08 14:45:01.000000000","message":"s/Remove/Removed","commit_id":"a9693983d0c298a85d831d118c461115d6fc1d07"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"c152c65d7bf74e6c7b6bc13cc75a0c5675190389","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                    _, prefix \u003d address[\u0027cidr\u0027].split(\"/\")"},{"line_number":439,"context_line":"                    if prefix \u003d\u003d str(PRIMARY_VIP_RANGE_SIZE):"},{"line_number":440,"context_line":"                        device.addr.delete(address[\u0027cidr\u0027])"},{"line_number":441,"context_line":"                        LOG.debug(\"Remove ha cidr %s from namespace %s\","},{"line_number":442,"context_line":"                                  address[\u0027cidr\u0027], self.namespace)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def _get_keepalived_process_callback(self, vrrp_pm, config_path):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_98171b44","line":441,"in_reply_to":"9a89bdaa_c31bb871","updated":"2016-09-08 15:36:15.000000000","message":"Done","commit_id":"a9693983d0c298a85d831d118c461115d6fc1d07"}],"neutron/tests/functional/agent/linux/test_keepalived.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                keepalived_process.get_pid_file_name()))"},{"line_number":113,"context_line":"        common_utils.wait_until_true("},{"line_number":114,"context_line":"            lambda: keepalived_vrrp_subprocess.active,"},{"line_number":115,"context_line":"            timeout\u003d5,"},{"line_number":116,"context_line":"            sleep\u003d0.01,"},{"line_number":117,"context_line":"            exception\u003dRuntimeError(_(\"Keepalived vrrp subprocess \""},{"line_number":118,"context_line":"                                     \"didn\u0027t spawn\")))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_70a4aab8","line":115,"range":{"start_line":115,"start_character":12,"end_line":115,"end_character":21},"updated":"2016-07-25 14:34:40.000000000","message":"Please raise this by a whole lot (like 30 seconds at least), since when the gate is loaded these trivial tasks tend to take a lot longer. Also, the 0.01 from the line below is too short - just use the default.","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                keepalived_process.get_pid_file_name()))"},{"line_number":113,"context_line":"        common_utils.wait_until_true("},{"line_number":114,"context_line":"            lambda: keepalived_vrrp_subprocess.active,"},{"line_number":115,"context_line":"            timeout\u003d5,"},{"line_number":116,"context_line":"            sleep\u003d0.01,"},{"line_number":117,"context_line":"            exception\u003dRuntimeError(_(\"Keepalived vrrp subprocess \""},{"line_number":118,"context_line":"                                     \"didn\u0027t spawn\")))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_7c77619f","line":115,"range":{"start_line":115,"start_character":12,"end_line":115,"end_character":21},"in_reply_to":"dada55a8_70a4aab8","updated":"2016-07-25 15:52:50.000000000","message":"Done","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                     \"didn\u0027t spawn\")))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        vrrp_pid \u003d keepalived_vrrp_subprocess.pid"},{"line_number":121,"context_line":"        utils.execute([\u0027kill\u0027, \u0027-9\u0027, vrrp_pid], run_as_root\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # respawn keepalived process"},{"line_number":124,"context_line":"        common_utils.wait_until_true("}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_f0c53a3d","line":121,"range":{"start_line":121,"start_character":32,"end_line":121,"end_character":34},"updated":"2016-07-25 14:34:40.000000000","message":"Technically, signal 9 is SIGKILL. If we are to simulate the actual event, use SIGTERM (15) instead.\n\nEven better, simulate an actual \"add an interface which will cause keepalived to kill itself\".","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"a62661e150c6df71613a84ccc652520074307d4a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                                     \"didn\u0027t spawn\")))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        vrrp_pid \u003d keepalived_vrrp_subprocess.pid"},{"line_number":121,"context_line":"        utils.execute([\u0027kill\u0027, \u0027-9\u0027, vrrp_pid], run_as_root\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # respawn keepalived process"},{"line_number":124,"context_line":"        common_utils.wait_until_true("}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_9c2cd54b","line":121,"range":{"start_line":121,"start_character":32,"end_line":121,"end_character":34},"in_reply_to":"dada55a8_f0c53a3d","updated":"2016-07-25 15:52:50.000000000","message":"Thanks, John. SIGTERM is appropriate.\nI investigate the reson why keepalived vrrp killed by keepalived, but got nothing.\nCan you give me some advice how to simulate this scenario?","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        common_utils.wait_until_true("},{"line_number":125,"context_line":"            lambda: (keepalived_process.active and"},{"line_number":126,"context_line":"                     keepalived_pid !\u003d keepalived_process.pid),"},{"line_number":127,"context_line":"            timeout\u003d5,"},{"line_number":128,"context_line":"            sleep\u003d0.01,"},{"line_number":129,"context_line":"            exception\u003dRuntimeError(_(\"Keepalived process \""},{"line_number":130,"context_line":"                                     \"didn\u0027t respawn\")))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_b0ae2296","line":127,"range":{"start_line":127,"start_character":12,"end_line":127,"end_character":21},"updated":"2016-07-25 14:34:40.000000000","message":"ditto","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4c6bdb821010f59719d11ec54185b14fef942940","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        common_utils.wait_until_true("},{"line_number":133,"context_line":"            lambda: (keepalived_vrrp_subprocess.active and"},{"line_number":134,"context_line":"                     vrrp_pid !\u003d keepalived_vrrp_subprocess.pid),"},{"line_number":135,"context_line":"            timeout\u003d5,"},{"line_number":136,"context_line":"            sleep\u003d0.01,"},{"line_number":137,"context_line":"            exception\u003dRuntimeError(_(\"Keepalived vrrp subprocess \""},{"line_number":138,"context_line":"                                     \"didn\u0027t respawn\")))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_10960e4c","line":135,"range":{"start_line":135,"start_character":12,"end_line":135,"end_character":21},"updated":"2016-07-25 14:34:40.000000000","message":"ditto","commit_id":"cb9b9b6b55232bffeeb759e25e39b1cb73871d58"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d01c1b6a9e768b1decf6aa8e50e731dc613486","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                     \"didn\u0027t spawn\")))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        vrrp_pid \u003d keepalived_vrrp_subprocess.pid"},{"line_number":124,"context_line":"        utils.execute([\u0027kill\u0027, \u0027-15\u0027, vrrp_pid], run_as_root\u003dTrue)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # respawn keepalived process"},{"line_number":127,"context_line":"        common_utils.wait_until_true("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_236544b4","line":124,"updated":"2016-09-08 14:45:01.000000000","message":"Wondering if there is a name, instead of 15 ?  I think it\u0027s TERM, which is the default, so this isn\u0027t necessary?","commit_id":"a9693983d0c298a85d831d118c461115d6fc1d07"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"c152c65d7bf74e6c7b6bc13cc75a0c5675190389","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                     \"didn\u0027t spawn\")))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        vrrp_pid \u003d keepalived_vrrp_subprocess.pid"},{"line_number":124,"context_line":"        utils.execute([\u0027kill\u0027, \u0027-15\u0027, vrrp_pid], run_as_root\u003dTrue)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # respawn keepalived process"},{"line_number":127,"context_line":"        common_utils.wait_until_true("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a89bdaa_38cd2f66","line":124,"in_reply_to":"9a89bdaa_236544b4","updated":"2016-09-08 15:36:15.000000000","message":"Yes, it\u0027s SIGTERM. I just follow same value like #Line 62. If it needed, I will modify.\nWe just simulate normal exit, so I think this is necessary.","commit_id":"a9693983d0c298a85d831d118c461115d6fc1d07"}]}
