)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d419ff1b8f0b303234ff39c3200f6c6493781d97","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"            node_timeout \u003d self.app.recoverable_node_timeout"},{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"        pile \u003d GreenAsyncPile(self.node_iter.concurrency)"},{"line_number":1364,"context_line":"        self.node_iter.add_node_piles(pile)"},{"line_number":1365,"context_line":""},{"line_number":1366,"context_line":"        for node in self.node_iter:"},{"line_number":1367,"context_line":"            pile.spawn(self._make_node_request, node, node_timeout,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_5b1cb069","line":1364,"updated":"2020-02-26 16:47:51.000000000","message":"I really liked the idea that I might be able to leave the primary orchistration of fragment requests in the ECObjController alone and only make changes in here that degrade to the behavior of the replicated object\u0027s use of concurrent GETs in the base case\n\n... but fundamentally this is not a good trade off - the control needs to be closer to the context","commit_id":"9979aa8b2a2ebd363acbb339bad163176fb36cb4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d419ff1b8f0b303234ff39c3200f6c6493781d97","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"        timeout \u003d self.app.concurrency_timeout \\"},{"line_number":1560,"context_line":"            if inflight \u003c self.concurrency else None"},{"line_number":1561,"context_line":"        if timeout \u003c\u003d 0:"},{"line_number":1562,"context_line":"            # prevent one frag lane from using all available concurrency"},{"line_number":1563,"context_line":"            for i in range(2):"},{"line_number":1564,"context_line":"                sleep(0)"},{"line_number":1565,"context_line":"        return timeout"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_3851ba37","line":1562,"updated":"2020-02-26 16:47:51.000000000","message":"For me this was the first hint I was doing something wrong.","commit_id":"9979aa8b2a2ebd363acbb339bad163176fb36cb4"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d419ff1b8f0b303234ff39c3200f6c6493781d97","unresolved":false,"context_lines":[{"line_number":2394,"context_line":"                    extra_requests +\u003d 1"},{"line_number":2395,"context_line":"                    pile.spawn(self._fragment_GET_request, req,"},{"line_number":2396,"context_line":"                               node_iter, partition, policy,"},{"line_number":2397,"context_line":"                               buckets.get_extra_headers)"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"        # Put this back, since we *may* need it for kickoff()/_fix_response()"},{"line_number":2400,"context_line":"        # (but note that _fix_ranges() may also pop it back off before then)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_3ba0d4f4","line":2397,"updated":"2020-02-26 16:47:51.000000000","message":"We already have an example of EC GET managing it\u0027s own requests in the face of failure (originally it only ever had to spawn additional requests w/i the ResummingGetter)\n\nAs we make EC GETs more robust and optimized it seems to become less adapted to the reuse of replicated request oriented primitives like ResumingGetter","commit_id":"9979aa8b2a2ebd363acbb339bad163176fb36cb4"}],"test/unit/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d419ff1b8f0b303234ff39c3200f6c6493781d97","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"        }"},{"line_number":1124,"context_line":"        requests.append(req)"},{"line_number":1125,"context_line":"    kwargs.setdefault(\u0027give_connect\u0027, capture_requests)"},{"line_number":1126,"context_line":"    fake_conn \u003d fake_http_connect(*code_iter, **kwargs)"},{"line_number":1127,"context_line":"    fake_conn.requests \u003d requests"},{"line_number":1128,"context_line":"    with mocklib.patch(\u0027swift.common.bufferedhttp.http_connect_raw\u0027,"},{"line_number":1129,"context_line":"                       new\u003dfake_conn):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_db7d006f","line":1126,"updated":"2020-02-26 16:47:51.000000000","message":"these are all minor and mostly ascetic improvements - I\u0027ll probably just pull them over to the next patch\n\n... but I could in theory make them a separate dependent change","commit_id":"9979aa8b2a2ebd363acbb339bad163176fb36cb4"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"60d3e3501e35ccd215f0b88d7f33eebb67b4d80e","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"        with mocked_http_conn(*codes) as log:"},{"line_number":2408,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2409,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":2410,"context_line":"        self.assertEqual(self.policy.ec_ndata + 1, len(log.requests))"},{"line_number":2411,"context_line":""},{"line_number":2412,"context_line":"    def test_GET_with_body(self):"},{"line_number":2413,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_23046a7b","line":2410,"updated":"2020-02-22 21:15:01.000000000","message":"The only real concurrent_gets test we have is in proxy.test_server called test_node_concurrency and I think it predates the expansion of FakeStatus\n\nI think we\u0027ll need to do a little better for our ec-waterfall tests","commit_id":"a317aff1ea66a056fa50e4a8a5894d9d524376d1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d419ff1b8f0b303234ff39c3200f6c6493781d97","unresolved":false,"context_lines":[{"line_number":2467,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":2468,"context_line":""},{"line_number":2469,"context_line":"        self.app.concurrent_gets \u003d True"},{"line_number":2470,"context_line":"        self.app.concurrency_timeout \u003d 0.0"},{"line_number":2471,"context_line":"        status_codes \u003d ["},{"line_number":2472,"context_line":"            FakeStatus(200, response_sleep\u003d2.0),"},{"line_number":2473,"context_line":"            FakeStatus(200, response_sleep\u003d2.0),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_f83fa2d3","line":2470,"updated":"2020-02-26 16:47:51.000000000","message":"I think more tests with concurrency_timeout 0 are going to prove out that this is the wrong approach\n\nSince each frag lane can only ever *return* one frag we have to carefully control who gets to spawn additional requests\n\nthis is antithetical to the goal - since we\u0027re spawning these extra before we know who\u0027s going to return","commit_id":"9979aa8b2a2ebd363acbb339bad163176fb36cb4"}]}
