)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6c438125ae94b06abe3742502989a42005e32699","unresolved":false,"context_lines":[{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"    def next(self):"},{"line_number":1579,"context_line":"        with self.semaphore:"},{"line_number":1580,"context_line":"            return self._next()"},{"line_number":1581,"context_line":""},{"line_number":1582,"context_line":"    def __next__(self):"},{"line_number":1583,"context_line":"        return self.next()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_83767e3e","line":1580,"updated":"2020-02-22 20:58:05.000000000","message":"It would probably also be reasonable to restructure GreenthreadSafeIterator such that NodeIter *is a* GreenthreadSafeIterator instead of just having the same behavior","commit_id":"f75f5341dd436d71448d7b70a3deeed30eac475a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6c438125ae94b06abe3742502989a42005e32699","unresolved":false,"context_lines":[{"line_number":1825,"context_line":"        if node_iterator:"},{"line_number":1826,"context_line":"            nodes \u003d GreenthreadSafeIterator(node_iterator)"},{"line_number":1827,"context_line":"        else:"},{"line_number":1828,"context_line":"            nodes \u003d self.app.iter_nodes(ring, part)"},{"line_number":1829,"context_line":"        node_number \u003d node_count or len(ring.get_part_nodes(part))"},{"line_number":1830,"context_line":"        pile \u003d GreenAsyncPile(node_number)"},{"line_number":1831,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_e379722f","line":1828,"updated":"2020-02-22 20:58:05.000000000","message":"I\u0027d be open to trying to track down *all* the places we have \"node_iters\" and converting them a real NodeIter","commit_id":"f75f5341dd436d71448d7b70a3deeed30eac475a"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6c438125ae94b06abe3742502989a42005e32699","unresolved":false,"context_lines":[{"line_number":2330,"context_line":"            # server know that it is ok to return non-durable fragments"},{"line_number":2331,"context_line":"            for _junk in range(policy.ec_ndata):"},{"line_number":2332,"context_line":"                pile.spawn(self._fragment_GET_request,"},{"line_number":2333,"context_line":"                           req, node_iter, partition,"},{"line_number":2334,"context_line":"                           policy, buckets.get_extra_headers)"},{"line_number":2335,"context_line":""},{"line_number":2336,"context_line":"            bad_bucket \u003d ECGetResponseBucket(policy, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_03984e68","line":2333,"updated":"2020-02-22 20:58:05.000000000","message":"This is an instance of a NodeIter - you can see we\u0027re passing it to a bunch of spawned separate instances of ResummingGetter (who also wrap it)\n\nThis is the first step at getting all the concurrently spawned EC frag requests to share context about overlapping concurrent get requests.","commit_id":"f75f5341dd436d71448d7b70a3deeed30eac475a"}]}
