)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"81aeb1e2b1a07ab8e010906875c0f5f927b4804e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Currently there is a bug [1] open on keepalived as it\u0027s not sending GARP"},{"line_number":11,"context_line":"on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a629dbe_027519ca","line":10,"updated":"2016-11-08 11:38:56.000000000","message":"I hear that it\u0027s fixed in 1.3.20 release of keepalived. I understand that this feature should be enabled in older (RHEL/Xenial) platforms, but do we need to have it enabled by default? Or would it at least make sense to allow to disable the feature on newer platforms, and then maybe later we would be able to revert the patch, instead requiring a new keepalived version (plus shipping the revert with a sanity check that would validate keepalived to do the right thing)?\n\nThe very least, we should be explicit in the commit message about which keepalived versions are affected.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"53b320ffa6ef5715c7c4a25ea9add9619046be54","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Currently there is a bug [1] open on keepalived as it\u0027s not sending GARP"},{"line_number":11,"context_line":"on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a629dbe_b7473b1c","line":10,"in_reply_to":"9a629dbe_027519ca","updated":"2016-11-08 16:11:28.000000000","message":"Done","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3f069236c9f512139bacc240eb272f51c07ef19a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_51218ab3","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":49},"updated":"2016-11-08 17:32:48.000000000","message":"contained a bug?","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9813ef363ffd8a33f4b835b4019ff4f42cf1cb20","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_d73aea97","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":49},"in_reply_to":"9a629dbe_51218ab3","updated":"2016-11-08 18:13:05.000000000","message":"I believe they still do :)","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3f069236c9f512139bacc240eb272f51c07ef19a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"},{"line_number":14,"context_line":"detects that, GARP is sent for given event from ip-monitor."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_9102420a","line":13,"updated":"2016-11-08 17:32:48.000000000","message":"Maybe also worth explaining why a workaround and not e.g. just requiring a newer keepalived is the path you take.","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"1d3a49dac8eec9d85149af4fbeb86e108f2f18fe","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"},{"line_number":14,"context_line":"detects that, GARP is sent for given event from ip-monitor."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_baff1b00","line":13,"in_reply_to":"9a629dbe_9102420a","updated":"2016-11-08 18:13:14.000000000","message":"Done","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2d579a4a724c8d9f5b5a93d9d9ca39ab83c9b1a6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a629dbe_1a5c87ec","line":10,"range":{"start_line":10,"start_character":54,"end_line":10,"end_character":61},"updated":"2016-11-08 18:21:09.000000000","message":"so... what is conatin? contain?","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f25b175ba7983d8d340b7ff68e42d9a99ba5c275","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a629dbe_4091b251","line":10,"range":{"start_line":10,"start_character":54,"end_line":10,"end_character":61},"in_reply_to":"9a629dbe_1a5c87ec","updated":"2016-11-09 11:36:25.000000000","message":"Aha :) I thought you want me to use past simple.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"efb3afef0f8ea9edb567b671e3f5dd55613c5d73","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"},{"line_number":14,"context_line":"detects that, GARP is sent for given event from ip-monitor. Currently"},{"line_number":15,"context_line":"keepalived conf doesn\u0027t use garp_master_refresh option which is required by"},{"line_number":16,"context_line":"newer versions of keepalived to successfully send gratuitous ARPs on"},{"line_number":17,"context_line":"receiving SIGHUP. We dropped this option as it didn\u0027t work with IPv6"},{"line_number":18,"context_line":"(see bug 1520517) and it kept flooding network."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a629dbe_fab6f388","line":15,"range":{"start_line":15,"start_character":28,"end_line":15,"end_character":47},"updated":"2016-11-08 18:28:33.000000000","message":"oh so we still need _refresh to make it work? I thought we don\u0027t, in newer versions.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f25b175ba7983d8d340b7ff68e42d9a99ba5c275","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a workaround so when new address is added and ip-monitor"},{"line_number":14,"context_line":"detects that, GARP is sent for given event from ip-monitor. Currently"},{"line_number":15,"context_line":"keepalived conf doesn\u0027t use garp_master_refresh option which is required by"},{"line_number":16,"context_line":"newer versions of keepalived to successfully send gratuitous ARPs on"},{"line_number":17,"context_line":"receiving SIGHUP. We dropped this option as it didn\u0027t work with IPv6"},{"line_number":18,"context_line":"(see bug 1520517) and it kept flooding network."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a629dbe_b680f847","line":15,"range":{"start_line":15,"start_character":28,"end_line":15,"end_character":47},"in_reply_to":"9a629dbe_fab6f388","updated":"2016-11-09 11:36:25.000000000","message":"I misunderstood this part.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"aba47fdcc65bf7e15afb28dc965f6192567d302a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a629dbe_071fb05f","line":10,"updated":"2016-11-09 12:05:00.000000000","message":"http://www.keepalived.org/changelog.html Release 1.2.24\n\nAre you speaking about 1.2.20 ? , where is the 1.3.20 ?","commit_id":"f055160dfd2c54bb361fa077e1b7977e89defb79"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6863cfcc912fc0ad92cc3d2958bbbc931f3e0b2b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a629dbe_87274063","line":10,"in_reply_to":"9a629dbe_071fb05f","updated":"2016-11-09 12:11:00.000000000","message":"Yeah, should be 1.2.20 it seems.","commit_id":"f055160dfd2c54bb361fa077e1b7977e89defb79"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"34c803db73706f2d21749e9b9b1fc6f0995aaa88","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.3.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a629dbe_62be9ad5","line":10,"in_reply_to":"9a629dbe_87274063","updated":"2016-11-09 12:39:06.000000000","message":"Done","commit_id":"f055160dfd2c54bb361fa077e1b7977e89defb79"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.2.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a629dbe_3675c397","line":10,"range":{"start_line":10,"start_character":54,"end_line":10,"end_character":62},"updated":"2016-11-09 12:54:36.000000000","message":"conatin","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":7,"context_line":"l3-ha: Send gratuitous ARP when new floating IP is added"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We rely on keepalived to send gratuitous ARPs when floating IP is added."},{"line_number":10,"context_line":"Older versions of keepalived up to 1.2.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a629dbe_76ac9ba0","line":10,"range":{"start_line":10,"start_character":54,"end_line":10,"end_character":62},"in_reply_to":"9a629dbe_3675c397","updated":"2016-11-09 13:38:20.000000000","message":"Hopefully done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Older versions of keepalived up to 1.2.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"},{"line_number":14,"context_line":"distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a629dbe_f64c2b72","line":13,"updated":"2016-11-09 12:54:36.000000000","message":"or Xenial","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Older versions of keepalived up to 1.2.20 (exclusive) conatin bug [1] where"},{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS, so this patch adds a workaround for such"},{"line_number":14,"context_line":"distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9a629dbe_d691e753","line":13,"in_reply_to":"9a629dbe_f64c2b72","updated":"2016-11-09 13:38:20.000000000","message":"Done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3e746bf423aa3672ab538d78bdaa81529b277278","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_2d8f292b","line":14,"updated":"2016-11-09 16:07:20.000000000","message":"You want to explain in the commit message why the change for SnatNamespace. Is it really a must-have part of the fix?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"2463ce47a05317898569e43c53c45b915c4c8dc9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_017dceb0","line":14,"in_reply_to":"9a629dbe_01194e79","updated":"2016-11-09 17:54:40.000000000","message":"When using a dvr+ha router, we use dvr_edge_ha_router.py, which uses SnatNamespace, which itself contains the qg- device (external connectivity). On failover, keepalived will send garp for it, so we don\u0027t want to send multiple ones from the non-master (when adding an external connectivity right before failing over, triggering the race we\u0027re talking about for days).\n\nI\u0027m not fuss on putting this in the commit message, though.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2888e23896abcb514d89d91b40d37891897c9111","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_5caec981","line":14,"in_reply_to":"9a629dbe_017dceb0","updated":"2016-11-09 18:12:32.000000000","message":"What if router is not attached to external network and qg- is added later?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_b63e2626","line":14,"in_reply_to":"9a629dbe_2d8f292b","updated":"2016-11-09 17:19:28.000000000","message":"John requested that, if it would be me, I\u0027d fix it one by one as it\u0027s we\u0027ll fix all the issues in one patch, it\u0027ll be hard to backport ...","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"af6be94174bba8473b30b8285ff9fea64703002a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_b0cc696b","line":14,"in_reply_to":"9a629dbe_5caec981","updated":"2016-11-09 18:21:47.000000000","message":"If it\u0027s a dvr+ha router without external connectivity, it still has the snat- namespace - it will only contain the ha- devices (and the keepalived_state_change process).","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"f10f9d589c19b9e13d29d8e43a19539d11d24dbd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"keepalived does not send GARP on receiving SIGHUP. Unfortunately, newer"},{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_01194e79","line":14,"in_reply_to":"9a629dbe_b63e2626","updated":"2016-11-09 17:23:42.000000000","message":"If we can\u0027t explain why it\u0027s logically bound, then just drop. Let John explain himself. ;)","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3e746bf423aa3672ab538d78bdaa81529b277278","unresolved":false,"context_lines":[{"line_number":12,"context_line":"versions containing the fix are not packaged yet for some distributions"},{"line_number":13,"context_line":"like RHEL or CentOS or Ubuntu Xenial, so this patch adds a workaround for"},{"line_number":14,"context_line":"such distributions until new packages are available."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1391553"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ieab53624dc34dc687a0e8eebd84778f7fc95dd77"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"9a629dbe_ad941943","line":15,"updated":"2016-11-09 16:07:20.000000000","message":"One more thing: now that it becomes complex to reason about which setups would be affected to a race, maybe we could issue a release note with a recommendation to upgrade kernel to 3.19+ to completely fix any races in HA routers code.\n\nNote we would not require it, but just recommend. In the future, we may actually require the bump.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"}],"neutron/agent/l3/dvr_fip_ns.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bc7f73f5967d7d36d36257d1dd39085e2750b319","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            LOG.debug(\u0027DVR: fip namespace (%s) does not support setting \u0027"},{"line_number":145,"context_line":"                      \u0027net.ipv4.ip_nonlocal_bind, trying in root namespace\u0027,"},{"line_number":146,"context_line":"                      self.name)"},{"line_number":147,"context_line":"            ip_lib.set_ip_nonlocal_bind(1, None)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # no connection tracking needed in fip namespace"},{"line_number":150,"context_line":"        self._iptables_manager.ipv4[\u0027raw\u0027].add_rule(\u0027PREROUTING\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ad3ed925","line":147,"range":{"start_line":147,"start_character":40,"end_line":147,"end_character":48},"updated":"2016-11-09 16:18:29.000000000","message":"Lets use \"value\u003d1, namespace\u003dNone\" so that it won\u0027t look extra weird with arbitrary magic values spread around the place. Same for L142.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            LOG.debug(\u0027DVR: fip namespace (%s) does not support setting \u0027"},{"line_number":145,"context_line":"                      \u0027net.ipv4.ip_nonlocal_bind, trying in root namespace\u0027,"},{"line_number":146,"context_line":"                      self.name)"},{"line_number":147,"context_line":"            ip_lib.set_ip_nonlocal_bind(1, None)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        # no connection tracking needed in fip namespace"},{"line_number":150,"context_line":"        self._iptables_manager.ipv4[\u0027raw\u0027].add_rule(\u0027PREROUTING\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_56f14a00","line":147,"range":{"start_line":147,"start_character":40,"end_line":147,"end_character":48},"in_reply_to":"9a629dbe_ad3ed925","updated":"2016-11-09 17:19:28.000000000","message":"Done","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"}],"neutron/agent/l3/dvr_snat_ns.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            LOG.warning("},{"line_number":40,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":41,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":42,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":43,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":44,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":45,"context_line":"                 \u0027err\u0027: rte})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_6d7121a8","line":42,"range":{"start_line":42,"start_character":65,"end_line":42,"end_character":66},"updated":"2016-11-09 16:04:26.000000000","message":"Maybe add some more info what it means for the operator who is reading it (they may be exposed to a race in HA routers when sending gratuitous ARPs?)","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            LOG.warning("},{"line_number":40,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":41,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":42,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":43,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":44,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":45,"context_line":"                 \u0027err\u0027: rte})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_4d553df8","line":42,"range":{"start_line":42,"start_character":45,"end_line":42,"end_character":49},"updated":"2016-11-09 16:04:26.000000000","message":"knob","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            LOG.warning("},{"line_number":40,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":41,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":42,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":43,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":44,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":45,"context_line":"                 \u0027err\u0027: rte})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_cdc22d34","line":42,"range":{"start_line":42,"start_character":45,"end_line":42,"end_character":49},"in_reply_to":"9a629dbe_4d553df8","updated":"2016-11-09 17:19:28.000000000","message":"I fixed knob like 100 times, I don\u0027t know why I keep writing \u0027know\u0027","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            LOG.warning("},{"line_number":40,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":41,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":42,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":43,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":44,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":45,"context_line":"                 \u0027err\u0027: rte})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_0ddfc50d","line":42,"range":{"start_line":42,"start_character":65,"end_line":42,"end_character":66},"in_reply_to":"9a629dbe_6d7121a8","updated":"2016-11-09 17:19:28.000000000","message":"Done","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2bc4219a42c7bc7129e0a5c540d8726061dfa928","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_bc71a578","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"updated":"2016-11-09 17:56:59.000000000","message":"but is it HA router namespace?","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"963ebf948586ca462303cb249f00822cd6643411","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_b0970947","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_7024915f","updated":"2016-11-09 18:21:51.000000000","message":"So this is the post-refactor design. It was way worse before.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b6bc92f97165b65cfe67f2da57e4aeafa9ceb617","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_7024915f","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_90a845dd","updated":"2016-11-09 18:15:37.000000000","message":"So is there any plan on separation in DVR+HA and DVR use case? Re-using same thing for different behavior sounds like a really bad idea that makes the code less granular.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"e1d94e2b5ac7e448557a57524f5be51ece87ed18","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_90a845dd","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_9c8b01c3","updated":"2016-11-09 18:09:39.000000000","message":"On a DVR Non-HA, it\u0027s just an snat- namespace without the HA thingies.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7b76995e1a763e7bb1561f0302aba2b43b0a6105","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_9c56a15a","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_9cfa2174","updated":"2016-11-09 18:01:04.000000000","message":"Nevermind, I was thinking dvr+ha is not a thing yet.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bf4652d752fefa17968355bb1b7b325f93e2ce1e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_dc4c99ca","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_9cfa2174","updated":"2016-11-09 18:01:41.000000000","message":"The SnatNamespace is the \"snat-\" namespace, which is a \"dvr\" thing, so this comment here is wrong.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e19dc998a3e96e6185d86d4907f25def7e68d32","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_9cfa2174","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_bc71a578","updated":"2016-11-09 17:59:16.000000000","message":"I understood it it is. Or it *might* be","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"990281594dae04fb5fab6b8b1844b497c6fffe41","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_dce3b9a2","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_dc4c99ca","updated":"2016-11-09 18:03:03.000000000","message":"But it *may be* HA? The comment may need a slight adjustment to reflect that.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"6a4f35ac1caf26c8769a684362d0a9f00bd595f4","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_9c8b01c3","line":34,"range":{"start_line":34,"start_character":10,"end_line":34,"end_character":30},"in_reply_to":"9a629dbe_dc4c99ca","updated":"2016-11-09 18:04:12.000000000","message":"I might understand this wrong - but I thought this is where the HA thingy is done, so it\u0027s an HA router namespace, or am I totally wrong? :)","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2bc4219a42c7bc7129e0a5c540d8726061dfa928","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def get_snat_ns_name(cls, router_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_dc6ad980","line":35,"range":{"start_line":35,"start_character":35,"end_line":35,"end_character":52},"updated":"2016-11-09 17:56:59.000000000","message":"same here; would probably make more sense to have it named like set_ip_nonlocal_bind_once.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7b76995e1a763e7bb1561f0302aba2b43b0a6105","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def get_snat_ns_name(cls, router_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_bc53656a","line":35,"range":{"start_line":35,"start_character":35,"end_line":35,"end_character":52},"in_reply_to":"9a629dbe_1c2d31fe","updated":"2016-11-09 18:01:04.000000000","message":"Now I get that, thanks.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e19dc998a3e96e6185d86d4907f25def7e68d32","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def create(self):"},{"line_number":33,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":34,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":35,"context_line":"        ip_lib.set_ip_nonlocal_bind_for_ha_namespace(self.name)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @classmethod"},{"line_number":38,"context_line":"    def get_snat_ns_name(cls, router_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_1c2d31fe","line":35,"range":{"start_line":35,"start_character":35,"end_line":35,"end_character":52},"in_reply_to":"9a629dbe_dc6ad980","updated":"2016-11-09 17:59:16.000000000","message":"But SNAT is still HA namespace, isn\u0027t it?","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"}],"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":"HA_DEV_PREFIX \u003d \u0027ha-\u0027"},{"line_number":33,"context_line":"IP_MONITOR_PROCESS_SERVICE \u003d \u0027ip_monitor\u0027"},{"line_number":34,"context_line":"IP_NONLOCAL_BIND \u003d \u0027net.ipv4.ip_nonlocal_bind\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_e2854aad","line":34,"updated":"2016-11-09 12:54:36.000000000","message":"now that we have it in two places (dvr fip code and here), should we have a common function to do it, that would just receive an argument with desired value?","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":"HA_DEV_PREFIX \u003d \u0027ha-\u0027"},{"line_number":33,"context_line":"IP_MONITOR_PROCESS_SERVICE \u003d \u0027ip_monitor\u0027"},{"line_number":34,"context_line":"IP_NONLOCAL_BIND \u003d \u0027net.ipv4.ip_nonlocal_bind\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_4c03880d","line":34,"in_reply_to":"9a629dbe_e2854aad","updated":"2016-11-09 13:38:20.000000000","message":"Done, I had to put it to ip_lib as to agent.linux.utils introduced a circular dependency.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IP_NONLOCAL_BIND \u003d \u0027net.ipv4.ip_nonlocal_bind\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"},{"line_number":38,"context_line":"    def create(self):"},{"line_number":39,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_a2d512ba","line":37,"updated":"2016-11-09 12:54:36.000000000","message":"you should describe why it\u0027s needed, in commit message","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IP_NONLOCAL_BIND \u003d \u0027net.ipv4.ip_nonlocal_bind\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"},{"line_number":38,"context_line":"    def create(self):"},{"line_number":39,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_6c6f6cc5","line":37,"in_reply_to":"9a629dbe_a2d512ba","updated":"2016-11-09 13:38:20.000000000","message":"Done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"},{"line_number":38,"context_line":"    def create(self):"},{"line_number":39,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":41,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d0\u0027 % IP_NONLOCAL_BIND]"},{"line_number":42,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.name)"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_229022ec","line":40,"updated":"2016-11-09 12:54:36.000000000","message":"...because...?","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class HaRouterNamespace(namespaces.RouterNamespace):"},{"line_number":38,"context_line":"    def create(self):"},{"line_number":39,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":41,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d0\u0027 % IP_NONLOCAL_BIND]"},{"line_number":42,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.name)"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_ec637cda","line":40,"in_reply_to":"9a629dbe_229022ec","updated":"2016-11-09 13:38:20.000000000","message":"Described in class docs.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d6f1c37c65ae07f8df46383b3fc57d2862dce799","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":41,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d0\u0027 % IP_NONLOCAL_BIND]"},{"line_number":42,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.name)"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_56d4f745","line":43,"updated":"2016-11-09 12:56:38.000000000","message":"also, some kernels don\u0027t have it in the namespace but in root ns only (\u003c3.19). This is handled in dvr_fip_ns.py already.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c0fdb57dc74dbda8beedd8dfd9295323d073d3d9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":41,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d0\u0027 % IP_NONLOCAL_BIND]"},{"line_number":42,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.name)"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_ec4a9cc4","line":43,"in_reply_to":"9a629dbe_56d4f745","updated":"2016-11-09 13:44:30.000000000","message":"Done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4db0acaedb5234f6f7d1d684ec74b27cf9feba22","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":41,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d0\u0027 % IP_NONLOCAL_BIND]"},{"line_number":42,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.name)"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_a73efa25","line":43,"in_reply_to":"9a629dbe_56d4f745","updated":"2016-11-09 15:29:48.000000000","message":"Maybe reusing the code is not such a great idea in the end.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":47,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":48,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":49,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":50,"context_line":"            self.router_namespace.router_id,"},{"line_number":51,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":52,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_222ca2aa","line":49,"updated":"2016-11-09 12:54:36.000000000","message":"Instead of another type for HA namespaces, would it make a bit more sense to just pass allow_nonlocal_bind\u003d argument into super().__init__() that would then pass it into namespaces.RouterNamespace() that would then set the needed value when handling create(), like we do for net.ipv6.conf.all.forwarding when use_ipv6 is passed?","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":47,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":48,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":49,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":50,"context_line":"            self.router_namespace.router_id,"},{"line_number":51,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":52,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_560957dc","line":49,"in_reply_to":"9a629dbe_222ca2aa","updated":"2016-11-09 13:38:20.000000000","message":"I think inheritance makes more sense here as we\u0027re more specific about behavior in HA router namespace. We don\u0027t care about such value in RouterNamespace.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"ec95628d5b7a614670e8f6ec1f18df7fbcf275bd","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":47,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":48,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":49,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":50,"context_line":"            self.router_namespace.router_id,"},{"line_number":51,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":52,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_cf5a2a50","line":49,"in_reply_to":"9a629dbe_560957dc","updated":"2016-11-09 14:05:08.000000000","message":"Shouldn\u0027t this also be done for SnatNamespace (used by dvr+ha routers)?","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4adce4d75238c1845f3f62eb36498949949c6c7f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":47,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":48,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":49,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":50,"context_line":"            self.router_namespace.router_id,"},{"line_number":51,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":52,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_079de6bb","line":49,"in_reply_to":"9a629dbe_cf5a2a50","updated":"2016-11-09 15:21:00.000000000","message":"We care because DVR namespace inherits from there. That said, it may be actually safer not to touch global setting if per-ns is not available; we could then just warn that it\u0027s raceful, but not touch it to avoid breaking DVR component.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            LOG.warning("},{"line_number":50,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":51,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":52,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":53,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":54,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":55,"context_line":"                 \u0027err\u0027: rte})"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_8db1154a","line":52,"updated":"2016-11-09 16:04:26.000000000","message":"Same comments as in SnatNamespace","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def create(self):"},{"line_number":44,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":45,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            ip_lib.set_ip_nonlocal_bind(0, self.name)"},{"line_number":48,"context_line":"        except RuntimeError as rte:"},{"line_number":49,"context_line":"            LOG.warning("},{"line_number":50,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":51,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":52,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":53,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":54,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":55,"context_line":"                 \u0027err\u0027: rte})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ed50d1d6","line":55,"range":{"start_line":46,"start_character":8,"end_line":55,"end_character":29},"updated":"2016-11-09 16:04:26.000000000","message":"that snippet seems to duplicate what\u0027s in SnatNamespace. Should we reuse the code from a single place?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b9fc4c072e7ee7218bffcaab034c35b7b0f10fe5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def create(self):"},{"line_number":44,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":45,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            ip_lib.set_ip_nonlocal_bind(0, self.name)"},{"line_number":48,"context_line":"        except RuntimeError as rte:"},{"line_number":49,"context_line":"            LOG.warning("},{"line_number":50,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":51,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":52,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":53,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":54,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":55,"context_line":"                 \u0027err\u0027: rte})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_2139f2a4","line":55,"range":{"start_line":46,"start_character":8,"end_line":55,"end_character":29},"in_reply_to":"9a629dbe_ad01793a","updated":"2016-11-09 17:27:29.000000000","message":"It will buy us no typos (or the same typo) in the message. :P","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bc7f73f5967d7d36d36257d1dd39085e2750b319","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def create(self):"},{"line_number":44,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":45,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            ip_lib.set_ip_nonlocal_bind(0, self.name)"},{"line_number":48,"context_line":"        except RuntimeError as rte:"},{"line_number":49,"context_line":"            LOG.warning("},{"line_number":50,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":51,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":52,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":53,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":54,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":55,"context_line":"                 \u0027err\u0027: rte})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_501eb25f","line":55,"range":{"start_line":46,"start_character":8,"end_line":55,"end_character":29},"in_reply_to":"9a629dbe_ed50d1d6","updated":"2016-11-09 16:18:29.000000000","message":"+1","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def create(self):"},{"line_number":44,"context_line":"        super(HaRouterNamespace, self).create()"},{"line_number":45,"context_line":"        # HA router namespaces should not have ip_nonlocal_bind enabled"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            ip_lib.set_ip_nonlocal_bind(0, self.name)"},{"line_number":48,"context_line":"        except RuntimeError as rte:"},{"line_number":49,"context_line":"            LOG.warning("},{"line_number":50,"context_line":"                _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err) It \""},{"line_number":51,"context_line":"                    \"is not set to 0 in root namespace in order to not break \""},{"line_number":52,"context_line":"                    \"DVR which requires this know to be set to 1.\"),"},{"line_number":53,"context_line":"                {\u0027knob\u0027: ip_lib.IP_NONLOCAL_BIND,"},{"line_number":54,"context_line":"                 \u0027ns\u0027: self.name,"},{"line_number":55,"context_line":"                 \u0027err\u0027: rte})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ad01793a","line":55,"range":{"start_line":46,"start_character":8,"end_line":55,"end_character":29},"in_reply_to":"9a629dbe_ed50d1d6","updated":"2016-11-09 17:19:28.000000000","message":"I don\u0027t think it will buy us anything but meh","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":59,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":60,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":61,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":62,"context_line":"            self.router_namespace.router_id,"},{"line_number":63,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":64,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_6dcda1b6","line":61,"updated":"2016-11-09 16:04:26.000000000","message":"here you assume that RouterInfo.router_namespace is public. Not that I have a better solution for you...","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":59,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":60,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":61,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":62,"context_line":"            self.router_namespace.router_id,"},{"line_number":63,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":64,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ad6c1936","line":61,"in_reply_to":"9a629dbe_6dcda1b6","updated":"2016-11-09 17:19:28.000000000","message":"It appears to be like that. Other solution would be to unify __init__ parameters. I find this approach easier.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"2463ce47a05317898569e43c53c45b915c4c8dc9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":59,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":60,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":61,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":62,"context_line":"            self.router_namespace.router_id,"},{"line_number":63,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":64,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_bcc36588","line":61,"in_reply_to":"9a629dbe_ad6c1936","updated":"2016-11-09 17:54:40.000000000","message":"Sorry to be a drag: [1] (the dvr+ha class) inherits from this class, and depends on it having a variable called \u0027self.snat_namespace\u0027 (which is where the HA-ness is defined), which is created in [2].\n\nI\u0027m afraid this implementation carries some non-trivial results: this (HaRouterNamespace) will re-create another object which is responsible for the qrouter- namespace, and will set ip_nonlocal_bind\u003d0 for it. Although it\u0027s harmless for the dvr+ha case (and is what we want for the ha case), it\u0027s a non-trivial, non-implicit side effect. If this is what you intended, it should be documented. If not, lets either pretend it\u0027s the intended behavior by adding some documentation, or change it :)\n\nBtw, [3] is the creation of the first \u0027self.router_namespace\u0027, which is then overridden by this line. Currently the __init__() does nothing, but if that were to change... :\u003c\n\n[1]: https://github.com/openstack/neutron/blob/e62a670e703709cda12a671b8a50056239e48800/neutron/agent/l3/dvr_edge_ha_router.py#L24\n[2]: https://github.com/openstack/neutron/blob/e62a670e703709cda12a671b8a50056239e48800/neutron/agent/l3/dvr_edge_router.py#L32\n[3]: https://github.com/openstack/neutron/blob/e62a670e703709cda12a671b8a50056239e48800/neutron/agent/l3/router_info.py#L60","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2888e23896abcb514d89d91b40d37891897c9111","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class HaRouter(router.RouterInfo):"},{"line_number":59,"context_line":"    def __init__(self, state_change_callback, *args, **kwargs):"},{"line_number":60,"context_line":"        super(HaRouter, self).__init__(*args, **kwargs)"},{"line_number":61,"context_line":"        self.router_namespace \u003d HaRouterNamespace("},{"line_number":62,"context_line":"            self.router_namespace.router_id,"},{"line_number":63,"context_line":"            self.router_namespace.agent_conf,"},{"line_number":64,"context_line":"            self.router_namespace.driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_f05341e0","line":61,"in_reply_to":"9a629dbe_bcc36588","updated":"2016-11-09 18:12:32.000000000","message":"I\u0027m for documenting that L3 HA router interface has this option set to 0. Where do you want to add it.\n\nAs per [3] - yes, it does nothing but to be capable of using reasonably RouterInfo class, it would need a major refactor.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"}],"neutron/agent/l3/keepalived_state_change.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8fdd2a97d191ddeaf8982114335d5c343a6debd0","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                    event.interface,"},{"line_number":122,"context_line":"                    ip_address,"},{"line_number":123,"context_line":"                    cfg.CONF"},{"line_number":124,"context_line":"                )"},{"line_number":125,"context_line":"            except RuntimeError as e:"},{"line_number":126,"context_line":"                LOG.warning("},{"line_number":127,"context_line":"                    _LW(\"Failed to send gratuitous ARP: %(err)s. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_a5f577cc","line":124,"updated":"2016-11-04 18:29:46.000000000","message":"So send_ip_addr_adv_notif() spawns arping in a thread, will it ever generate a RuntimeError?  Also, it will send conf.send_arp_for_ha packets, so this loop, so if it did throw, would we have multiple over-lapping threads?  So maybe the whole loop here is unnecessary if it\u0027s already trying to send enough packets?  Or it needs a new count\u003dNone arg to override the cfg param?","commit_id":"0608f434802e84e5d769e9103e0e906097b1b4c5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"504481d71258d1c1f77c10100986af848ba17d16","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                    event.interface,"},{"line_number":122,"context_line":"                    ip_address,"},{"line_number":123,"context_line":"                    cfg.CONF"},{"line_number":124,"context_line":"                )"},{"line_number":125,"context_line":"            except RuntimeError as e:"},{"line_number":126,"context_line":"                LOG.warning("},{"line_number":127,"context_line":"                    _LW(\"Failed to send gratuitous ARP: %(err)s. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_c0c7b962","line":124,"in_reply_to":"ba5da102_a5f577cc","updated":"2016-11-04 19:00:00.000000000","message":"You\u0027re right, I didn\u0027t realize there is a new thread. The loop was just to prevent failing in case the IP is not present on the interface. But anyway, if address is added and removed in while the execution gets from monitor to this point, all attempts will fail anyway. So the loop is probably useless.","commit_id":"0608f434802e84e5d769e9103e0e906097b1b4c5"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug(\u0027Notified agent router %s, state %s\u0027, self.router_id, state)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def send_garp(self, event):"},{"line_number":108,"context_line":"        \"\"\"Send gratuitous ARP for given event.\"\"\""},{"line_number":109,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":110,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_a369058e","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":17},"updated":"2016-11-07 12:02:37.000000000","message":"This will fail for IPv6 interfaces, who are also discovered by the monitor.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug(\u0027Notified agent router %s, state %s\u0027, self.router_id, state)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def send_garp(self, event):"},{"line_number":108,"context_line":"        \"\"\"Send gratuitous ARP for given event.\"\"\""},{"line_number":109,"context_line":"        ip_lib.send_ip_addr_adv_notif("},{"line_number":110,"context_line":"            self.namespace,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_76f169cd","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":17},"in_reply_to":"9a629dbe_a369058e","updated":"2016-11-07 12:19:42.000000000","message":"It won\u0027t as ip-monitor doesn\u0027t notify for ipv6 addresses.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"25ad80c318b27c229e0685aef74d6c959f5f92a3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.conf_dir \u003d conf_dir"},{"line_number":54,"context_line":"        self.interface \u003d interface"},{"line_number":55,"context_line":"        self.cidr \u003d cidr"},{"line_number":56,"context_line":"        self.monitor \u003d None"},{"line_number":57,"context_line":"        super(MonitorDaemon, self).__init__(pidfile, uuid\u003drouter_id,"},{"line_number":58,"context_line":"                                            user\u003duser, group\u003dgroup)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_d3add032","line":56,"updated":"2016-11-08 16:51:54.000000000","message":"What\u0027s this for?","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30767af8143359996ca66b6fddabb92c8a8a690d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.conf_dir \u003d conf_dir"},{"line_number":54,"context_line":"        self.interface \u003d interface"},{"line_number":55,"context_line":"        self.cidr \u003d cidr"},{"line_number":56,"context_line":"        self.monitor \u003d None"},{"line_number":57,"context_line":"        super(MonitorDaemon, self).__init__(pidfile, uuid\u003drouter_id,"},{"line_number":58,"context_line":"                                            user\u003duser, group\u003dgroup)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_ed02c40a","line":56,"in_reply_to":"9a629dbe_0d1378b9","updated":"2016-11-08 17:02:34.000000000","message":"It is in cleanup for functional tests to not leave ip-monitor hanging.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9070a9eeff6c370ab700429b112250c3022b41d9","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.conf_dir \u003d conf_dir"},{"line_number":54,"context_line":"        self.interface \u003d interface"},{"line_number":55,"context_line":"        self.cidr \u003d cidr"},{"line_number":56,"context_line":"        self.monitor \u003d None"},{"line_number":57,"context_line":"        super(MonitorDaemon, self).__init__(pidfile, uuid\u003drouter_id,"},{"line_number":58,"context_line":"                                            user\u003duser, group\u003dgroup)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_0d1378b9","line":56,"in_reply_to":"9a629dbe_8d7dc81e","updated":"2016-11-08 16:58:40.000000000","message":"Oh right. I though it\u0027s consumed from somewhere else. Apparently not.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"174fe2c22aab7e62b8fb550407fb42969ef9da86","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.conf_dir \u003d conf_dir"},{"line_number":54,"context_line":"        self.interface \u003d interface"},{"line_number":55,"context_line":"        self.cidr \u003d cidr"},{"line_number":56,"context_line":"        self.monitor \u003d None"},{"line_number":57,"context_line":"        super(MonitorDaemon, self).__init__(pidfile, uuid\u003drouter_id,"},{"line_number":58,"context_line":"                                            user\u003duser, group\u003dgroup)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_8d7dc81e","line":56,"in_reply_to":"9a629dbe_ad1c4c14","updated":"2016-11-08 16:55:55.000000000","message":"Sorry is self.monitor used outside of the run function?","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"374d48f4cc46617f92bf0863e87c593956e18740","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.conf_dir \u003d conf_dir"},{"line_number":54,"context_line":"        self.interface \u003d interface"},{"line_number":55,"context_line":"        self.cidr \u003d cidr"},{"line_number":56,"context_line":"        self.monitor \u003d None"},{"line_number":57,"context_line":"        super(MonitorDaemon, self).__init__(pidfile, uuid\u003drouter_id,"},{"line_number":58,"context_line":"                                            user\u003duser, group\u003dgroup)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_ad1c4c14","line":56,"in_reply_to":"9a629dbe_d3add032","updated":"2016-11-08 16:53:04.000000000","message":"Well, practically nothing. :) I just find it more readable to find all attributes of a class at one place.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d509c86a1f3eea0f3becf81f048908ff725a3518","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_26c171e5","line":113,"updated":"2016-11-07 18:11:38.000000000","message":"Several things:\n\n1. it won\u0027t work if send_arp_for_ha \u003d 0.\n2. on older kernels (\u003c3.19), ip_nonlocal_bind is a global setting. Let\u0027s say that there is a scenario where this setting gets \u003d 1. Then let\u0027s say the current master keepalived fails over, removing the IP address from the device, but the eventlet thread spawned by send_ip_addr_adv_notif still sends GARPs for the address, and even succeeds to do it because the global value is \u003d 1. Now, there are multiple ways the value may get to \u003d 1: the kernel may be configured to do that, or sysctl.conf has a change for that; or maybe somehow we got HA router bits on the same node as the one that handles DVR FIP namespace (not sure about that one, Brian told me it\u0027s not possible). The main point is that you may bomb network with GARPs for an address that we don\u0027t own anymore. Can you think of a way to handle that? Even with per-ns ip_nonlocal_bind setting, should we maybe guarantee it\u0027s actually \u003d 0 for the namespace?\n3. if a first GARP succeeded, but then a consequent fails because keepalived has falled back and now the node does not serve the address, the ip_lib function will report an exception in the log. Is it what we really want? Exceptions are usually discouraged in logs; and they usually indicate some very bad situation that require ops involvement. It does not seem like that\u0027s the case here, is it?","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cc0fa2a6c18d1976dca238ddbddaaa272a37fa33","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_3709992d","line":113,"in_reply_to":"9a629dbe_26c171e5","updated":"2016-11-07 19:10:54.000000000","message":"1) I think when administrator disables to send ARP, then not sending is a correct thing to do, no? :)\n\n2) I think setting ip_nolocal_bind makes sense - but also it seems that this kind of race can also happen when you add a floating ip and router fails over to a different node and execution on a different node happens prior to sending GARP on the first note -though very unlikely. I\u0027ll inspect the possibility to set ip_nonlocal_bind for ha-router namespaces - we should also keep in mind existing deployments.\n\n3) So do you think it makes more sense to modify send_ip_addr_adv_notify() to not produce exception in the logs at all? Or maybe given that this script is running outside of the l3-agent, we shouldn\u0027t even bother ourselves by spawning a new greenthread and run arping serially.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b2762601921216c1c2171b392913862aa662acdc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_93917455","line":113,"in_reply_to":"9a629dbe_33dee83f","updated":"2016-11-08 13:58:51.000000000","message":"Said that, such thing could happen to be in a follow up patch, or part of this one.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"53b320ffa6ef5715c7c4a25ea9add9619046be54","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_7c02e870","line":113,"in_reply_to":"9a629dbe_33dee83f","updated":"2016-11-08 16:11:28.000000000","message":"You mean not using arping executable at all and construct L2 broadcast packets with ARP protocol ourselves? If that part of the code will be being executed while keepalived removes VIP, how is it going to solve the race? Wouldn\u0027t we end up failing and issuing some log message as well?","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b33c12c61e90177ad9d71e07dccef1f0f7a315a9","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_963a6635","line":113,"in_reply_to":"9a629dbe_3709992d","updated":"2016-11-07 20:20:03.000000000","message":"We really have to run arping async, as there are times when we could add a lot of FIPs (restart), and waiting 3 seconds for each is really bad.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ca3ed5d65ef41422fff7682b46d018d8d47a52de","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_d7c90f7a","line":113,"in_reply_to":"9a629dbe_7c02e870","updated":"2016-11-08 16:14:12.000000000","message":"I don\u0027t think it\u0027s wise to consider constructing ARP frames ourselves. I also don\u0027t see how it solves a race. As for log message, we can handle it in current framework.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"81aeb1e2b1a07ab8e010906875c0f5f927b4804e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_a2d1cdcf","line":113,"in_reply_to":"9a629dbe_963a6635","updated":"2016-11-08 11:38:56.000000000","message":"Jakub,\n\nfor 1) I don\u0027t believe the very fact that we allow to disable a feature that breaks HA routers if disabled suggests that the arping at least in HA router case should not be configurable. I also proposed to remove the option in a next cycle at: https://review.openstack.org/#/c/394552/ (merged already). For me, it would make sense to maybe not rely on the configuration option for HA routers at least until we remove the option completely.\n\nFor 2), yeah, agreed a similar scenario probably affects other router types in similar scenarios. I guess we may cover that in a follow up as needed.\n\nFor 3), yes, I believe we should not issue an exception in the helper function. We may log.info or log.debug I guess, but in general case, arp failure does not necessarily indicate a failure because addresses are floating. In theory, we could log.exception only when the address is still on the device, but arping failed because of some other error not related to address disappearing.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e7df18daa0cd320be977d98a2f1c5c1f6dd4e112","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_9aba5709","line":113,"in_reply_to":"9a629dbe_974a32ab","updated":"2016-11-08 18:18:54.000000000","message":"I prefer if we solve the race by just forbidding GARPs with no address set (ip_nonlocal_bind). Considering the sysctl is used, I don\u0027t see a huge problem with arping. What is exactly the problem with it?","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"359b5a49f2bc764d52e3849abec63fa251a7f0bc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_dabdafd8","line":113,"in_reply_to":"9a629dbe_9aba5709","updated":"2016-11-08 18:21:10.000000000","message":"That\u0027s of course the best.\n\nBut aren\u0027t there systems where that setting is global? If those are too old and we don\u0027t care, then... of course, let\u0027s avoid the complexity.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a79fb717df1101e1da3063f6c2e462b7261b040d","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_33dee83f","line":113,"in_reply_to":"9a629dbe_a2d1cdcf","updated":"2016-11-08 13:57:40.000000000","message":"Excuse my crazy ideas, but we could get rid of the race conditions described by ihar in 3 and optimize the response time (without needing to spaw several async arppings) if we:\n\nWrote a multi-arp-ping in python, that was able to check on every iteration if the IP address is still bound to a namespace/interface or not, and take several IP addresses at once.\n\nIt shouldn\u0027t be a difficult thing.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"80d27822c076802e156a0502ad7ad295e2bc629a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_974a32ab","line":113,"in_reply_to":"9a629dbe_d7158a9b","updated":"2016-11-08 18:08:23.000000000","message":"If you have lots of VIPs, as brian said, it\u0027s very expensive and slow to call lots of arp pings one by one. You can spawn them async though.\n\nand yeah, there\u0027s still a race, but much more unlikely to happen, the next gARP wouldn\u0027t happen, and the following ones would emerge from the new keepalived master which started later.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"9348ac5eb9a09efa1d3239627e493f42ef5c9c45","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_f7fe0e6a","line":113,"in_reply_to":"9a629dbe_d7c90f7a","updated":"2016-11-08 18:02:32.000000000","message":"I disagree, and I believe it\u0027s wise, it\u0027s a rather simple thing.\n\nSuch code  would need to be a separate cmdline tool since we need to elevate permissions.\n\nAnd, before each ARP ping, it would check if the interface still has the IP address. That will prevent the gARP happening if keepalived removed the VIP and if ip_nonlocal_bind is set globally","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d3035b18a53424521f688ec8d439db9a0ff86684","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_da076f7f","line":113,"in_reply_to":"9a629dbe_dabdafd8","updated":"2016-11-08 18:23:55.000000000","message":"I was told that (by Brian) that we cannot have mixed dvr/ha router namespaces on a single node. That would be a problem (dvr requires \u003d 1, while ha would require \u003d 0, and for kernels with global value that would indeed be an issue). Assuming that, we just need to enforce \u003d 0 on creating a namespace for ha routers.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"74671d2055eba9f797a7ebff8c82f64824afacfd","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_d7158a9b","line":113,"in_reply_to":"9a629dbe_f7fe0e6a","updated":"2016-11-08 18:04:09.000000000","message":"Even if you would check before sending it, you still have a race to solve. We could as well call arping multiple times to achieve what you describe without writing an ARP tool.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e43b928749520fa531277c495dd09ce89ad4638e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.namespace,"},{"line_number":111,"context_line":"            event.interface,"},{"line_number":112,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":113,"context_line":"            cfg.CONF"},{"line_number":114,"context_line":"        )"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_f7352e46","line":113,"in_reply_to":"9a629dbe_f7fe0e6a","updated":"2016-11-08 18:03:34.000000000","message":"For reference:\n\nhttps://gist.github.com/cslarsen/11339448 (sending ETH frames from python)","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"f551e8024983cf5f7fa10c7d8890d7aecb2aa389","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                self.notify_agent(new_state)"},{"line_number":79,"context_line":"            elif event.interface !\u003d self.interface and event.added:"},{"line_number":80,"context_line":"                # All new router interfaces"},{"line_number":81,"context_line":"                self.send_garp(event)"},{"line_number":82,"context_line":"        except Exception:"},{"line_number":83,"context_line":"            LOG.exception(_LE("},{"line_number":84,"context_line":"                \u0027Failed to process or handle event for line %s\u0027), iterable)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_da7ccfed","line":81,"updated":"2016-11-08 18:25:41.000000000","message":"the discussion with Miguel in another PS made me think...\n\nnow that we send ARPs here, shouldn\u0027t we make sure somewhere that HA router namespaces have ip_nonlocal_bind \u003d 0? I know it\u0027s a default for most environments, but that can be easily changed in the future or by distro/ops via sysctl.conf.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d64f7541071fc2052899e8228bca50c1b832aade","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                self.notify_agent(new_state)"},{"line_number":79,"context_line":"            elif event.interface !\u003d self.interface and event.added:"},{"line_number":80,"context_line":"                # All new router interfaces"},{"line_number":81,"context_line":"                self.send_garp(event)"},{"line_number":82,"context_line":"        except Exception:"},{"line_number":83,"context_line":"            LOG.exception(_LE("},{"line_number":84,"context_line":"                \u0027Failed to process or handle event for line %s\u0027), iterable)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_c103e840","line":81,"in_reply_to":"9a629dbe_84abd51c","updated":"2016-11-09 11:34:11.000000000","message":"Yes, I don\u0027t want us to spam network with bag GARPs after keepalived decided to fail over to another node. That itself could leave ARP cache incorrect, depending on timing of GARPs sent now from both nodes.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ff348348d4b48dfb1ab492aff3aafe0a82ce7b7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                self.notify_agent(new_state)"},{"line_number":79,"context_line":"            elif event.interface !\u003d self.interface and event.added:"},{"line_number":80,"context_line":"                # All new router interfaces"},{"line_number":81,"context_line":"                self.send_garp(event)"},{"line_number":82,"context_line":"        except Exception:"},{"line_number":83,"context_line":"            LOG.exception(_LE("},{"line_number":84,"context_line":"                \u0027Failed to process or handle event for line %s\u0027), iterable)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_84abd51c","line":81,"in_reply_to":"9a629dbe_da7ccfed","updated":"2016-11-08 23:17:13.000000000","message":"You mean so it doesn\u0027t accidentally send an ARP for a non-local IP?  I guess the l3-agent could do it, then the dvr_fip code would undo as necessary.","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ff348348d4b48dfb1ab492aff3aafe0a82ce7b7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.namespace,"},{"line_number":110,"context_line":"            event.interface,"},{"line_number":111,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":112,"context_line":"            log_exception\u003dFalse,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_24a3e950","line":112,"updated":"2016-11-08 23:17:13.000000000","message":"trailing ,","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f25b175ba7983d8d340b7ff68e42d9a99ba5c275","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.namespace,"},{"line_number":110,"context_line":"            event.interface,"},{"line_number":111,"context_line":"            str(netaddr.IPNetwork(event.cidr).ip),"},{"line_number":112,"context_line":"            log_exception\u003dFalse,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_b65c78ee","line":112,"in_reply_to":"9a629dbe_24a3e950","updated":"2016-11-09 11:36:25.000000000","message":"This is a habit - in my previous work I was encouraged to put trailing comma, justification was that if new parameter is added, you don\u0027t need to change this line. I don\u0027t have an opinion on this. :)","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                # contain bug where gratuitous ARPs are not sent on receiving"},{"line_number":83,"context_line":"                # SIGHUP signal. This is a workaround to this bug. keepalived"},{"line_number":84,"context_line":"                # has this issue fixed since 1.2.20 but the version is not"},{"line_number":85,"context_line":"                # contained in some distributions (RHEL/CentOS). Remove this"},{"line_number":86,"context_line":"                # code once new keepalived versions are available."},{"line_number":87,"context_line":"                self.send_garp(event)"},{"line_number":88,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_7621fb9e","line":85,"range":{"start_line":85,"start_character":51,"end_line":85,"end_character":62},"updated":"2016-11-09 12:54:36.000000000","message":"(and Xenial, it has .19)","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                # REVISIT(jlibosva): keepalived versions 1.2.19 and below"},{"line_number":82,"context_line":"                # contain bug where gratuitous ARPs are not sent on receiving"},{"line_number":83,"context_line":"                # SIGHUP signal. This is a workaround to this bug. keepalived"},{"line_number":84,"context_line":"                # has this issue fixed since 1.2.20 but the version is not"},{"line_number":85,"context_line":"                # contained in some distributions (RHEL/CentOS). Remove this"},{"line_number":86,"context_line":"                # code once new keepalived versions are available."},{"line_number":87,"context_line":"                self.send_garp(event)"},{"line_number":88,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_9624cfaf","line":85,"range":{"start_line":84,"start_character":68,"end_line":85,"end_character":27},"updated":"2016-11-09 12:54:36.000000000","message":"is not packaged","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                # contain bug where gratuitous ARPs are not sent on receiving"},{"line_number":83,"context_line":"                # SIGHUP signal. This is a workaround to this bug. keepalived"},{"line_number":84,"context_line":"                # has this issue fixed since 1.2.20 but the version is not"},{"line_number":85,"context_line":"                # contained in some distributions (RHEL/CentOS). Remove this"},{"line_number":86,"context_line":"                # code once new keepalived versions are available."},{"line_number":87,"context_line":"                self.send_garp(event)"},{"line_number":88,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_2c0654ce","line":85,"range":{"start_line":85,"start_character":51,"end_line":85,"end_character":62},"in_reply_to":"9a629dbe_7621fb9e","updated":"2016-11-09 13:38:20.000000000","message":"Done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                # REVISIT(jlibosva): keepalived versions 1.2.19 and below"},{"line_number":82,"context_line":"                # contain bug where gratuitous ARPs are not sent on receiving"},{"line_number":83,"context_line":"                # SIGHUP signal. This is a workaround to this bug. keepalived"},{"line_number":84,"context_line":"                # has this issue fixed since 1.2.20 but the version is not"},{"line_number":85,"context_line":"                # contained in some distributions (RHEL/CentOS). Remove this"},{"line_number":86,"context_line":"                # code once new keepalived versions are available."},{"line_number":87,"context_line":"                self.send_garp(event)"},{"line_number":88,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_8c13e00c","line":85,"range":{"start_line":84,"start_character":68,"end_line":85,"end_character":27},"in_reply_to":"9a629dbe_9624cfaf","updated":"2016-11-09 13:38:20.000000000","message":"Done","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"}],"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3f069236c9f512139bacc240eb272f51c07ef19a","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"    ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1015,"context_line":"    try:"},{"line_number":1016,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1017,"context_line":"    except RuntimeError as rte:"},{"line_number":1018,"context_line":"        msg \u003d (\"Failed sending gratuitous ARP \""},{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_145c60ec","line":1017,"range":{"start_line":1017,"start_character":11,"end_line":1017,"end_character":23},"updated":"2016-11-08 17:32:48.000000000","message":"Why do you narrow the list of possible exceptions handled by the handler in this patch? It does not seem related.\n\nI see how execute() may raise other exceptions.","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9813ef363ffd8a33f4b835b4019ff4f42cf1cb20","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"    ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1015,"context_line":"    try:"},{"line_number":1016,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1017,"context_line":"    except RuntimeError as rte:"},{"line_number":1018,"context_line":"        msg \u003d (\"Failed sending gratuitous ARP \""},{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_175c62ec","line":1017,"range":{"start_line":1017,"start_character":11,"end_line":1017,"end_character":23},"in_reply_to":"9a629dbe_145c60ec","updated":"2016-11-08 18:13:05.000000000","message":"Done","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3f069236c9f512139bacc240eb272f51c07ef19a","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"    :param ns_name: Namespace name which GARPs are gonna be sent from."},{"line_number":1042,"context_line":"    :param iface_name: Name of interface which GARPs are gonna be sent from."},{"line_number":1043,"context_line":"    :param address: Advertised IP address."},{"line_number":1044,"context_line":"    :param count: (Optional) How many GARPs are gonna be sent. Default is 3."},{"line_number":1045,"context_line":"    \"\"\""},{"line_number":1046,"context_line":"    def arping():"},{"line_number":1047,"context_line":"        _arping(ns_name, iface_name, address, count, log_exception)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_f40fecde","line":1044,"updated":"2016-11-08 17:32:48.000000000","message":"describe the new parameter here","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9813ef363ffd8a33f4b835b4019ff4f42cf1cb20","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"    :param ns_name: Namespace name which GARPs are gonna be sent from."},{"line_number":1042,"context_line":"    :param iface_name: Name of interface which GARPs are gonna be sent from."},{"line_number":1043,"context_line":"    :param address: Advertised IP address."},{"line_number":1044,"context_line":"    :param count: (Optional) How many GARPs are gonna be sent. Default is 3."},{"line_number":1045,"context_line":"    \"\"\""},{"line_number":1046,"context_line":"    def arping():"},{"line_number":1047,"context_line":"        _arping(ns_name, iface_name, address, count, log_exception)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_576eda96","line":1044,"in_reply_to":"9a629dbe_f40fecde","updated":"2016-11-08 18:13:05.000000000","message":"Done","commit_id":"bcd9b4fc79e7657f20172a56dd05bc0a180c113d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ff348348d4b48dfb1ab492aff3aafe0a82ce7b7","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"},{"line_number":1022,"context_line":"            logger_method \u003d LOG.debug"},{"line_number":1023,"context_line":"        logger_method(msg, {\u0027addr\u0027: address,"},{"line_number":1024,"context_line":"                            \u0027iface\u0027: iface_name,"},{"line_number":1025,"context_line":"                            \u0027ns\u0027: ns_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_243f69d7","line":1022,"updated":"2016-11-08 23:17:13.000000000","message":"Or just default to LOG.warning?","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f25b175ba7983d8d340b7ff68e42d9a99ba5c275","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"},{"line_number":1022,"context_line":"            logger_method \u003d LOG.debug"},{"line_number":1023,"context_line":"        logger_method(msg, {\u0027addr\u0027: address,"},{"line_number":1024,"context_line":"                            \u0027iface\u0027: iface_name,"},{"line_number":1025,"context_line":"                            \u0027ns\u0027: ns_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_16f364d7","line":1022,"in_reply_to":"9a629dbe_243f69d7","updated":"2016-11-09 11:36:25.000000000","message":"Done","commit_id":"87a007ed3629c89b99947e6de62534849819361f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"095dc0d4509fce514da4c27b1db261cfd4c8324c","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1016,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1017,"context_line":"    except Exception as exc:"},{"line_number":1018,"context_line":"        msg \u003d (\"Failed sending gratuitous ARP \""},{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_47bd2867","line":1018,"updated":"2016-11-09 12:24:06.000000000","message":"due to the fact that we do not have the logging hint here - can we please add the generic translation _()","commit_id":"f055160dfd2c54bb361fa077e1b7977e89defb79"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"34c803db73706f2d21749e9b9b1fc6f0995aaa88","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1016,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1017,"context_line":"    except Exception as exc:"},{"line_number":1018,"context_line":"        msg \u003d (\"Failed sending gratuitous ARP \""},{"line_number":1019,"context_line":"               \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_82b56eef","line":1018,"in_reply_to":"9a629dbe_47bd2867","updated":"2016-11-09 12:39:06.000000000","message":"Done","commit_id":"f055160dfd2c54bb361fa077e1b7977e89defb79"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0a5a5f842f1f903357fcdef57a628944c03c564a","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"},{"line_number":1022,"context_line":"            logger_method \u003d LOG.warning"},{"line_number":1023,"context_line":"        logger_method(msg, {\u0027addr\u0027: address,"},{"line_number":1024,"context_line":"                            \u0027iface\u0027: iface_name,"},{"line_number":1025,"context_line":"                            \u0027ns\u0027: ns_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_f6350bda","line":1022,"range":{"start_line":1022,"start_character":28,"end_line":1022,"end_character":39},"updated":"2016-11-09 12:54:36.000000000","message":"so what\u0027s so warning about HA router failing over?","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"adfb7bc766c6ce81ab348224c76cc4a6a32bd8ad","unresolved":false,"context_lines":[{"line_number":1019,"context_line":"                \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1020,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1021,"context_line":"        if not log_exception:"},{"line_number":1022,"context_line":"            logger_method \u003d LOG.warning"},{"line_number":1023,"context_line":"        logger_method(msg, {\u0027addr\u0027: address,"},{"line_number":1024,"context_line":"                            \u0027iface\u0027: iface_name,"},{"line_number":1025,"context_line":"                            \u0027ns\u0027: ns_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a629dbe_96b84fe7","line":1022,"range":{"start_line":1022,"start_character":28,"end_line":1022,"end_character":39},"in_reply_to":"9a629dbe_f6350bda","updated":"2016-11-09 13:38:20.000000000","message":"As per guidelines, warning should inform about potential failure. As we don\u0027t catch any specific exception, a lot of things may happen in L1015 and L1016. As warning is issued on failure when adding floating ip, such failure still introduces unreachable router interface till local arp cache is invalidated. I think warning makes more sense here.","commit_id":"38cb952160704ab1858b1926e35ca9beb95bcc24"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bc7f73f5967d7d36d36257d1dd39085e2750b319","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1017,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1018,"context_line":"    except Exception as exc:"},{"line_number":1019,"context_line":"        msg \u003d _(\"Failed sending gratuitous ARP \""},{"line_number":1020,"context_line":"                \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1021,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1022,"context_line":"        if not log_exception:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_0d334515","line":1019,"range":{"start_line":1019,"start_character":8,"end_line":1019,"end_character":11},"updated":"2016-11-09 16:18:29.000000000","message":"nit: the variable \u0027msg\u0027 is hardly needed anymore.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        ip_wrapper \u003d IPWrapper(namespace\u003dns_name)"},{"line_number":1017,"context_line":"        ip_wrapper.netns.execute(arping_cmd, check_exit_code\u003dTrue)"},{"line_number":1018,"context_line":"    except Exception as exc:"},{"line_number":1019,"context_line":"        msg \u003d _(\"Failed sending gratuitous ARP \""},{"line_number":1020,"context_line":"                \"to %(addr)s on %(iface)s in namespace %(ns)s: %(err)s\")"},{"line_number":1021,"context_line":"        logger_method \u003d LOG.exception"},{"line_number":1022,"context_line":"        if not log_exception:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_d64c7aca","line":1019,"range":{"start_line":1019,"start_character":8,"end_line":1019,"end_character":11},"in_reply_to":"9a629dbe_0d334515","updated":"2016-11-09 17:19:28.000000000","message":"I don\u0027t see why should we touch this var. How was the previous better?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bc7f73f5967d7d36d36257d1dd39085e2750b319","unresolved":false,"context_lines":[{"line_number":1068,"context_line":"    return \u0027%s/64\u0027 % netaddr.EUI(mac_addr).ipv6_link_local()"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"def set_ip_nonlocal_bind(value, namespace, log_fail_as_error\u003dTrue):"},{"line_number":1072,"context_line":"    \"\"\"Set sysctl know of ip_nonlocal_bind to given value.\"\"\""},{"line_number":1073,"context_line":"    cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d%d\u0027 % (IP_NONLOCAL_BIND, value)]"},{"line_number":1074,"context_line":"    ip_wrapper \u003d IPWrapper(namespace)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_cd914df3","line":1071,"range":{"start_line":1071,"start_character":32,"end_line":1071,"end_character":41},"updated":"2016-11-09 16:18:29.000000000","message":"Can this be defaulted to None?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":1068,"context_line":"    return \u0027%s/64\u0027 % netaddr.EUI(mac_addr).ipv6_link_local()"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"def set_ip_nonlocal_bind(value, namespace, log_fail_as_error\u003dTrue):"},{"line_number":1072,"context_line":"    \"\"\"Set sysctl know of ip_nonlocal_bind to given value.\"\"\""},{"line_number":1073,"context_line":"    cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d%d\u0027 % (IP_NONLOCAL_BIND, value)]"},{"line_number":1074,"context_line":"    ip_wrapper \u003d IPWrapper(namespace)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_76d48ebc","line":1071,"range":{"start_line":1071,"start_character":32,"end_line":1071,"end_character":41},"in_reply_to":"9a629dbe_cd914df3","updated":"2016-11-09 17:19:28.000000000","message":"Done","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"bc7f73f5967d7d36d36257d1dd39085e2750b319","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"def set_ip_nonlocal_bind(value, namespace, log_fail_as_error\u003dTrue):"},{"line_number":1072,"context_line":"    \"\"\"Set sysctl know of ip_nonlocal_bind to given value.\"\"\""},{"line_number":1073,"context_line":"    cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d%d\u0027 % (IP_NONLOCAL_BIND, value)]"},{"line_number":1074,"context_line":"    ip_wrapper \u003d IPWrapper(namespace)"},{"line_number":1075,"context_line":"    ip_wrapper.netns.execute("},{"line_number":1076,"context_line":"        cmd, run_as_root\u003dTrue, log_fail_as_error\u003dlog_fail_as_error)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_6da2014d","line":1073,"range":{"start_line":1073,"start_character":56,"end_line":1073,"end_character":62},"updated":"2016-11-09 16:18:29.000000000","message":"nit: if we use int(value), calls to this function can look like \"set_ip_nonlocal_bind(value\u003dTrue)\". Alas, we are talking about kernel variables so maybe it\u0027s not a good idea. Just sayin\u0027.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"30ca71f837af385b628e4c2270a7be78173431db","unresolved":false,"context_lines":[{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"def set_ip_nonlocal_bind(value, namespace, log_fail_as_error\u003dTrue):"},{"line_number":1072,"context_line":"    \"\"\"Set sysctl know of ip_nonlocal_bind to given value.\"\"\""},{"line_number":1073,"context_line":"    cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d%d\u0027 % (IP_NONLOCAL_BIND, value)]"},{"line_number":1074,"context_line":"    ip_wrapper \u003d IPWrapper(namespace)"},{"line_number":1075,"context_line":"    ip_wrapper.netns.execute("},{"line_number":1076,"context_line":"        cmd, run_as_root\u003dTrue, log_fail_as_error\u003dlog_fail_as_error)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_1697d2ec","line":1073,"range":{"start_line":1073,"start_character":56,"end_line":1073,"end_character":62},"in_reply_to":"9a629dbe_6da2014d","updated":"2016-11-09 17:19:28.000000000","message":"It\u0027s formatted string, you can pass value\u003dTrue right as is.","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f6be214b2efb67155a9397010e5f60dee49da487","unresolved":false,"context_lines":[{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1080,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1081,"context_line":"    try:"},{"line_number":1082,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1083,"context_line":"    except RuntimeError as rte:"},{"line_number":1084,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_8291cd49","line":1081,"updated":"2016-11-10 03:25:29.000000000","message":"nit: It almost just seems like this should be in the caller, it just tries in the namespace and complains if it fails.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ae6dd1833dc5bb4a457340b40800ae58e0a4f2b9","unresolved":false,"context_lines":[{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1080,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1081,"context_line":"    try:"},{"line_number":1082,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1083,"context_line":"    except RuntimeError as rte:"},{"line_number":1084,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_cc7054df","line":1081,"in_reply_to":"9a629dbe_8291cd49","updated":"2016-11-10 07:41:00.000000000","message":"We have two places with the same code. For the sake of code reuse we do it here.\n\nI don\u0027t mind if we explicitly make it private with an underscore though.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8bf0674ff37680613e81888c3eba74ab497639cb","unresolved":false,"context_lines":[{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1080,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1081,"context_line":"    try:"},{"line_number":1082,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1083,"context_line":"    except RuntimeError as rte:"},{"line_number":1084,"context_line":"        LOG.warning("}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_7d744b35","line":1081,"in_reply_to":"9a629dbe_cc7054df","updated":"2016-11-10 10:42:46.000000000","message":"I had it that way, I also think that code dup doesn\u0027t harm here as it\u0027s not a real code dup. But at least I don\u0027t need to fix typos at two places as Ihar pointed out :)","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"351621543a295c8dfa9a7bd5e785062e20bf0da0","unresolved":false,"context_lines":[{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"def set_ip_nonlocal_bind(value, namespace\u003dNone, log_fail_as_error\u003dTrue):"},{"line_number":1072,"context_line":"    \"\"\"Set sysctl know of ip_nonlocal_bind to given value.\"\"\""},{"line_number":1073,"context_line":"    cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027, \u0027%s\u003d%d\u0027 % (IP_NONLOCAL_BIND, value)]"},{"line_number":1074,"context_line":"    ip_wrapper \u003d IPWrapper(namespace)"},{"line_number":1075,"context_line":"    ip_wrapper.netns.execute("}],"source_content_type":"text/x-python","patch_set":14,"id":"9a629dbe_b5ab5274","line":1072,"range":{"start_line":1072,"start_character":18,"end_line":1072,"end_character":22},"updated":"2016-11-10 13:41:12.000000000","message":"knob","commit_id":"a5a2efbcc9074edf3d680e811b7a210f83b70566"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0bea1df439833737d74f3ba4ee5f67a0b715a87","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"        cmd, run_as_root\u003dTrue, log_fail_as_error\u003dlog_fail_as_error)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_d25fefe2","line":1086,"updated":"2016-11-10 16:45:50.000000000","message":"nit: not sure we need \"ha\" in name as this code has no knowledge of that, plus we do it for regular snat namespaces too.","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5031157d0c662f953ebfa77ac9c0214292dc323a","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"        cmd, run_as_root\u003dTrue, log_fail_as_error\u003dlog_fail_as_error)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_12aec780","line":1086,"in_reply_to":"9a629dbe_52d03f1f","updated":"2016-11-10 16:53:02.000000000","message":"Done","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"96ffafd112aea0f658138e479e4f445f236954b5","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"        cmd, run_as_root\u003dTrue, log_fail_as_error\u003dlog_fail_as_error)"},{"line_number":1084,"context_line":""},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_52d03f1f","line":1086,"in_reply_to":"9a629dbe_d25fefe2","updated":"2016-11-10 16:48:12.000000000","message":"We do that for SNAT only because it can be HA, meaning we will attempt to send GARPs there too (in some cases).","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0bea1df439833737d74f3ba4ee5f67a0b715a87","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1090,"context_line":"    except RuntimeError as rte:"},{"line_number":1091,"context_line":"        LOG.warning("},{"line_number":1092,"context_line":"            _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err)s It \""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_b42a6b8e","line":1089,"updated":"2016-11-10 16:45:50.000000000","message":"Do we want to pass log_fail_as_error\u003dFalse here?","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5031157d0c662f953ebfa77ac9c0214292dc323a","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1090,"context_line":"    except RuntimeError as rte:"},{"line_number":1091,"context_line":"        LOG.warning("},{"line_number":1092,"context_line":"            _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err)s It \""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_f2e313d7","line":1089,"in_reply_to":"9a629dbe_72a2a39a","updated":"2016-11-10 16:53:02.000000000","message":"Done","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"32ad5360d59d0b234dec9be3b88812f74b031fb0","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"def set_ip_nonlocal_bind_for_ha_namespace(namespace):"},{"line_number":1087,"context_line":"    \"\"\"Set ip_nonlocal_bind but don\u0027t raise exception on failure.\"\"\""},{"line_number":1088,"context_line":"    try:"},{"line_number":1089,"context_line":"        set_ip_nonlocal_bind(value\u003d0, namespace\u003dnamespace)"},{"line_number":1090,"context_line":"    except RuntimeError as rte:"},{"line_number":1091,"context_line":"        LOG.warning("},{"line_number":1092,"context_line":"            _LW(\"Setting %(knob)s\u003d0 in namespace %(ns)s failed: %(err)s It \""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_72a2a39a","line":1089,"in_reply_to":"9a629dbe_b42a6b8e","updated":"2016-11-10 16:49:35.000000000","message":"Yeah, probably","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"}],"neutron/tests/contrib/functional-testing.filters":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"82fe279b0ab5b1bb5b87a0992ca8325daa482017","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# needed for TestGetRootHelperChildPid"},{"line_number":42,"context_line":"bash_filter: RegExpFilter, /bin/bash, root, bash, -c, \\(sleep 100\\)"},{"line_number":43,"context_line":"sleep_kill: KillFilter, root, sleep, -9"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# needed for TestMonitorDaemon"},{"line_number":46,"context_line":"arp_filter: CommandFilter, arp, root"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a629dbe_b26a1f19","line":46,"range":{"start_line":44,"start_character":0,"end_line":46,"end_character":36},"updated":"2016-11-07 16:46:05.000000000","message":"Argh, not needed.","commit_id":"122369464c3e120f08b1c19b8ccce8b5ec073f5a"}],"neutron/tests/functional/agent/l3/test_ha_router.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04901fc670a6275e803d099d22e6a6b92a1d9379","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.agent._process_updated_router(router1.router)"},{"line_number":287,"context_line":"        common_utils.wait_until_true(lambda: router1.ha_state \u003d\u003d \u0027master\u0027)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_ha_router_namespace_has_ip_nonlocal_bind_disabled(self):"},{"line_number":290,"context_line":"        router_info \u003d self.generate_router_info(enable_ha\u003dTrue)"},{"line_number":291,"context_line":"        router \u003d self.manage_router(self.agent, router_info)"},{"line_number":292,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(router.router_namespace.name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_cd014db1","line":289,"updated":"2016-11-09 16:04:26.000000000","message":"a similar test for SnatNamespace?","commit_id":"6c0559efa33a6213aed276c916341a13494286f3"}],"neutron/tests/functional/agent/l3/test_keepalived_state_change.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        [\u0027arp\u0027, \u0027-na\u0027], run_as_root\u003dTrue).splitlines()"},{"line_number":43,"context_line":"    for line in arp_output:"},{"line_number":44,"context_line":"        items \u003d line.split()"},{"line_number":45,"context_line":"        ip_address \u003d items[1].strip(\u0027()\u0027)"},{"line_number":46,"context_line":"        mac \u003d items[3]"},{"line_number":47,"context_line":"        yield ip_address, mac"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_e3305da1","line":45,"range":{"start_line":45,"start_character":21,"end_line":45,"end_character":29},"updated":"2016-11-07 12:02:37.000000000","message":"Please, for the love of God, lets use regex for this :\u003c","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        [\u0027arp\u0027, \u0027-na\u0027], run_as_root\u003dTrue).splitlines()"},{"line_number":43,"context_line":"    for line in arp_output:"},{"line_number":44,"context_line":"        items \u003d line.split()"},{"line_number":45,"context_line":"        ip_address \u003d items[1].strip(\u0027()\u0027)"},{"line_number":46,"context_line":"        mac \u003d items[3]"},{"line_number":47,"context_line":"        yield ip_address, mac"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_b6d22133","line":45,"range":{"start_line":45,"start_character":21,"end_line":45,"end_character":29},"in_reply_to":"9a629dbe_e3305da1","updated":"2016-11-07 12:19:42.000000000","message":"I find this solution simpler less error prone - regexp for this line will be less readable and too complex.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def has_expected_arp_entry(namespace, ip, mac):"},{"line_number":51,"context_line":"    for ip_mac_pair in get_arp_ip_mac_pairs(namespace):"},{"line_number":52,"context_line":"        if ip_mac_pair \u003d\u003d (ip, mac):"},{"line_number":53,"context_line":"            return True"},{"line_number":54,"context_line":"    return False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class TestKeepalivedStateChange(base.BaseSudoTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_e3d77d21","line":54,"range":{"start_line":51,"start_character":4,"end_line":54,"end_character":16},"updated":"2016-11-07 12:02:37.000000000","message":"return (ip, mac) in get_arp_ip_mac_pairs(namespace)","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def has_expected_arp_entry(namespace, ip, mac):"},{"line_number":51,"context_line":"    for ip_mac_pair in get_arp_ip_mac_pairs(namespace):"},{"line_number":52,"context_line":"        if ip_mac_pair \u003d\u003d (ip, mac):"},{"line_number":53,"context_line":"            return True"},{"line_number":54,"context_line":"    return False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class TestKeepalivedStateChange(base.BaseSudoTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_56c1c57f","line":54,"range":{"start_line":51,"start_character":4,"end_line":54,"end_character":16},"in_reply_to":"9a629dbe_e3d77d21","updated":"2016-11-07 12:19:42.000000000","message":"Done","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        monitor \u003d keepalived_state_change.MonitorDaemon("},{"line_number":114,"context_line":"            self.get_temp_file_path(\u0027monitor.pid\u0027),"},{"line_number":115,"context_line":"            uuidutils.generate_uuid(),"},{"line_number":116,"context_line":"            1,"},{"line_number":117,"context_line":"            2,"},{"line_number":118,"context_line":"            self.router.namespace,"},{"line_number":119,"context_line":"            conf_dir,"},{"line_number":120,"context_line":"            \u0027foo-iface\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_239ed556","line":117,"range":{"start_line":116,"start_character":12,"end_line":117,"end_character":14},"updated":"2016-11-07 12:02:37.000000000","message":"What do these mean?","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        monitor \u003d keepalived_state_change.MonitorDaemon("},{"line_number":114,"context_line":"            self.get_temp_file_path(\u0027monitor.pid\u0027),"},{"line_number":115,"context_line":"            uuidutils.generate_uuid(),"},{"line_number":116,"context_line":"            1,"},{"line_number":117,"context_line":"            2,"},{"line_number":118,"context_line":"            self.router.namespace,"},{"line_number":119,"context_line":"            conf_dir,"},{"line_number":120,"context_line":"            \u0027foo-iface\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_96b6fd3b","line":117,"range":{"start_line":116,"start_character":12,"end_line":117,"end_character":14},"in_reply_to":"9a629dbe_239ed556","updated":"2016-11-07 12:19:42.000000000","message":"User and group. It\u0027s not used, took it from L69","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027foo-iface\u0027,"},{"line_number":121,"context_line":"            self.machines.ip_cidr"},{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_e3e13dd2","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":21},"updated":"2016-11-07 12:02:37.000000000","message":"This variable is not needed.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027foo-iface\u0027,"},{"line_number":121,"context_line":"            self.machines.ip_cidr"},{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_56daa579","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":21},"in_reply_to":"9a629dbe_e3e13dd2","updated":"2016-11-07 12:19:42.000000000","message":"Done, though eventlet docs recommend to not pass parameters.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"762427c4a9f783e64df5cacb256ee745dcbe630f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"},{"line_number":127,"context_line":"        utils.wait_until_true(monitor_started)"},{"line_number":128,"context_line":"        self.addCleanup(monitor.monitor.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_a3d8251f","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":23},"updated":"2016-11-07 12:02:37.000000000","message":"This variable is also not needed.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"1d56d0a943286ddf3c8eb9fee4ad7e1d0a8ae51b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"},{"line_number":127,"context_line":"        utils.wait_until_true(monitor_started)"},{"line_number":128,"context_line":"        self.addCleanup(monitor.monitor.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_945515c8","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":23},"in_reply_to":"9a629dbe_16cf4db1","updated":"2016-11-07 13:05:57.000000000","message":"One can use:\n\n utils.wait_until_true(\n     functools.partial(\n         lambda mon: mon.monitor is not None, monitor))\n\nThis won\u0027t require the \u0027monitor_started\u0027 variable. It\u0027s a nit, really.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cfdda6801795e7e33427030703929665d6575235","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"},{"line_number":127,"context_line":"        utils.wait_until_true(monitor_started)"},{"line_number":128,"context_line":"        self.addCleanup(monitor.monitor.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_8f9fc05e","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":23},"in_reply_to":"9a629dbe_945515c8","updated":"2016-11-07 13:29:34.000000000","message":"I find \"wait_until_true(monitor_started)\" more readable.","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0179d34251109b514a6e01f4a36947c1534d5ff","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":"        monitor_start \u003d functools.partial(monitor.run, run_as_root\u003dTrue)"},{"line_number":124,"context_line":"        eventlet.spawn_n(monitor_start)"},{"line_number":125,"context_line":"        monitor_started \u003d functools.partial("},{"line_number":126,"context_line":"            lambda mon: mon.monitor is not None, monitor)"},{"line_number":127,"context_line":"        utils.wait_until_true(monitor_started)"},{"line_number":128,"context_line":"        self.addCleanup(monitor.monitor.stop)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_16cf4db1","line":125,"range":{"start_line":125,"start_character":8,"end_line":125,"end_character":23},"in_reply_to":"9a629dbe_a3d8251f","updated":"2016-11-07 12:19:42.000000000","message":"Can you please elaborate?","commit_id":"a73296e2da087f6c95a9abd29c452ca6531983f2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"332fed863e41a14ea7026f392828a2f9ca2667a4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        items \u003d line.split()"},{"line_number":45,"context_line":"        ip_address \u003d items[1].strip(\u0027()\u0027)"},{"line_number":46,"context_line":"        mac \u003d items[3]"},{"line_number":47,"context_line":"        yield ip_address, mac"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def has_expected_arp_entry(namespace, ip, mac):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_c3e42c3d","line":47,"updated":"2016-11-07 16:04:54.000000000","message":"You could also use the IPDevice class, which has both link and neigh commands, assuming we had the interface name.  I guess at a minimum I would use \u0027ip -4 neigh...\u0027 instead of arp just to not install another command filter.","commit_id":"16e22627c4bf0c69db6c18d5747dc20d49515b7e"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e13e592ab8846f1fccd6f4fa9bce44e2920b6d2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        items \u003d line.split()"},{"line_number":45,"context_line":"        ip_address \u003d items[1].strip(\u0027()\u0027)"},{"line_number":46,"context_line":"        mac \u003d items[3]"},{"line_number":47,"context_line":"        yield ip_address, mac"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def has_expected_arp_entry(namespace, ip, mac):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_63f8c07d","line":47,"in_reply_to":"9a629dbe_c3e42c3d","updated":"2016-11-07 16:11:01.000000000","message":"Will investigate, thanks","commit_id":"16e22627c4bf0c69db6c18d5747dc20d49515b7e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"332fed863e41a14ea7026f392828a2f9ca2667a4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            2,"},{"line_number":115,"context_line":"            self.router.namespace,"},{"line_number":116,"context_line":"            conf_dir,"},{"line_number":117,"context_line":"            \u0027foo-iface\u0027,"},{"line_number":118,"context_line":"            self.machines.ip_cidr"},{"line_number":119,"context_line":"        )"},{"line_number":120,"context_line":"        eventlet.spawn_n(monitor.run, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_e39a10c5","line":117,"updated":"2016-11-07 16:04:54.000000000","message":"So is this the interface name?","commit_id":"16e22627c4bf0c69db6c18d5747dc20d49515b7e"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e13e592ab8846f1fccd6f4fa9bce44e2920b6d2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            2,"},{"line_number":115,"context_line":"            self.router.namespace,"},{"line_number":116,"context_line":"            conf_dir,"},{"line_number":117,"context_line":"            \u0027foo-iface\u0027,"},{"line_number":118,"context_line":"            self.machines.ip_cidr"},{"line_number":119,"context_line":"        )"},{"line_number":120,"context_line":"        eventlet.spawn_n(monitor.run, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_83ceb458","line":117,"in_reply_to":"9a629dbe_e39a10c5","updated":"2016-11-07 16:11:01.000000000","message":"yes, but that\u0027s not used - as the MonitorDaemon uses ha_\u003chash\u003e interfaces so there must be some interface that is *not* supposed to send garps when new ip is added.","commit_id":"16e22627c4bf0c69db6c18d5747dc20d49515b7e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ceec26a8e5c9352dfe1f72816c500703118cae18","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    device \u003d ip_lib.IPDevice(device_name, namespace)"},{"line_number":47,"context_line":"    for entry in device.neigh.show(ip_version\u003d4).splitlines():"},{"line_number":48,"context_line":"        match \u003d IPV4_NEIGH_REGEXP.match(entry)"},{"line_number":49,"context_line":"        if match:"},{"line_number":50,"context_line":"            yield match.group(\u0027ip\u0027), match.group(\u0027mac\u0027)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_75cf91b0","line":48,"updated":"2016-11-07 16:55:44.000000000","message":"Will the occasional failed entry blow this up?\n\n10.1.1.1 lladdr 08:00:27:27:c6:2a REACHABLE\n10.1.1.126  FAILED","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b72a81a0071b15e5c12d2c252144defdd879bfea","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    device \u003d ip_lib.IPDevice(device_name, namespace)"},{"line_number":47,"context_line":"    for entry in device.neigh.show(ip_version\u003d4).splitlines():"},{"line_number":48,"context_line":"        match \u003d IPV4_NEIGH_REGEXP.match(entry)"},{"line_number":49,"context_line":"        if match:"},{"line_number":50,"context_line":"            yield match.group(\u0027ip\u0027), match.group(\u0027mac\u0027)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_a89390a2","line":48,"in_reply_to":"9a629dbe_35cc3935","updated":"2016-11-07 17:13:56.000000000","message":"Ok, if it doesn\u0027t yield when no MAC is present it should be fine.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"cc3c9d3f3a63cb9df65a3cf7b294d203a126ffaf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    device \u003d ip_lib.IPDevice(device_name, namespace)"},{"line_number":47,"context_line":"    for entry in device.neigh.show(ip_version\u003d4).splitlines():"},{"line_number":48,"context_line":"        match \u003d IPV4_NEIGH_REGEXP.match(entry)"},{"line_number":49,"context_line":"        if match:"},{"line_number":50,"context_line":"            yield match.group(\u0027ip\u0027), match.group(\u0027mac\u0027)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_35cc3935","line":48,"in_reply_to":"9a629dbe_75cf91b0","updated":"2016-11-07 17:05:51.000000000","message":"The first one will return the pair, second one won\u0027t match I guess. note it is used only in this test where at first it parses \"192.168.0.4 INCOMPLETE\" and doesn\u0027t yield anything.","commit_id":"388b19f460aed3688dcae9ddd4e875d33c71e632"}],"neutron/tests/unit/agent/linux/test_ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0bea1df439833737d74f3ba4ee5f67a0b715a87","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"        \"\"\"Make sure message is formatted correctly.\"\"\""},{"line_number":1386,"context_line":"        with mock.patch.object("},{"line_number":1387,"context_line":"                ip_lib, \u0027set_ip_nonlocal_bind\u0027, side_effect\u003dRuntimeError):"},{"line_number":1388,"context_line":"            ip_lib.set_ip_nonlocal_bind_for_ha_namespace(\u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_f77a2587","line":1388,"updated":"2016-11-10 16:45:50.000000000","message":"Seems there should be an assert here?","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fb7cd3b389dee99089237d747d0d432bdc4691d2","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"        \"\"\"Make sure message is formatted correctly.\"\"\""},{"line_number":1386,"context_line":"        with mock.patch.object("},{"line_number":1387,"context_line":"                ip_lib, \u0027set_ip_nonlocal_bind\u0027, side_effect\u003dRuntimeError):"},{"line_number":1388,"context_line":"            ip_lib.set_ip_nonlocal_bind_for_ha_namespace(\u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_12424768","line":1388,"in_reply_to":"9a629dbe_72946342","updated":"2016-11-10 16:59:49.000000000","message":"Ok.","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"96ffafd112aea0f658138e479e4f445f236954b5","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"        \"\"\"Make sure message is formatted correctly.\"\"\""},{"line_number":1386,"context_line":"        with mock.patch.object("},{"line_number":1387,"context_line":"                ip_lib, \u0027set_ip_nonlocal_bind\u0027, side_effect\u003dRuntimeError):"},{"line_number":1388,"context_line":"            ip_lib.set_ip_nonlocal_bind_for_ha_namespace(\u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_f2a793ba","line":1388,"in_reply_to":"9a629dbe_f77a2587","updated":"2016-11-10 16:48:12.000000000","message":"No I think it just validates that the function does not crash.","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"32ad5360d59d0b234dec9be3b88812f74b031fb0","unresolved":false,"context_lines":[{"line_number":1385,"context_line":"        \"\"\"Make sure message is formatted correctly.\"\"\""},{"line_number":1386,"context_line":"        with mock.patch.object("},{"line_number":1387,"context_line":"                ip_lib, \u0027set_ip_nonlocal_bind\u0027, side_effect\u003dRuntimeError):"},{"line_number":1388,"context_line":"            ip_lib.set_ip_nonlocal_bind_for_ha_namespace(\u0027foo\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_72946342","line":1388,"in_reply_to":"9a629dbe_f77a2587","updated":"2016-11-10 16:49:35.000000000","message":"No, this is just to make that code that formats executed :) If there would be a typo or something, it would raise an exception.","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"}],"releasenotes/notes/sending-garp-for-l3-ha-c118871833ad8743.yaml":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2bc4219a42c7bc7129e0a5c540d8726061dfa928","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Sending gratuitous ARPs for interfaces without IP"},{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_3cbd95b7","line":3,"updated":"2016-11-09 17:56:59.000000000","message":"I think prelude is not the right place (prelude is a header for general release notes); I think bugs: is a better place.","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8bf0674ff37680613e81888c3eba74ab497639cb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Sending gratuitous ARPs for interfaces without IP"},{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_f8794983","line":3,"in_reply_to":"9a629dbe_0c77acd3","updated":"2016-11-10 10:42:46.000000000","message":"Done","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e19dc998a3e96e6185d86d4907f25def7e68d32","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Sending gratuitous ARPs for interfaces without IP"},{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_fc44fdb7","line":3,"in_reply_to":"9a629dbe_3cbd95b7","updated":"2016-11-09 17:59:16.000000000","message":"Done","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ad862371ccfeabe99305e3f68d71a9c6ffb29580","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Sending gratuitous ARPs for interfaces without IP"},{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_5c3969f1","line":3,"in_reply_to":"9a629dbe_3cbd95b7","updated":"2016-11-09 18:06:07.000000000","message":"I didn\u0027t find such section. Should I leave the \u0027issues\u0027 only here?","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ae6dd1833dc5bb4a457340b40800ae58e0a4f2b9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Sending gratuitous ARPs for interfaces without IP"},{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_0c77acd3","line":3,"in_reply_to":"9a629dbe_5c3969f1","updated":"2016-11-10 07:41:00.000000000","message":"Was it fixes?..","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f6be214b2efb67155a9397010e5f60dee49da487","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"},{"line_number":7,"context_line":"    a per-namespace kernel option. L3 HA uses this option"},{"line_number":8,"context_line":"    to avoid sending gratuitous ARPs for IP addresses that"},{"line_number":9,"context_line":"    were removed while processing. If this happens then"},{"line_number":10,"context_line":"    gratuitous ARPs are going to be sent which might populate"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_62d759ed","line":7,"updated":"2016-11-10 03:25:29.000000000","message":"s/uses this option/sets this option to 0 (or zero?)","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8bf0674ff37680613e81888c3eba74ab497639cb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    addresses in L3 HA environments."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - In kernels \u003c 3.19 net.ipv4.ip_nonlocal_bind was not"},{"line_number":7,"context_line":"    a per-namespace kernel option. L3 HA uses this option"},{"line_number":8,"context_line":"    to avoid sending gratuitous ARPs for IP addresses that"},{"line_number":9,"context_line":"    were removed while processing. If this happens then"},{"line_number":10,"context_line":"    gratuitous ARPs are going to be sent which might populate"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_7da8cb20","line":7,"in_reply_to":"9a629dbe_62d759ed","updated":"2016-11-10 10:42:46.000000000","message":"Done","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f6be214b2efb67155a9397010e5f60dee49da487","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    to avoid sending gratuitous ARPs for IP addresses that"},{"line_number":9,"context_line":"    were removed while processing. If this happens then"},{"line_number":10,"context_line":"    gratuitous ARPs are going to be sent which might populate"},{"line_number":11,"context_line":"    ARP caches of peer machines with wrong MAC address."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_c2ae6580","line":11,"updated":"2016-11-10 03:25:29.000000000","message":"s/with/with the","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"8bf0674ff37680613e81888c3eba74ab497639cb","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    to avoid sending gratuitous ARPs for IP addresses that"},{"line_number":9,"context_line":"    were removed while processing. If this happens then"},{"line_number":10,"context_line":"    gratuitous ARPs are going to be sent which might populate"},{"line_number":11,"context_line":"    ARP caches of peer machines with wrong MAC address."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a629dbe_9da59f48","line":11,"in_reply_to":"9a629dbe_c2ae6580","updated":"2016-11-10 10:42:46.000000000","message":"Done","commit_id":"ed41be601d35f3c729c6e1e948efc7a02be24544"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0bea1df439833737d74f3ba4ee5f67a0b715a87","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    gratuitous ARPs are going to be sent which might populate"},{"line_number":8,"context_line":"    ARP caches of peer machines with the wrong MAC address."},{"line_number":9,"context_line":"fixes:"},{"line_number":10,"context_line":"  - Versions of keepalived \u003c 1.2.20 don\u0027t send gratuitous ARP"},{"line_number":11,"context_line":"    when keepalived process receives SIGHUP signal. These"},{"line_number":12,"context_line":"    versions are not packaged in some Linux distributions like"},{"line_number":13,"context_line":"    RHEL, CentOS or Ubuntu Xenial. Not sending gratuitous ARP"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a629dbe_57b11146","line":10,"updated":"2016-11-10 16:45:50.000000000","message":"s/ARP/ARPs\n\nbelow as well","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5031157d0c662f953ebfa77ac9c0214292dc323a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    gratuitous ARPs are going to be sent which might populate"},{"line_number":8,"context_line":"    ARP caches of peer machines with the wrong MAC address."},{"line_number":9,"context_line":"fixes:"},{"line_number":10,"context_line":"  - Versions of keepalived \u003c 1.2.20 don\u0027t send gratuitous ARP"},{"line_number":11,"context_line":"    when keepalived process receives SIGHUP signal. These"},{"line_number":12,"context_line":"    versions are not packaged in some Linux distributions like"},{"line_number":13,"context_line":"    RHEL, CentOS or Ubuntu Xenial. Not sending gratuitous ARP"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9a629dbe_12e5e7da","line":10,"in_reply_to":"9a629dbe_57b11146","updated":"2016-11-10 16:53:02.000000000","message":"Done","commit_id":"567bb05a5feeff8f7bdd7639a773ae90f545d2a6"}]}
