)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e5b821eb09056b52d23619afc8236227c6a7e6","unresolved":false,"context_lines":[{"line_number":1520,"context_line":"            raise ValueError(\"called end_of_object_data twice\")"},{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"        if self.chunked:"},{"line_number":1523,"context_line":"            self.queue.put(\u0027\u0027)"},{"line_number":1524,"context_line":"        self.state \u003d DATA_SENT"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"    def _send_file(self, write_timeout, exception_handler):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_e158ce34","line":1523,"updated":"2016-07-05 14:38:57.000000000","message":"+1","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e5b821eb09056b52d23619afc8236227c6a7e6","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"                chunk \u003d self.queue.get()"},{"line_number":1537,"context_line":"            except GreenletExit:"},{"line_number":1538,"context_line":"                # killed by ContextPool"},{"line_number":1539,"context_line":"                break"},{"line_number":1540,"context_line":"            if not self.failed:"},{"line_number":1541,"context_line":"                if self.chunked:"},{"line_number":1542,"context_line":"                    to_send \u003d \"%x\\r\\n%s\\r\\n\" % (len(chunk), chunk)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_bc2429af","line":1539,"updated":"2016-07-05 14:38:57.000000000","message":"This doesn\u0027t seem like a bad idea, but for my education, why is it necessary - wouldn\u0027t the GreenletExit cause the break out of the while loop anyway? And doesn\u0027t handling the exception here and not re-raising prevent any cleanup there might be in the Greenthread spawn?","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"}],"test/unit/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e5b821eb09056b52d23619afc8236227c6a7e6","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"                            headers\u003dheaders, expect_headers\u003dexpect_headers,"},{"line_number":1022,"context_line":"                            connection_id\u003di, give_send\u003dkwargs.get(\u0027give_send\u0027),"},{"line_number":1023,"context_line":"                            give_expect\u003dkwargs.get(\u0027give_expect\u0027))"},{"line_number":1024,"context_line":"        finally:"},{"line_number":1025,"context_line":"            if \u0027give_connect\u0027 in kwargs:"},{"line_number":1026,"context_line":"                give_conn_fn \u003d kwargs[\u0027give_connect\u0027]"},{"line_number":1027,"context_line":"                argspec \u003d inspect.getargspec(give_conn_fn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_9605ce7b","line":1024,"updated":"2016-07-05 14:38:57.000000000","message":"ok, I considered re-ordering give_connect like this but feared some test would depend on give_connect being called before the exception that is raised at line 1013. I never got the chance to try it, but it seems it works.","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e5b821eb09056b52d23619afc8236227c6a7e6","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                              give_send\u003dcapture_chunks):"},{"line_number":628,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":629,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":630,"context_line":"        self.assertEqual(chunks, [\u00274\\r\\ntest\\r\\n\u0027, \u00270\\r\\n\\r\\n\u0027] * 3)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def _test_PUT_with_no_footers(self, test_body\u003d\u0027\u0027, chunked\u003dFalse):"},{"line_number":633,"context_line":"        # verify that when no footers are required then the PUT uses a regular"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_9c320d0f","line":630,"updated":"2016-07-05 14:38:57.000000000","message":"I\u0027m not sure... this assumes each send_file thread empties its queue before the next starts. If I insert a sleep in end_of_object_data then I see \n\n  [\u00274\\r\\ntest\\r\\n\u0027, \u00274\\r\\ntest\\r\\n\u0027, \u00274\\r\\ntest\\r\\n\u0027, \u00270\\r\\n\\r\\n\u0027, \u00270\\r\\n\\r\\n\u0027, \u00270\\r\\n\\r\\n\u0027]\n\nMaybe something like:\n\nhttps://gist.github.com/alistairncoles/aa4b1e4cf176221c3a2ee6d378c4e94d","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"dfb468bb43dd7dcec0adb276b5e496798878f934","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                              give_send\u003dcapture_chunks):"},{"line_number":628,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":629,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":630,"context_line":"        self.assertEqual(chunks, [\u00274\\r\\ntest\\r\\n\u0027, \u00270\\r\\n\\r\\n\u0027] * 3)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def _test_PUT_with_no_footers(self, test_body\u003d\u0027\u0027, chunked\u003dFalse):"},{"line_number":633,"context_line":"        # verify that when no footers are required then the PUT uses a regular"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_637f6de0","line":630,"in_reply_to":"1aa78d24_9c320d0f","updated":"2016-09-01 21:22:01.000000000","message":"yeah what\u0027s in that gist there is way better!","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e5b821eb09056b52d23619afc8236227c6a7e6","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        def capture_body(conn, chunk):"},{"line_number":653,"context_line":"            expected \u003d put_requests[conn.connection_id][\u0027connection\u0027]"},{"line_number":654,"context_line":"            self.assertEqual(conn, expected)"},{"line_number":655,"context_line":"            put_requests[conn.connection_id][\u0027chunks\u0027].append(chunk)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        codes \u003d [201] * self.replicas()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_f097f58d","line":654,"updated":"2016-07-05 14:38:57.000000000","message":"nit: this is just sanity checking, correct? it\u0027s checking the test framework hasn\u0027t somehow reassigned connection id\u0027s?","commit_id":"b3de24747466653a5ee86d85c4962009dd4f8592"}]}
