)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"45e23648fe6142a4cebe7ca04a6e704f390c47f8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-01 13:31:19 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Split up tests for Concurrent Gets"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"... and add some test infrastructure for further testing."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7af24918_1e8302ce","line":7,"updated":"2016-03-01 13:57:53.000000000","message":"it\u0027d be more consistent if this said concurrent \"reads\"","commit_id":"fa853ca76c1bb801dc6f44e4c187f12f78214c37"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"45e23648fe6142a4cebe7ca04a6e704f390c47f8","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        else:"},{"line_number":1066,"context_line":"            # ran out of nodes, see if any stagglers will finish"},{"line_number":1067,"context_line":"            if not self.sources:"},{"line_number":1068,"context_line":"                any(pile)"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        if self.sources:"},{"line_number":1071,"context_line":"            self.sources.sort(key\u003dlambda s: source_key(s[0]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_d4be99d3","line":1068,"updated":"2016-03-01 13:57:53.000000000","message":"this is ... maybe ... a real bug ... *maybe*\n\nWith the concurrency_timeout of 0 we often hit this code path...\n\na - phew - NOT a bug - bug in the mock - fix coming","commit_id":"fa853ca76c1bb801dc6f44e4c187f12f78214c37"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b0ebdf173ed1ef183a8ff97934429f79d621794f","unresolved":false,"context_lines":[{"line_number":981,"context_line":"                time_to_quit \u003d self.test_case._now + timeout"},{"line_number":982,"context_line":"                while self.test_case._now \u003c time_to_quit:"},{"line_number":983,"context_line":"                    sleep(0)"},{"line_number":984,"context_line":"                    if self.test_case.any_ready_tickets():"},{"line_number":985,"context_line":"                        print(\u0027DROPPING\u0027)"},{"line_number":986,"context_line":"                        return super(MockedGreenAsyncPile, self)._wait("},{"line_number":987,"context_line":"                            0.01, first_n\u003dfirst_n)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_3ced96ef","line":984,"updated":"2016-03-17 18:08:25.000000000","message":"this consumes all \"ready tickets\", but we only  fetch one from the queue, so if two are ready but the first ticket is an error, we get the error back from the call to super _wait, but then loop here again until the third ticket is ready (even though the second ticket could be fetched form the queue)\n\nthis causes test_fastest_node_errors_starts_new_req_quickly to be flaky at least","commit_id":"63d43500abb0572250dbacee7acbbb72aaf66d05"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b0ebdf173ed1ef183a8ff97934429f79d621794f","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                def mocked_gen():"},{"line_number":994,"context_line":"                    while True:"},{"line_number":995,"context_line":"                        for r in super(MockedGreenAsyncPile, self)._wait("},{"line_number":996,"context_line":"                                0.01, first_n\u003d1):"},{"line_number":997,"context_line":"                            yield r"},{"line_number":998,"context_line":"                        self.test_case._now +\u003d 0.1"},{"line_number":999,"context_line":"                        if self._pending \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_fcc32e87","line":996,"updated":"2016-03-17 18:08:25.000000000","message":"once we go to this _wait nothing is ticking virtual time on in the connections, so we end up waiting 10 seconds","commit_id":"63d43500abb0572250dbacee7acbbb72aaf66d05"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d952a17f6bba96d7ed47b210f150c964e0dc4341","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                def mocked_gen():"},{"line_number":994,"context_line":"                    while True:"},{"line_number":995,"context_line":"                        for r in super(MockedGreenAsyncPile, self)._wait("},{"line_number":996,"context_line":"                                0.01, first_n\u003d1):"},{"line_number":997,"context_line":"                            yield r"},{"line_number":998,"context_line":"                        self.test_case._now +\u003d 0.1"},{"line_number":999,"context_line":"                        if self._pending \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_56cb71a5","line":996,"updated":"2016-03-17 19:41:12.000000000","message":"this can\u0027t be right, i\u0027m not calling any_ready_tickets in this loop so none of the pending events would be fired...","commit_id":"63d43500abb0572250dbacee7acbbb72aaf66d05"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"fd9b45a6821b03d7a08fc28ebfc2b49fe5c9d25c","unresolved":false,"context_lines":[{"line_number":1062,"context_line":"            if not ev.ready():"},{"line_number":1063,"context_line":"                ev.send()"},{"line_number":1064,"context_line":"        self.tickets \u003d not_ready_tickets"},{"line_number":1065,"context_line":"        return self.finished_tickets"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    @contextmanager"},{"line_number":1068,"context_line":"    def mocked_http_connect(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_67e6c8b5","line":1065,"range":{"start_line":1065,"start_character":8,"end_line":1065,"end_character":36},"updated":"2016-12-14 04:31:04.000000000","message":"Returning finished_tickets means any test here would come back true if there was an errored response here.","commit_id":"f5d79555a980110b8b2e2f78da2fcbd127ec760e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"fd9b45a6821b03d7a08fc28ebfc2b49fe5c9d25c","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"                        return super(MockedGreenAsyncPile, self)._wait("},{"line_number":1116,"context_line":"                            0.01, first_n\u003dfirst_n)"},{"line_number":1117,"context_line":"                    self.test_case._now +\u003d 0.1"},{"line_number":1118,"context_line":"                print(\u0027TIMEOUT\u0027)"},{"line_number":1119,"context_line":"                return []"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"            def next(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_c7bf9c5e","line":1118,"updated":"2016-12-14 04:31:04.000000000","message":"In test_slow_error_node_has_one_in_waiting test, the wait_first would trigger a new request (as it should) but means out wait timeouts for each request will timeout. In the code, we then have an any(pile) to capture any strays. \nHowever with this ticket approach (which is awesome BTW), the other requests are left waiting for an event.. so we need to trigger if we get to the end so it will be caught by the any(pile).","commit_id":"f5d79555a980110b8b2e2f78da2fcbd127ec760e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"fd9b45a6821b03d7a08fc28ebfc2b49fe5c9d25c","unresolved":false,"context_lines":[{"line_number":1118,"context_line":"                print(\u0027TIMEOUT\u0027)"},{"line_number":1119,"context_line":"                return []"},{"line_number":1120,"context_line":""},{"line_number":1121,"context_line":"            def next(self):"},{"line_number":1122,"context_line":"                try:"},{"line_number":1123,"context_line":"                    rv \u003d self.waitfirst(0.01)"},{"line_number":1124,"context_line":"                except eventlet.queue.Empty:"},{"line_number":1125,"context_line":"                    if self._inflight \u003d\u003d 0:"},{"line_number":1126,"context_line":"                        raise StopIteration()"},{"line_number":1127,"context_line":"                    rv \u003d self.waitfirst(None)"},{"line_number":1128,"context_line":"                self._pending -\u003d 1"},{"line_number":1129,"context_line":"                return rv"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"            def spawn(self, *args, **kwargs):"},{"line_number":1132,"context_line":"                return super(MockedGreenAsyncPile, self).spawn(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6eadb0_c715dc9b","line":1129,"range":{"start_line":1121,"start_character":12,"end_line":1129,"end_character":25},"updated":"2016-12-14 04:31:04.000000000","message":"This re-implementation is causing an infinite loop.","commit_id":"f5d79555a980110b8b2e2f78da2fcbd127ec760e"}]}
