)]}'
{"neutron/plugins/bigswitch/plugin.py":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"f761e27b27b7b0156247c0567ea9bb9ca9935216","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        Note: We assume any valid 2xx as being successful response."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        return resp[0] in SUCCESS_CODES"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FxN4%3D","line":286,"updated":"2013-07-11 18:34:50.000000000","message":"Can we move the lock here from L191? It seems safer to do it here.","commit_id":"00ec31a8c0f3231cab68c841991364c16890c521"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"5b73ec3ee484c11a84ac7391db21f8b648633611","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        Note: We assume any valid 2xx as being successful response."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        return resp[0] in SUCCESS_CODES"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FxLQ%3D","line":286,"in_reply_to":"AAAAP3%2F%2FxN4%3D","updated":"2013-07-11 18:40:37.000000000","message":"Done","commit_id":"00ec31a8c0f3231cab68c841991364c16890c521"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"279702e93460767555a93cbb382e528c4f77af4c","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"},{"line_number":290,"context_line":"        for active_server in good_servers + bad_servers:"},{"line_number":291,"context_line":"            ret \u003d active_server.rest_call(action, resource, data, headers)"},{"line_number":292,"context_line":"            if not self.server_failure(ret):"},{"line_number":293,"context_line":"                active_server.failed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fvc0%3D","line":290,"updated":"2013-07-12 04:03:15.000000000","message":"Why are splitting servers and recombining the list?","commit_id":"3dfe4193f69199689627a42d065dbf7f657881d8"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6760798347598dbe60c57af567b3ccab6c507f48","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"},{"line_number":290,"context_line":"        for active_server in good_servers + bad_servers:"},{"line_number":291,"context_line":"            ret \u003d active_server.rest_call(action, resource, data, headers)"},{"line_number":292,"context_line":"            if not self.server_failure(ret):"},{"line_number":293,"context_line":"                active_server.failed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FvV0%3D","line":290,"in_reply_to":"AAAAP3%2F%2Fvbc%3D","updated":"2013-07-12 05:11:30.000000000","message":"I did the replaced this with a sorted statement to make the intention a little more clear.","commit_id":"3dfe4193f69199689627a42d065dbf7f657881d8"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4220f5a20335af1b072b89032c72b8546b177ab1","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"},{"line_number":290,"context_line":"        for active_server in good_servers + bad_servers:"},{"line_number":291,"context_line":"            ret \u003d active_server.rest_call(action, resource, data, headers)"},{"line_number":292,"context_line":"            if not self.server_failure(ret):"},{"line_number":293,"context_line":"                active_server.failed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fvbc%3D","line":290,"in_reply_to":"AAAAP3%2F%2Fvbk%3D","updated":"2013-07-12 04:12:41.000000000","message":"And I believe this has to be in taken in the context that a \"bad_server\" is not permanently bad. It might have been flagged as bad in a previous iteration of this rest_call, but might become available in a subsequent iteration.","commit_id":"3dfe4193f69199689627a42d065dbf7f657881d8"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"f2e2f5902a31b689f942f45defae9b6c29a9382e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers):"},{"line_number":288,"context_line":"        good_servers \u003d [s for s in self.servers if not s.failed]"},{"line_number":289,"context_line":"        bad_servers \u003d [s for s in self.servers if s.failed]"},{"line_number":290,"context_line":"        for active_server in good_servers + bad_servers:"},{"line_number":291,"context_line":"            ret \u003d active_server.rest_call(action, resource, data, headers)"},{"line_number":292,"context_line":"            if not self.server_failure(ret):"},{"line_number":293,"context_line":"                active_server.failed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2Fvbk%3D","line":290,"in_reply_to":"AAAAP3%2F%2Fvc0%3D","updated":"2013-07-12 04:09:26.000000000","message":"To try the known good servers first and then resort to retrying the bad ones if the good ones fail.","commit_id":"3dfe4193f69199689627a42d065dbf7f657881d8"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"2ce90405b6b8bbf57439807c187361ea64b9249d","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        return resp[0] in SUCCESS_CODES"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized(\u0027bsn-rest-call\u0027, external\u003dTrue)"},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers, ignore_codes):"},{"line_number":288,"context_line":"        good_first \u003d sorted(self.servers, key\u003dlambda x: x.failed)"},{"line_number":289,"context_line":"        for active_server in good_first:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrME%3D","line":286,"updated":"2013-07-14 01:21:40.000000000","message":"What\u0027s the reason for making the sync external?  The management of the list state is totally within this process and cannot be shared across test boundaries.","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"73ca816b9c2f3400d1ecb57572b9fafd65ed77e0","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        return resp[0] in SUCCESS_CODES"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized(\u0027bsn-rest-call\u0027, external\u003dTrue)"},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers, ignore_codes):"},{"line_number":288,"context_line":"        good_first \u003d sorted(self.servers, key\u003dlambda x: x.failed)"},{"line_number":289,"context_line":"        for active_server in good_first:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrAw%3D","line":286,"in_reply_to":"AAAAP3%2F%2FrK0%3D","updated":"2013-07-14 06:58:54.000000000","message":"I think Mark\u0027s question here is whether external needs to be set to True. I believe by setting external to True the attempt is to throttle at the neutron server to the extent possible, including any deployment which runs more than one neutron server on the same host. While such a deployment is probably unlikely, this is trying to be more safe.","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"9228ce032ad89c7e0388d7441ca646b4eb2c5a90","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        return resp[0] in SUCCESS_CODES"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized(\u0027bsn-rest-call\u0027, external\u003dTrue)"},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers, ignore_codes):"},{"line_number":288,"context_line":"        good_first \u003d sorted(self.servers, key\u003dlambda x: x.failed)"},{"line_number":289,"context_line":"        for active_server in good_first:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrK0%3D","line":286,"in_reply_to":"AAAAP3%2F%2FrME%3D","updated":"2013-07-14 03:08:19.000000000","message":"The lock is currently there to address a concurrency limitation on the backend. If there are simultaneous calls, some could end up timing out so we lock the REST calls here to make sure there aren\u0027t any concurrent calls going on.\n\nIn the future, this may be removed if the backend is changed to accept many calls at once.","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"2ce90405b6b8bbf57439807c187361ea64b9249d","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized(\u0027bsn-rest-call\u0027, external\u003dTrue)"},{"line_number":287,"context_line":"    def rest_call(self, action, resource, data, headers, ignore_codes):"},{"line_number":288,"context_line":"        good_first \u003d sorted(self.servers, key\u003dlambda x: x.failed)"},{"line_number":289,"context_line":"        for active_server in good_first:"},{"line_number":290,"context_line":"            ret \u003d active_server.rest_call(action, resource, data, headers)"},{"line_number":291,"context_line":"            if not self.server_failure(ret, ignore_codes):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrMQ%3D","line":288,"updated":"2013-07-14 01:21:40.000000000","message":"I like the use of sorted here.","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"}],"neutron/tests/unit/bigswitch/test_restproxy_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"2ce90405b6b8bbf57439807c187361ea64b9249d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2012 Big Switch Networks, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrL4%3D","line":1,"updated":"2013-07-14 01:21:40.000000000","message":"Seems like there should be a test in this file confirming that the list is properly sort.","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"9228ce032ad89c7e0388d7441ca646b4eb2c5a90","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2012 Big Switch Networks, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAP3%2F%2FrHs%3D","line":1,"in_reply_to":"AAAAP3%2F%2FrL4%3D","updated":"2013-07-14 03:08:19.000000000","message":"Done","commit_id":"e686427c1e419623db633394b9c1ccc03070926f"}]}
