)]}'
{"src/java/SDaemon/src/main/org/openstack/storlet/daemon/SCancelTask.java":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9c7f6c0aeacaf8317d5024ce071af54ce4eab98d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            respMessage \u003d new String(\"Task id \" + this.taskId_"},{"line_number":64,"context_line":"                + \"is not found\");"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":"        return respond(this.sOut_, true, new String(\"OK\"), null);"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":"}"},{"line_number":69,"context_line":"/* \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d END OF FILE \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d */"}],"source_content_type":"text/x-java","patch_set":33,"id":"3fa7e38b_0dc50e90","line":66,"range":{"start_line":66,"start_character":35,"end_line":66,"end_character":57},"updated":"2020-01-27 10:08:45.000000000","message":"We should use respStatus and respMessage instead of hard coded true/OK.","commit_id":"898700ab34eabd9cefca10d1bfc52584ce4e3ead"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"dc5dc65eebb80312425892132496051f525a2828","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            respMessage \u003d new String(\"Task id \" + this.taskId_"},{"line_number":64,"context_line":"                + \"is not found\");"},{"line_number":65,"context_line":"        }"},{"line_number":66,"context_line":"        return respond(this.sOut_, true, new String(\"OK\"), null);"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":"}"},{"line_number":69,"context_line":"/* \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d END OF FILE \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d */"}],"source_content_type":"text/x-java","patch_set":33,"id":"3fa7e38b_adb39a34","line":66,"range":{"start_line":66,"start_character":35,"end_line":66,"end_character":57},"in_reply_to":"3fa7e38b_0dc50e90","updated":"2020-01-27 10:09:45.000000000","message":"Done","commit_id":"898700ab34eabd9cefca10d1bfc52584ce4e3ead"}],"storlets/agent/daemon/server.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ec900428fce9923ae1facc00c83a060cdf4b54a2","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            os.close(fileno)"},{"line_number":153,"context_line":"        except OSError as e:"},{"line_number":154,"context_line":"            if e.errno !\u003d errno.EBADF:"},{"line_number":155,"context_line":"                raise"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_f95fd00b","line":154,"updated":"2020-04-13 06:49:55.000000000","message":"I was wondering why we specialize EBADF here but... it\u0027s originally coded just moved from other method in this refactoring work.\n\nSo let\u0027s leave it as it is.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6fd6cee29ffe7e86dd2fb5713304ac6a89aafc75","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            os.close(fileno)"},{"line_number":153,"context_line":"        except OSError as e:"},{"line_number":154,"context_line":"            if e.errno !\u003d errno.EBADF:"},{"line_number":155,"context_line":"                raise"},{"line_number":156,"context_line":"            pass"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_7cebaeaf","line":154,"in_reply_to":"3f4c43b2_f95fd00b","updated":"2020-04-13 07:50:50.000000000","message":"We take care of EBADF here because we get it when the file descriptor is actually closed.\n\nBecause this is a cleanup function to make sure all fds are closed, it initially tries to close all, and ignore EBADF caused by already closed fds.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"}],"storlets/gateway/gateways/docker/runtime.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ec900428fce9923ae1facc00c83a060cdf4b54a2","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        client \u003d SBusClient(self.storlet_pipe_path)"},{"line_number":649,"context_line":"        try:"},{"line_number":650,"context_line":"            resp \u003d client.execute(self.srequest.params, self.remote_fds)"},{"line_number":651,"context_line":"            if not resp.status:"},{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_d9f774d4","line":652,"range":{"start_line":651,"start_character":0,"end_line":652,"end_character":79},"updated":"2020-04-13 06:49:55.000000000","message":"Maybe this if statement is NOT necessary because A. the response from sbus daemon should include status, B. SBusClient will raise if an error occurred. i.e. we won\u0027t meet the SBusResponse with non-status code, will we?","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"79529bb99afd60c2c1701f120113fb5a68a5d521","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        client \u003d SBusClient(self.storlet_pipe_path)"},{"line_number":649,"context_line":"        try:"},{"line_number":650,"context_line":"            resp \u003d client.execute(self.srequest.params, self.remote_fds)"},{"line_number":651,"context_line":"            if not resp.status:"},{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_6963e0dd","line":652,"range":{"start_line":651,"start_character":0,"end_line":652,"end_character":79},"in_reply_to":"3f4c43b2_2e0d5e3e","updated":"2020-04-14 01:43:48.000000000","message":"IIUC StorletRuntimeException should be result in 5xx Error.\n\nThe false status for execute command means that there is something wrong with storlet-daemon-factory or storlet-daemon, but it\u0027s really difficult to identify the cause to distinguish an failure caused by application bug from the one caused by storlets bug(or failure).\n\nWe can implement some more better handling, but I\u0027d like to leave it at the moment, because this change doesn\u0027t change current behavior.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"c60eac24400e75486476f14083fefc8a74b8ec27","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        client \u003d SBusClient(self.storlet_pipe_path)"},{"line_number":649,"context_line":"        try:"},{"line_number":650,"context_line":"            resp \u003d client.execute(self.srequest.params, self.remote_fds)"},{"line_number":651,"context_line":"            if not resp.status:"},{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_2e0d5e3e","line":652,"range":{"start_line":651,"start_character":0,"end_line":652,"end_character":79},"in_reply_to":"3f4c43b2_3c2f66f7","updated":"2020-04-14 01:35:08.000000000","message":"OIC. I missed the fact, just \u0027OK\u0027 or \u0027some error message\u0027 would be status but it\u0027s bool (True or False).\n\nWait. Assuming that, is it actually RuntimeException? storlets daemon handles the *user storlet app error* correctly so that it may be kinda 4xx errors rather than 5xx.\n\nI didn\u0027t dig yet how the StorletRuntimeException is handled in the upper layer but it looks 5xx as well as runtime error.\n\nWe may not care the status detail ever though.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7d3a07e29c3e466c0f2382c36ff7af2feecfec9f","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        client \u003d SBusClient(self.storlet_pipe_path)"},{"line_number":649,"context_line":"        try:"},{"line_number":650,"context_line":"            resp \u003d client.execute(self.srequest.params, self.remote_fds)"},{"line_number":651,"context_line":"            if not resp.status:"},{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_f97de2e7","line":652,"range":{"start_line":651,"start_character":0,"end_line":652,"end_character":79},"in_reply_to":"3f4c43b2_6963e0dd","updated":"2020-04-15 01:16:39.000000000","message":"fair enough.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6fd6cee29ffe7e86dd2fb5713304ac6a89aafc75","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        client \u003d SBusClient(self.storlet_pipe_path)"},{"line_number":649,"context_line":"        try:"},{"line_number":650,"context_line":"            resp \u003d client.execute(self.srequest.params, self.remote_fds)"},{"line_number":651,"context_line":"            if not resp.status:"},{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_3c2f66f7","line":652,"range":{"start_line":651,"start_character":0,"end_line":652,"end_character":79},"in_reply_to":"3f4c43b2_d9f774d4","updated":"2020-04-13 07:50:50.000000000","message":"This is required because resp.status is False when remote server returns some failure response.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ec900428fce9923ae1facc00c83a060cdf4b54a2","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"},{"line_number":656,"context_line":"            else:"},{"line_number":657,"context_line":"                self.task_id \u003d resp.task_id"},{"line_number":658,"context_line":"        except SBusClientException:"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_3932d8a8","line":655,"updated":"2020-04-13 06:49:55.000000000","message":"I saw the task id would be optional as inline comment but this code seems to force task_id exists... curious.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6fd6cee29ffe7e86dd2fb5713304ac6a89aafc75","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                raise StorletRuntimeException(\"Failed to send execute command\")"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"            if not resp.task_id:"},{"line_number":655,"context_line":"                raise StorletRuntimeException(\"Missing task id\")"},{"line_number":656,"context_line":"            else:"},{"line_number":657,"context_line":"                self.task_id \u003d resp.task_id"},{"line_number":658,"context_line":"        except SBusClientException:"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_7c044e7c","line":655,"in_reply_to":"3f4c43b2_3932d8a8","updated":"2020-04-13 07:50:50.000000000","message":"I think I should update the wording.\nBy \"optional\" I intended to mean that task_id is not required in all commands, but is required in EXECUTE.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"}],"storlets/sbus/client/client.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ec900428fce9923ae1facc00c83a060cdf4b54a2","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            raise SBusClientMalformedResponse(\u0027Got malformed response\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # task_id is currently optional"},{"line_number":59,"context_line":"        task_id \u003d resp.get(\u0027task_id\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        return SBusResponse(status, message, task_id)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_9927ac65","line":59,"updated":"2020-04-13 06:49:55.000000000","message":"Oh, here it is. task_id should be optional.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"cdf3950c3b98c5992fdf18f520e0a36eea238030","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            raise SBusClientMalformedResponse(\u0027Got malformed response\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # task_id is currently optional"},{"line_number":59,"context_line":"        task_id \u003d resp.get(\u0027task_id\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        return SBusResponse(status, message, task_id)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_571e8b70","line":59,"in_reply_to":"3f4c43b2_9927ac65","updated":"2020-04-13 09:03:34.000000000","message":"Updated my comment here to address another your comment.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"}],"storlets/sbus/datagram.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ec900428fce9923ae1facc00c83a060cdf4b54a2","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @property"},{"line_number":224,"context_line":"    def service_out_fd(self):"},{"line_number":225,"context_line":"        return self._find_fd(sbus_fd.SBUS_FD_SERVICE_OUT)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @property"},{"line_number":228,"context_line":"    def object_out_fds(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_194f1cbe","line":225,"updated":"2020-04-13 06:49:55.000000000","message":"Use of find_fd for this case may be brittle because it may return one of multiple service_out fd instances....","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"79529bb99afd60c2c1701f120113fb5a68a5d521","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @property"},{"line_number":224,"context_line":"    def service_out_fd(self):"},{"line_number":225,"context_line":"        return self._find_fd(sbus_fd.SBUS_FD_SERVICE_OUT)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @property"},{"line_number":228,"context_line":"    def object_out_fds(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_4947044d","line":225,"in_reply_to":"3f4c43b2_09385cd1","updated":"2020-04-14 01:43:48.000000000","message":"\u003e Are you meaning _required_fdtypes field in SBusExecuteDatagram.\n\nYes, correct. Sorry for making confusion.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d7023489b46de7661cde741310e5bd9627372f44","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @property"},{"line_number":224,"context_line":"    def service_out_fd(self):"},{"line_number":225,"context_line":"        return self._find_fd(sbus_fd.SBUS_FD_SERVICE_OUT)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @property"},{"line_number":228,"context_line":"    def object_out_fds(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_5203390e","line":225,"in_reply_to":"3f4c43b2_194f1cbe","updated":"2020-04-13 09:06:33.000000000","message":"We always expect one service_out_fd in each ExecutionDatagram (and as we do for ServiceDatagram), and it\u0027s asserted by validation.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"c60eac24400e75486476f14083fefc8a74b8ec27","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @property"},{"line_number":224,"context_line":"    def service_out_fd(self):"},{"line_number":225,"context_line":"        return self._find_fd(sbus_fd.SBUS_FD_SERVICE_OUT)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @property"},{"line_number":228,"context_line":"    def object_out_fds(self):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f4c43b2_09385cd1","line":225,"in_reply_to":"3f4c43b2_5203390e","updated":"2020-04-14 01:35:08.000000000","message":"Are you meaning _required_fdtypes field in *SBusExecuteDatagram?\nit\u0027s still independent for each subclass but... it may be fair enough to leave it.","commit_id":"17e8d793e745e58bcce307963e196cdee84fb9fe"}]}
