)]}'
{"neutron/cmd/sanity/checks.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7c380f581a5e6000c73596b2a4be9b91c485fec0","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    original_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dNone)"},{"line_number":446,"context_line":"    try:"},{"line_number":447,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d0, namespace\u003dnsname1)"},{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"},{"line_number":449,"context_line":"        ns1_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dnsname1)"},{"line_number":450,"context_line":"    finally:"},{"line_number":451,"context_line":"        ipw.netns.delete(nsname1)"},{"line_number":452,"context_line":"        ipw.netns.delete(nsname2)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_7efb57c1","line":449,"range":{"start_line":448,"start_character":0,"end_line":449,"end_character":66},"updated":"2016-11-10 14:22:30.000000000","message":"Maybe these should be moved to L453","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"75b8605d43c5855e4508486918568223da7884a3","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    original_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dNone)"},{"line_number":446,"context_line":"    try:"},{"line_number":447,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d0, namespace\u003dnsname1)"},{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"},{"line_number":449,"context_line":"        ns1_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dnsname1)"},{"line_number":450,"context_line":"    finally:"},{"line_number":451,"context_line":"        ipw.netns.delete(nsname1)"},{"line_number":452,"context_line":"        ipw.netns.delete(nsname2)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_5803560f","line":449,"range":{"start_line":448,"start_character":0,"end_line":449,"end_character":66},"in_reply_to":"9a629dbe_7efb57c1","updated":"2016-11-16 17:04:26.000000000","message":"No, this is fine","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ea75280f0f6cf014e52b743db5da7467259c7151","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"},{"line_number":443,"context_line":"    ipw.netns.add(nsname1)"},{"line_number":444,"context_line":"    ipw.netns.add(nsname2)"},{"line_number":445,"context_line":"    original_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dNone)"},{"line_number":446,"context_line":"    try:"},{"line_number":447,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d0, namespace\u003dnsname1)"},{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_7fa7b50a","line":445,"updated":"2016-11-18 13:13:18.000000000","message":"that\u0027s actually quite scary. I was always thinking of the sanity-check tool as a tool that is safe to execute during normal deployment operation. But here, you potentially mess with global values that may affect routers running on the node.","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0f048d872f559f77e402e8f2293589bd80bedca0","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"},{"line_number":443,"context_line":"    ipw.netns.add(nsname1)"},{"line_number":444,"context_line":"    ipw.netns.add(nsname2)"},{"line_number":445,"context_line":"    original_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dNone)"},{"line_number":446,"context_line":"    try:"},{"line_number":447,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d0, namespace\u003dnsname1)"},{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_bfcf8d54","line":445,"in_reply_to":"7a77a97e_7fa7b50a","updated":"2016-11-18 13:29:33.000000000","message":"Yeah, but it messes with the var only on systems that are potentially broken. Correct setups won\u0027t get the value changed.","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ea75280f0f6cf014e52b743db5da7467259c7151","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"},{"line_number":449,"context_line":"        ns1_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dnsname1)"},{"line_number":450,"context_line":"    finally:"},{"line_number":451,"context_line":"        ipw.netns.delete(nsname1)"},{"line_number":452,"context_line":"        ipw.netns.delete(nsname2)"},{"line_number":453,"context_line":"    ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":454,"context_line":"    return ns1_value \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_3f7a9d88","line":451,"updated":"2016-11-18 13:13:18.000000000","message":"I think there is an issue in the code that may leave namespaces not cleaned up. like lines 444-445 failing.","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0f048d872f559f77e402e8f2293589bd80bedca0","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003d1, namespace\u003dnsname2)"},{"line_number":449,"context_line":"        ns1_value \u003d ip_lib.get_ip_nonlocal_bind(namespace\u003dnsname1)"},{"line_number":450,"context_line":"    finally:"},{"line_number":451,"context_line":"        ipw.netns.delete(nsname1)"},{"line_number":452,"context_line":"        ipw.netns.delete(nsname2)"},{"line_number":453,"context_line":"    ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":454,"context_line":"    return ns1_value \u003d\u003d 0"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_c23f0cb2","line":451,"in_reply_to":"7a77a97e_3f7a9d88","updated":"2016-11-18 13:29:33.000000000","message":"Done","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"201b2e1a5798a1dc3e92dde5766ede38036af791","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"def ip_nonlocal_bind():"},{"line_number":446,"context_line":"    ipw \u003d ip_lib.IPWrapper()"},{"line_number":447,"context_line":"    nsname1 \u003d \"ipnonlocalbind1-\" + uuidutils.generate_uuid()"},{"line_number":448,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_22b883e5","line":445,"updated":"2016-11-21 12:50:57.000000000","message":"I get the sentiment, but santity checks aren\u0027t tests. They are code executed by users.\n\nI think the one functional test exercising it is probably okay in this case. It looks more complex than it is, the only line not exercised in a normal run is the RuntimeError exception handler.","commit_id":"7e8f9d490c1cb7f843497eb13637e3209d2e9fdf"},{"author":{"_account_id":16934,"name":"Martin Roy","email":"lindycoder@gmail.com","username":"lindycoder"},"change_message_id":"6eb73f277b280b2d1546a126c60bbc414187ba45","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"def ip_nonlocal_bind():"},{"line_number":446,"context_line":"    ipw \u003d ip_lib.IPWrapper()"},{"line_number":447,"context_line":"    nsname1 \u003d \"ipnonlocalbind1-\" + uuidutils.generate_uuid()"},{"line_number":448,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_3992b24c","line":445,"updated":"2016-11-18 16:44:46.000000000","message":"There a lot of logic in here and i don\u0027t see a test suite associated with it.\n\nThere is the test_sanity that makes sure it does not throw an exception yes but i\u0027d say a test suite covering all cases would probably be worth it","commit_id":"7e8f9d490c1cb7f843497eb13637e3209d2e9fdf"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"19e46290c49cbcca134ed1481f5e4a4f33aaad27","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"def ip_nonlocal_bind():"},{"line_number":446,"context_line":"    ipw \u003d ip_lib.IPWrapper()"},{"line_number":447,"context_line":"    nsname1 \u003d \"ipnonlocalbind1-\" + uuidutils.generate_uuid()"},{"line_number":448,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_8da7fc09","line":445,"in_reply_to":"7a77a97e_3992b24c","updated":"2016-11-18 17:55:26.000000000","message":"I am not generally a fan of writing tests for tests.","commit_id":"7e8f9d490c1cb7f843497eb13637e3209d2e9fdf"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"676715149f727a5f9ba331e55757fab98fc17bc2","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        ip_lib.set_ip_nonlocal_bind(value\u003doriginal_value, namespace\u003dNone)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"def ip_nonlocal_bind():"},{"line_number":446,"context_line":"    ipw \u003d ip_lib.IPWrapper()"},{"line_number":447,"context_line":"    nsname1 \u003d \"ipnonlocalbind1-\" + uuidutils.generate_uuid()"},{"line_number":448,"context_line":"    nsname2 \u003d \"ipnonlocalbind2-\" + uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_c8a4744c","line":445,"in_reply_to":"7a77a97e_8da7fc09","updated":"2016-11-19 11:57:21.000000000","message":"I agree with Terry. If there is a bug in the code in case this test fails, the outcome will be that the path of failure fails too. At the end, there will be a failure reported which is a purpose of this test.","commit_id":"7e8f9d490c1cb7f843497eb13637e3209d2e9fdf"}],"neutron/cmd/sanity_check.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c19d7e74918bf75b086755a58da13afed0adb57e","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_74d0d3f6","line":271,"updated":"2016-11-10 16:15:05.000000000","message":"Hm, at this point, should we maybe drop any code to support older kernels?","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"75b8605d43c5855e4508486918568223da7884a3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_58f9964c","line":271,"in_reply_to":"9a629dbe_37157d48","updated":"2016-11-16 17:04:26.000000000","message":"We talked with Ihar f2f and dropping support of older kernels can be a different patch as it\u0027s not strictly related to adding sanity checks.","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"5addd81b2e88af6faa727fc00557a52e5b8f4238","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_f73dc58f","line":271,"in_reply_to":"9a629dbe_74d0d3f6","updated":"2016-11-10 16:28:12.000000000","message":"You mean to remove those except when setting of ip_nonlocal_bind fails?\n\nI\u0027m also not sure that 3.19 is the correct version, that doesn\u0027t fail and doesn\u0027t silently ignore namespaces. I took it only based from discussions but haven\u0027t seen any bugfix.","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7b1f68d1955423406635eebbb959b779e7bf460c","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_37157d48","line":271,"in_reply_to":"9a629dbe_f73dc58f","updated":"2016-11-10 16:38:53.000000000","message":"It\u0027s enough for the message to say it\u0027s 3.19. Distributions can always execute the tool and backport missing kernel patches if need be.\n\nWhat I say is that maybe it\u0027s time (Ocata) to drop support for kernels that would fail the check, from DVR/HA/SNAT code.","commit_id":"2d58a05ac41835d0a51e614dcbb20282679b6634"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ea75280f0f6cf014e52b743db5da7467259c7151","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    result \u003d checks.ip_nonlocal_bind()"},{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_9fe0112b","line":270,"range":{"start_line":270,"start_character":48,"end_line":270,"end_character":71},"updated":"2016-11-18 13:13:18.000000000","message":"I don\u0027t think it\u0027s the goal of the tool to help with functional tests. But ok.","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0f048d872f559f77e402e8f2293589bd80bedca0","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    result \u003d checks.ip_nonlocal_bind()"},{"line_number":268,"context_line":"    if not result:"},{"line_number":269,"context_line":"        LOG.error(_LE(\u0027This kernel does not isolate ip_nonlocal_bind kernel \u0027"},{"line_number":270,"context_line":"                      \u0027option. It may introduce functional tests races and \u0027"},{"line_number":271,"context_line":"                      \u0027malfunction of L3 HA + DVR setup on this node. Please \u0027"},{"line_number":272,"context_line":"                      \u0027update to kernel version \u003e 3.19.\u0027))"},{"line_number":273,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_626d58cb","line":270,"range":{"start_line":270,"start_character":48,"end_line":270,"end_character":71},"in_reply_to":"7a77a97e_9fe0112b","updated":"2016-11-18 13:29:33.000000000","message":"Done","commit_id":"38ecd0f050694ffd4bb7b1b4b65ba633f87efc56"}]}
