)]}'
{"Engine/swift/storlet_gateway/storlet_docker_gateway.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0c0fdedc1b65f4bfdc4e53e9d2e69a74c98935fb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    StorletTimeout"},{"line_number":24,"context_line":"from storlet_gateway.storlet_base_gateway import StorletGatewayBase"},{"line_number":25,"context_line":"from storlet_runtime import RunTimePaths, RunTimeSandbox, \\"},{"line_number":26,"context_line":"    StorletInvocationProtocol"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONDITIONAL_KEYS \u003d [\u0027IF_MATCH\u0027, \u0027IF_NONE_MATCH\u0027, \u0027IF_MODIFIED_SINCE\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_47283b9a","line":26,"updated":"2016-06-02 06:14:41.000000000","message":"Great, what we need is just a StorletInvocationProtocol","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0c0fdedc1b65f4bfdc4e53e9d2e69a74c98935fb","unresolved":false,"context_lines":[{"line_number":85,"context_line":"class StorletGETRequest(DockerStorletRequest):"},{"line_number":86,"context_line":"    def __init__(self, account, orig_resp, params):"},{"line_number":87,"context_line":"        DockerStorletRequest.__init__(self, account, orig_resp, params)"},{"line_number":88,"context_line":"        self.stream \u003d orig_resp.app_iter"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class StorletPUTRequest(DockerStorletRequest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_a252b510","line":88,"updated":"2016-06-02 06:14:41.000000000","message":"OK, probably all children classes needs self.stream variable which means \"iterator for input\". Right now, it seems ok as is but could we ensure the assignment (or definition) in the parent class?\n\nI\u0027m scared if child class doesn\u0027t assign the variable, probably some component will be broken, right?","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7017f29cb5b58fe8cf55bb2175efa5e38bc0784d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"class StorletGETRequest(DockerStorletRequest):"},{"line_number":86,"context_line":"    def __init__(self, account, orig_resp, params):"},{"line_number":87,"context_line":"        DockerStorletRequest.__init__(self, account, orig_resp, params)"},{"line_number":88,"context_line":"        self.stream \u003d orig_resp.app_iter"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class StorletPUTRequest(DockerStorletRequest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_ce71bf79","line":88,"in_reply_to":"9abb7d3a_a252b510","updated":"2016-06-02 16:23:16.000000000","message":"Done","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7a040400163a87db325df608d76bc0d1022bcde6","unresolved":false,"context_lines":[{"line_number":85,"context_line":"class StorletGETRequest(DockerStorletRequest):"},{"line_number":86,"context_line":"    def __init__(self, account, orig_resp, params):"},{"line_number":87,"context_line":"        DockerStorletRequest.__init__(self, account, orig_resp, params)"},{"line_number":88,"context_line":"        self.stream \u003d orig_resp.app_iter"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class StorletPUTRequest(DockerStorletRequest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_249248a0","line":88,"in_reply_to":"9abb7d3a_a252b510","updated":"2016-06-02 09:53:07.000000000","message":"That makes sense to me. I\u0027m going to fix the __init__ of the base class, to enable us to make sure that stream is assigned.","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"}],"Engine/swift/storlet_gateway/storlet_runtime.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0c0fdedc1b65f4bfdc4e53e9d2e69a74c98935fb","unresolved":false,"context_lines":[{"line_number":454,"context_line":"class StorletInvocationProtocol(object):"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _add_input_stream(self):"},{"line_number":457,"context_line":"        self.fds.append(self.input_data_read_fd)"},{"line_number":458,"context_line":"        # TODO(Break request metadata and systemmetadata)"},{"line_number":459,"context_line":"        md \u003d dict()"},{"line_number":460,"context_line":"        md[\u0027type\u0027] \u003d SBUS_FD_INPUT_OBJECT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_c2d5391c","line":457,"updated":"2016-06-02 06:14:41.000000000","message":"Looks like all of _add_xxxx methods are just preparing a list for fds and fdmds, right? And more, it seems just a projection of instance variables. So probably what we need is just define a property method like:\n\n @property\n def fds(self):\n     return [self.input_data_read_fd,\n             self.execution_str_write_fd,\n             etc...]\n\nHow do you think of it?","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9413203ca2711d7b8b28b53d0a97c1a134f52aef","unresolved":false,"context_lines":[{"line_number":454,"context_line":"class StorletInvocationProtocol(object):"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _add_input_stream(self):"},{"line_number":457,"context_line":"        self.fds.append(self.input_data_read_fd)"},{"line_number":458,"context_line":"        # TODO(Break request metadata and systemmetadata)"},{"line_number":459,"context_line":"        md \u003d dict()"},{"line_number":460,"context_line":"        md[\u0027type\u0027] \u003d SBUS_FD_INPUT_OBJECT"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_c8b553d1","line":457,"in_reply_to":"9abb7d3a_0eb9072f","updated":"2016-06-04 08:22:06.000000000","message":"I reverted my change about handling of fds, because I need some more time to find the reason why func tests fail. I\u0027m going to deal with it in another patch.\n\nCan we land this patch first?","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7017f29cb5b58fe8cf55bb2175efa5e38bc0784d","unresolved":false,"context_lines":[{"line_number":454,"context_line":"class StorletInvocationProtocol(object):"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _add_input_stream(self):"},{"line_number":457,"context_line":"        self.fds.append(self.input_data_read_fd)"},{"line_number":458,"context_line":"        # TODO(Break request metadata and systemmetadata)"},{"line_number":459,"context_line":"        md \u003d dict()"},{"line_number":460,"context_line":"        md[\u0027type\u0027] \u003d SBUS_FD_INPUT_OBJECT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_0eb9072f","line":457,"in_reply_to":"9abb7d3a_c2d5391c","updated":"2016-06-02 16:23:16.000000000","message":"Done","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7a040400163a87db325df608d76bc0d1022bcde6","unresolved":false,"context_lines":[{"line_number":454,"context_line":"class StorletInvocationProtocol(object):"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _add_input_stream(self):"},{"line_number":457,"context_line":"        self.fds.append(self.input_data_read_fd)"},{"line_number":458,"context_line":"        # TODO(Break request metadata and systemmetadata)"},{"line_number":459,"context_line":"        md \u003d dict()"},{"line_number":460,"context_line":"        md[\u0027type\u0027] \u003d SBUS_FD_INPUT_OBJECT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_e4d4c0be","line":457,"in_reply_to":"9abb7d3a_c2d5391c","updated":"2016-06-02 09:53:07.000000000","message":"Good idea! I\u0027m going to merge this idea in the next patch set.","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"}],"tests/unit/swift/storlet_gateway/test_storlet_runtime.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0c0fdedc1b65f4bfdc4e53e9d2e69a74c98935fb","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        storlet_request \u003d DockerStorletRequest("},{"line_number":294,"context_line":"            \u0027test_account\u0027, Request.blank(\u0027/\u0027), {})"},{"line_number":295,"context_line":"        storlet_request.stream \u003d StringIO()"},{"line_number":296,"context_line":"        self.protocol \u003d \\"},{"line_number":297,"context_line":"            storlet_gateway.storlet_runtime.StorletInvocationProtocol("},{"line_number":298,"context_line":"                storlet_request, self.pipe_path, self.log_file, 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_82da1115","line":295,"updated":"2016-06-02 06:14:41.000000000","message":"nitpick) I know StringIO() can take a iter call but, to be clarify, \"iter(StringIO)\" seems better.","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7017f29cb5b58fe8cf55bb2175efa5e38bc0784d","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        storlet_request \u003d DockerStorletRequest("},{"line_number":294,"context_line":"            \u0027test_account\u0027, Request.blank(\u0027/\u0027), {})"},{"line_number":295,"context_line":"        storlet_request.stream \u003d StringIO()"},{"line_number":296,"context_line":"        self.protocol \u003d \\"},{"line_number":297,"context_line":"            storlet_gateway.storlet_runtime.StorletInvocationProtocol("},{"line_number":298,"context_line":"                storlet_request, self.pipe_path, self.log_file, 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_0e6c679b","line":295,"in_reply_to":"9abb7d3a_82da1115","updated":"2016-06-02 16:23:16.000000000","message":"Done","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7a040400163a87db325df608d76bc0d1022bcde6","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        storlet_request \u003d DockerStorletRequest("},{"line_number":294,"context_line":"            \u0027test_account\u0027, Request.blank(\u0027/\u0027), {})"},{"line_number":295,"context_line":"        storlet_request.stream \u003d StringIO()"},{"line_number":296,"context_line":"        self.protocol \u003d \\"},{"line_number":297,"context_line":"            storlet_gateway.storlet_runtime.StorletInvocationProtocol("},{"line_number":298,"context_line":"                storlet_request, self.pipe_path, self.log_file, 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_e4a2004b","line":295,"in_reply_to":"9abb7d3a_82da1115","updated":"2016-06-02 09:53:07.000000000","message":"Makes sense, thx!","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"0c0fdedc1b65f4bfdc4e53e9d2e69a74c98935fb","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            self.assertEqual(pipe_called, len(pipes))"},{"line_number":319,"context_line":"            pipes \u003d iter(pipes)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            # data write is not directry closed"},{"line_number":322,"context_line":"            # data read is closed by remote"},{"line_number":323,"context_line":"            input_data_read_fd, input_data_write_fd \u003d next(pipes)"},{"line_number":324,"context_line":"            self.assertFalse(input_data_read_fd.closed)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_e20ddd8f","line":321,"range":{"start_line":321,"start_character":32,"end_line":321,"end_character":40},"updated":"2016-06-02 06:14:41.000000000","message":"nits) directly?","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7017f29cb5b58fe8cf55bb2175efa5e38bc0784d","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            self.assertEqual(pipe_called, len(pipes))"},{"line_number":319,"context_line":"            pipes \u003d iter(pipes)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            # data write is not directry closed"},{"line_number":322,"context_line":"            # data read is closed by remote"},{"line_number":323,"context_line":"            input_data_read_fd, input_data_write_fd \u003d next(pipes)"},{"line_number":324,"context_line":"            self.assertFalse(input_data_read_fd.closed)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_4e04afc5","line":321,"range":{"start_line":321,"start_character":32,"end_line":321,"end_character":40},"in_reply_to":"9abb7d3a_e20ddd8f","updated":"2016-06-02 16:23:16.000000000","message":"Done","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"7a040400163a87db325df608d76bc0d1022bcde6","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            self.assertEqual(pipe_called, len(pipes))"},{"line_number":319,"context_line":"            pipes \u003d iter(pipes)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            # data write is not directry closed"},{"line_number":322,"context_line":"            # data read is closed by remote"},{"line_number":323,"context_line":"            input_data_read_fd, input_data_write_fd \u003d next(pipes)"},{"line_number":324,"context_line":"            self.assertFalse(input_data_read_fd.closed)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_24fec838","line":321,"range":{"start_line":321,"start_character":32,"end_line":321,"end_character":40},"in_reply_to":"9abb7d3a_e20ddd8f","updated":"2016-06-02 09:53:07.000000000","message":"will fix this","commit_id":"2692ca60ce915cbec147ce0f06bfbd9ec9b234d0"}]}
