)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"ae404820ab88ab90f019eb65f1490b83e91c9265","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes for Linux Bridge in the L3 agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This extracts part of the work done by Jens Rosenboom, and is required"},{"line_number":10,"context_line":"for Linux Bridge testing at the gate."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1a36cad0fb790aaa37417a1176576293e4f2c87f"},{"line_number":13,"context_line":"Co-Authored-By: Jens Rosenboom \u003cj.rosenboom@x-ion.de\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa32b979_54fbd778","line":10,"updated":"2015-06-19 04:19:21.000000000","message":"could you please explain *what* it\u0027s doing (as well as why, that gives good context, but looking at this i have no idea)","commit_id":"8b01684080920dfbcbbc5b97ea87eea96ae50256"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"881fa4f299b8db328e5d71c213106305df7b0dfe","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fixes for Linux Bridge in the L3 agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This extracts part of the work done by Jens Rosenboom, and is required"},{"line_number":10,"context_line":"for Linux Bridge testing at the gate."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1a36cad0fb790aaa37417a1176576293e4f2c87f"},{"line_number":13,"context_line":"Co-Authored-By: Jens Rosenboom \u003cj.rosenboom@x-ion.de\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa32b979_65ae632f","line":10,"in_reply_to":"fa32b979_54fbd778","updated":"2015-06-19 07:05:58.000000000","message":"Done","commit_id":"8b01684080920dfbcbbc5b97ea87eea96ae50256"}],"lib/neutron-legacy":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"19d450f7bd4ade982502e12c75f7bf20bc62c991","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"        fi"},{"line_number":1275,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1278,"context_line":"                sleep 0.2"},{"line_number":1279,"context_line":"            done"},{"line_number":1280,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"fa32b979_2d2a682d","line":1277,"updated":"2015-06-19 17:27:49.000000000","message":"I think my only concern is this while loop doesn\u0027t have an end, so if something goes wrong there is no safety net. Once that is addressed I\u0027m +2","commit_id":"c1b3c7f1dc6e42f67325a1964a3dfa789ee68165"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"1892390583ad58be8504216de16a2f0c9cd024ab","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"        fi"},{"line_number":1275,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1278,"context_line":"                sleep 0.2"},{"line_number":1279,"context_line":"            done"},{"line_number":1280,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"fa32b979_64b21e08","line":1277,"in_reply_to":"fa32b979_2d2a682d","updated":"2015-06-24 16:55:19.000000000","message":"Done - I think. Check the latest patchset that I did the while loop right.","commit_id":"c1b3c7f1dc6e42f67325a1964a3dfa789ee68165"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"13205952385f7ff592443ba3eceb90695777fd0a","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"        fi"},{"line_number":1275,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1278,"context_line":"                sleep 0.2"},{"line_number":1279,"context_line":"            done"},{"line_number":1280,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":2,"id":"fa32b979_cd765cd8","line":1277,"in_reply_to":"fa32b979_2d2a682d","updated":"2015-06-19 17:39:52.000000000","message":"agreed...I\u0027d also add a comment to elaborate who does the provisioning of the interface in the linuxbridge case. I am confused.","commit_id":"c1b3c7f1dc6e42f67325a1964a3dfa789ee68165"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"e37b3e0c0c5a0940d6b204dabb3f6fa50e667d74","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        if is_neutron_ovs_base_plugin \u0026\u0026 [[ \"$Q_USE_NAMESPACE\" \u003d \"True\" ]]; then"},{"line_number":1271,"context_line":"            ext_gw_interface\u003d$(_neutron_get_ext_gw_interface)"},{"line_number":1272,"context_line":"        elif [[ \"$Q_AGENT\" \u003d \"linuxbridge\" ]]; then"},{"line_number":1273,"context_line":"            ext_gw_interface\u003dbrq${EXT_NET_ID:0:11}"},{"line_number":1274,"context_line":"        fi"},{"line_number":1275,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"fa32b979_64e53eda","line":1273,"updated":"2015-06-24 16:58:36.000000000","message":"I\u0027d love to see a comment with an example bridge name.","commit_id":"87abeaba39e17fe2177c29c0c6096bf7c2d3b50c"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"67e41403947e340635f06b50b14875377aba76d9","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        if is_neutron_ovs_base_plugin \u0026\u0026 [[ \"$Q_USE_NAMESPACE\" \u003d \"True\" ]]; then"},{"line_number":1271,"context_line":"            ext_gw_interface\u003d$(_neutron_get_ext_gw_interface)"},{"line_number":1272,"context_line":"        elif [[ \"$Q_AGENT\" \u003d \"linuxbridge\" ]]; then"},{"line_number":1273,"context_line":"            ext_gw_interface\u003dbrq${EXT_NET_ID:0:11}"},{"line_number":1274,"context_line":"        fi"},{"line_number":1275,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"fa32b979_1fcd9f65","line":1273,"in_reply_to":"fa32b979_64e53eda","updated":"2015-06-24 17:20:59.000000000","message":"Done","commit_id":"87abeaba39e17fe2177c29c0c6096bf7c2d3b50c"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"e37b3e0c0c5a0940d6b204dabb3f6fa50e667d74","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            local count\u003d0"},{"line_number":1278,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1279,"context_line":"                if [[ $count -lt 10 ]]; then"},{"line_number":1280,"context_line":"                    sleep 0.2"},{"line_number":1281,"context_line":"                    count\u003d$((count+1))"},{"line_number":1282,"context_line":"                else"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"fa32b979_64977e3a","line":1279,"updated":"2015-06-24 16:58:36.000000000","message":"nit: this if could be merged into the while conditional.","commit_id":"87abeaba39e17fe2177c29c0c6096bf7c2d3b50c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"aec88dc59e4dd8347061d97ac7d68f92648868ad","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            local count\u003d0"},{"line_number":1278,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1279,"context_line":"                if [[ $count -lt 10 ]]; then"},{"line_number":1280,"context_line":"                    sleep 0.2"},{"line_number":1281,"context_line":"                    count\u003d$((count+1))"},{"line_number":1282,"context_line":"                else"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"fa32b979_3fdbc37d","line":1279,"in_reply_to":"fa32b979_4487dab4","updated":"2015-06-24 17:13:05.000000000","message":"so the idiom we\u0027ve tended to use other places is put the while on $count and the if on the test of function. \n\nOr use timeout and a subshell.","commit_id":"87abeaba39e17fe2177c29c0c6096bf7c2d3b50c"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"f6a4dba244c7726f58ac4580853c14aa2d60aacb","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1277,"context_line":"            local count\u003d0"},{"line_number":1278,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1279,"context_line":"                if [[ $count -lt 10 ]]; then"},{"line_number":1280,"context_line":"                    sleep 0.2"},{"line_number":1281,"context_line":"                    count\u003d$((count+1))"},{"line_number":1282,"context_line":"                else"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"fa32b979_4487dab4","line":1279,"in_reply_to":"fa32b979_64977e3a","updated":"2015-06-24 17:03:59.000000000","message":"I couldn\u0027t quite figure out the way to do it, my bash-fu is very weak","commit_id":"87abeaba39e17fe2177c29c0c6096bf7c2d3b50c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a4a5a5ddb8810250c9b26312cbe9f13e048fd9ff","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"            while ! ip -o link | grep -q $ext_gw_interface; do"},{"line_number":1281,"context_line":"                if [[ $count -lt 10 ]]; then"},{"line_number":1282,"context_line":"                    sleep 0.2"},{"line_number":1283,"context_line":"                    count\u003d$((count+1))"},{"line_number":1284,"context_line":"                else"},{"line_number":1285,"context_line":"                    break"},{"line_number":1286,"context_line":"                fi"}],"source_content_type":"application/x-shellscript","patch_set":4,"id":"fa32b979_91ac43a0","line":1283,"updated":"2015-06-24 17:40:06.000000000","message":"If this fails do you want to die here?  Also, search for \u0027timeout\u0027 in this file, that might be a better way to write this loop.","commit_id":"8fb6617163ec39cf57931d13c3c8f86736473ed8"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"314208be507e4389dc9c81198da2783e041de7af","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        fi"},{"line_number":1276,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1277,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1278,"context_line":"            # Search for the brq device the neutron router and network associated with"},{"line_number":1279,"context_line":"            # $FIXED_RANGE will be created with."},{"line_number":1280,"context_line":"            # e.x. brq3592e767-da for NET_ID 3592e767-da66-4bcb-9bec-cdb03cd96102"},{"line_number":1281,"context_line":"            local testcmd\u003d\"ip -o link | grep -q $ext_gw_interface\""}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa32b979_6c498b5f","line":1278,"updated":"2015-06-25 08:26:05.000000000","message":"IMO these comments belong to the linuxbridge case in L1274 above. When using ovs the name will likely be just \"br-ex\".","commit_id":"dbc86a8ee87ddd3e493f4737c3e3d229a8cded8c"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"30b09c66f0179814a2428967526dee2206b187fb","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"        fi"},{"line_number":1276,"context_line":"        if [[ \"$ext_gw_interface\" !\u003d \"none\" ]]; then"},{"line_number":1277,"context_line":"            local cidr_len\u003d${FLOATING_RANGE#*/}"},{"line_number":1278,"context_line":"            # Search for the brq device the neutron router and network associated with"},{"line_number":1279,"context_line":"            # $FIXED_RANGE will be created with."},{"line_number":1280,"context_line":"            # e.x. brq3592e767-da for NET_ID 3592e767-da66-4bcb-9bec-cdb03cd96102"},{"line_number":1281,"context_line":"            local testcmd\u003d\"ip -o link | grep -q $ext_gw_interface\""}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa32b979_89a06b91","line":1278,"in_reply_to":"fa32b979_6c498b5f","updated":"2015-06-25 15:21:30.000000000","message":"Done","commit_id":"dbc86a8ee87ddd3e493f4737c3e3d229a8cded8c"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"314208be507e4389dc9c81198da2783e041de7af","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"            # $FIXED_RANGE will be created with."},{"line_number":1280,"context_line":"            # e.x. brq3592e767-da for NET_ID 3592e767-da66-4bcb-9bec-cdb03cd96102"},{"line_number":1281,"context_line":"            local testcmd\u003d\"ip -o link | grep -q $ext_gw_interface\""},{"line_number":1282,"context_line":"            local timout_sec\u003d5"},{"line_number":1283,"context_line":"            test_with_retry \"$testcmd\" \"$ext_gw_interface creation failed\" $timeout_sec"},{"line_number":1284,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"},{"line_number":1285,"context_line":"                sudo ip addr add $ext_gw_ip/$cidr_len dev $ext_gw_interface"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa32b979_ac6a33b1","line":1282,"updated":"2015-06-25 08:26:05.000000000","message":"s/timout/timeout/","commit_id":"dbc86a8ee87ddd3e493f4737c3e3d229a8cded8c"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"30b09c66f0179814a2428967526dee2206b187fb","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"            # $FIXED_RANGE will be created with."},{"line_number":1280,"context_line":"            # e.x. brq3592e767-da for NET_ID 3592e767-da66-4bcb-9bec-cdb03cd96102"},{"line_number":1281,"context_line":"            local testcmd\u003d\"ip -o link | grep -q $ext_gw_interface\""},{"line_number":1282,"context_line":"            local timout_sec\u003d5"},{"line_number":1283,"context_line":"            test_with_retry \"$testcmd\" \"$ext_gw_interface creation failed\" $timeout_sec"},{"line_number":1284,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"},{"line_number":1285,"context_line":"                sudo ip addr add $ext_gw_ip/$cidr_len dev $ext_gw_interface"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa32b979_09bbfbc4","line":1282,"in_reply_to":"fa32b979_0d9796ec","updated":"2015-06-25 15:21:30.000000000","message":"Done","commit_id":"dbc86a8ee87ddd3e493f4737c3e3d229a8cded8c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"3ab36fee93fb25c39ab55cd40af0962a531425a0","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"            # $FIXED_RANGE will be created with."},{"line_number":1280,"context_line":"            # e.x. brq3592e767-da for NET_ID 3592e767-da66-4bcb-9bec-cdb03cd96102"},{"line_number":1281,"context_line":"            local testcmd\u003d\"ip -o link | grep -q $ext_gw_interface\""},{"line_number":1282,"context_line":"            local timout_sec\u003d5"},{"line_number":1283,"context_line":"            test_with_retry \"$testcmd\" \"$ext_gw_interface creation failed\" $timeout_sec"},{"line_number":1284,"context_line":"            if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) \u003d\u003d 0 \u0026\u0026 ( $Q_USE_PROVIDERNET_FOR_PUBLIC \u003d\u003d \"False\" || $Q_USE_PUBLIC_VETH \u003d\u003d \"True\" ) ]]; then"},{"line_number":1285,"context_line":"                sudo ip addr add $ext_gw_ip/$cidr_len dev $ext_gw_interface"}],"source_content_type":"application/x-shellscript","patch_set":6,"id":"fa32b979_0d9796ec","line":1282,"in_reply_to":"fa32b979_ac6a33b1","updated":"2015-06-25 10:28:56.000000000","message":"good catch, though the default 10 seconds is probably fine as well and we can leave out param 3","commit_id":"dbc86a8ee87ddd3e493f4737c3e3d229a8cded8c"}]}
