)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b7b8e2d1357c59b9ade7fa4576cfac104a5775b","unresolved":false,"context_lines":[{"line_number":1979,"context_line":"                            # but we don\u0027t have enough matching etags"},{"line_number":1980,"context_line":"                            \u003e len(etag_buckets[best_etag])"},{"line_number":1981,"context_line":"                            # nor too many bad responses"},{"line_number":1982,"context_line":"                            \u003e len(bad_gets)):"},{"line_number":1983,"context_line":"                        # ... so we\u0027ll try to spawn some more"},{"line_number":1984,"context_line":"                        for i in range(min_gets -"},{"line_number":1985,"context_line":"                                       len(etag_buckets[best_etag])):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_206c4334","line":1982,"updated":"2015-08-25 17:50:50.000000000","message":"hmmm, not sure about the len(bad_gets) condition\n\nfor a 10+4 scheme, we could have 10 bad_gets and 4 good gets and still want to continue to spawn another 10 GETs to handoffs?? but this will exit the loop.","commit_id":"6902222dc8b8b6e81c81ebc8f887e779593e27c4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b7b8e2d1357c59b9ade7fa4576cfac104a5775b","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"                        for i in range(min_gets -"},{"line_number":1985,"context_line":"                                       len(etag_buckets[best_etag])):"},{"line_number":1986,"context_line":"                            pile.spawn(self._fragment_GET_request, req,"},{"line_number":1987,"context_line":"                                       node_iter, partition, policy)"},{"line_number":1988,"context_line":""},{"line_number":1989,"context_line":"            req.range \u003d orig_range"},{"line_number":1990,"context_line":"            if len(etag_buckets[best_etag]) \u003e\u003d min_gets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_8013cfb7","line":1987,"updated":"2015-08-25 17:50:50.000000000","message":"-1\n\nfirst time we get here, assume num_gets \u003d min_gets and len(etag_buckets[best_etag]) \u003d min_gets - 2\n\nso, this spawns 2 more GETs.\n\nnext time through loop, assume a good GET, then len(etag_buckets[best_etag]) \u003d min_gets - 1,\n\nso this spawns another GET but there is still one in flight :(\n\nIf the latest GET fails quickly then another is spawned and so on until 28 GETs may have been spawned.","commit_id":"6902222dc8b8b6e81c81ebc8f887e779593e27c4"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b7b8e2d1357c59b9ade7fa4576cfac104a5775b","unresolved":false,"context_lines":[{"line_number":1524,"context_line":"        self.assertEqual(len(leftover_responses), len(primary_nodes) -"},{"line_number":1525,"context_line":"                         self.policy.ec_ndata)"},{"line_number":1526,"context_line":""},{"line_number":1527,"context_line":"    def test_mixed_etags_with_range(self):"},{"line_number":1528,"context_line":"        segment_size \u003d self.policy.ec_segment_size"},{"line_number":1529,"context_line":"        fragment_size \u003d self.policy.fragment_size"},{"line_number":1530,"context_line":"        test_data \u003d (\u0027test\u0027 * segment_size)[:-492]"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_40e5b7a1","line":1527,"updated":"2015-08-25 17:50:50.000000000","message":"\"mixed_etags\" - AFAICT there\u0027s only one etag used in this test and its \u0027None\u0027 :)","commit_id":"6902222dc8b8b6e81c81ebc8f887e779593e27c4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b7b8e2d1357c59b9ade7fa4576cfac104a5775b","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"            StubResponse(206, frag_archives[3][:fragment_size], headers),"},{"line_number":1546,"context_line":"            StubResponse(206, frag_archives[4][:fragment_size], headers),"},{"line_number":1547,"context_line":"            # data node with old frag"},{"line_number":1548,"context_line":"            StubResponse(416),"},{"line_number":1549,"context_line":"            StubResponse(206, frag_archives[6][:fragment_size], headers),"},{"line_number":1550,"context_line":"            StubResponse(206, frag_archives[7][:fragment_size], headers),"},{"line_number":1551,"context_line":"            StubResponse(206, frag_archives[8][:fragment_size], headers),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_60a1db45","line":1548,"updated":"2015-08-25 17:50:50.000000000","message":"insert another 416 here and the request log length will go to 28","commit_id":"6902222dc8b8b6e81c81ebc8f887e779593e27c4"}]}
