)]}'
{"smaug/operationengine/engine/executors/base.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"393859410a5aca0a1071d0c22bb54fa931984ee8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        except Exception:\r"},{"line_number":51,"context_line":"            LOG.exception(_LE(\"Submit operation(%s), create log obj failed\"),\r"},{"line_number":52,"context_line":"                          operation_id)\r"},{"line_number":53,"context_line":"            return\r"},{"line_number":54,"context_line":"\r"},{"line_number":55,"context_line":"        self._do_submit_op(operation_id, triggered_time,\r"},{"line_number":56,"context_line":"                           expect_start_time, window_time, log_ref.id)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_7430149f","line":53,"updated":"2016-02-22 08:00:54.000000000","message":"I think this method should return a result or raise exceptions, to allow the logic who calls this method to tell if submit_operation succeeds or not.","commit_id":"14f84c623d0e3463c7100c019625d0e3a46b494e"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"cf55fbcae2b4a7859ed5282964b64d270433de1c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                      expect_start_time\r"},{"line_number":43,"context_line":"        \"\"\"\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"        log_ref \u003d objects.ScheduledOperationLog(context.get_admin_context())\r"},{"line_number":46,"context_line":"        log_ref.operation_id \u003d operation_id\r"},{"line_number":47,"context_line":"        log_ref.expect_start_time \u003d expect_start_time\r"},{"line_number":48,"context_line":"        log_ref.triggered_time \u003d triggered_time\r"},{"line_number":49,"context_line":"        log_ref.state \u003d execution_state.IN_PROGRESS\r"},{"line_number":50,"context_line":"        try:\r"},{"line_number":51,"context_line":"            log_ref.create()\r"},{"line_number":52,"context_line":"        except Exception:\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_8cf5e8cc","line":49,"range":{"start_line":45,"start_character":7,"end_line":49,"end_character":51},"updated":"2016-03-02 10:23:54.000000000","message":"I really do not suggest to write db Operation here, that will this class with two responsibilities here,one to operate the DB records, another to execute the task. it\u0027s not a good practice in one method or class especially in abstract class. please think it over how to keep the class with one single responsibility.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"6c81a828dc80b1644d81d942a67947f9cfe19eeb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                      expect_start_time\r"},{"line_number":43,"context_line":"        \"\"\"\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"        log_ref \u003d objects.ScheduledOperationLog(context.get_admin_context())\r"},{"line_number":46,"context_line":"        log_ref.operation_id \u003d operation_id\r"},{"line_number":47,"context_line":"        log_ref.expect_start_time \u003d expect_start_time\r"},{"line_number":48,"context_line":"        log_ref.triggered_time \u003d triggered_time\r"},{"line_number":49,"context_line":"        log_ref.state \u003d execution_state.IN_PROGRESS\r"},{"line_number":50,"context_line":"        try:\r"},{"line_number":51,"context_line":"            log_ref.create()\r"},{"line_number":52,"context_line":"        except Exception:\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_5a07d2c9","line":49,"range":{"start_line":45,"start_character":7,"end_line":49,"end_character":51},"in_reply_to":"7af24918_8cf5e8cc","updated":"2016-03-03 03:08:20.000000000","message":"really good suggestion. thanks.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"cf55fbcae2b4a7859ed5282964b64d270433de1c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"    @abstractmethod\r"},{"line_number":61,"context_line":"    def cancel_operation(self, operation_id):\r"},{"line_number":62,"context_line":"        \"\"\"Cancel operation which will be deleted.\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"        :param operation_id: ID of operation\r"},{"line_number":65,"context_line":"        \"\"\"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_2c649420","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":17},"updated":"2016-03-02 10:23:54.000000000","message":"suggest to add more detailed description to be more exact explained","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"6c81a828dc80b1644d81d942a67947f9cfe19eeb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"\r"},{"line_number":60,"context_line":"    @abstractmethod\r"},{"line_number":61,"context_line":"    def cancel_operation(self, operation_id):\r"},{"line_number":62,"context_line":"        \"\"\"Cancel operation which will be deleted.\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"        :param operation_id: ID of operation\r"},{"line_number":65,"context_line":"        \"\"\"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_7a128e0a","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":17},"in_reply_to":"7af24918_2c649420","updated":"2016-03-03 03:08:20.000000000","message":"got it. thanks.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"}],"smaug/operationengine/engine/executors/record_operation_log_executor.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"ce3036c2de53d146da5542312fed3e2935298f3b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027real_operation_executor\u0027,\r"},{"line_number":29,"context_line":"        default\u003d\"smaug.operationengine.engine.executors.\"\r"},{"line_number":30,"context_line":"                \"thread_pool_executor.ThreadPoolExecutor\",\r"},{"line_number":31,"context_line":"        help\u003d\u0027The engine that we used\u0027)\r"},{"line_number":32,"context_line":"]\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"CONF \u003d cfg.CONF\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_c25a2983","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":24},"updated":"2016-03-08 06:42:53.000000000","message":"engine?","commit_id":"b33886e09a67cd21c9d85f68d4f5915eecd7f999"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"e28750a4d79774affa3ccef5f145cdf6df5c72fd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \u0027real_operation_executor\u0027,\r"},{"line_number":29,"context_line":"        default\u003d\"smaug.operationengine.engine.executors.\"\r"},{"line_number":30,"context_line":"                \"thread_pool_executor.ThreadPoolExecutor\",\r"},{"line_number":31,"context_line":"        help\u003d\u0027The engine that we used\u0027)\r"},{"line_number":32,"context_line":"]\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"CONF \u003d cfg.CONF\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_983091ea","line":31,"range":{"start_line":31,"start_character":18,"end_line":31,"end_character":24},"in_reply_to":"5aef4532_c25a2983","updated":"2016-03-08 07:14:29.000000000","message":"got it. thanks.","commit_id":"b33886e09a67cd21c9d85f68d4f5915eecd7f999"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class RecordOperationLogExecutor(base.BaseExecutor):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def __init__(self):"},{"line_number":44,"context_line":"        super(RecordOperationLogExecutor, self).__init__()"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_fd497761","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":52},"updated":"2016-04-19 13:03:32.000000000","message":"Creating logs should not be part of the executor system. We should remove all logging from this area and move it to other parts of smaug (such as, operations)","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"}],"smaug/operationengine/engine/executors/scheculed_operation_execution_state.py":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"cf55fbcae2b4a7859ed5282964b64d270433de1c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012, Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_0730919d","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":11},"updated":"2016-03-02 10:23:54.000000000","message":"update the year and company.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"6c81a828dc80b1644d81d942a67947f9cfe19eeb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012, Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_da748269","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":11},"in_reply_to":"7af24918_0730919d","updated":"2016-03-03 03:08:20.000000000","message":"Done","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"cf55fbcae2b4a7859ed5282964b64d270433de1c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"IN_PROGRESS \u003d \u0027in_progress\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"SUCCESS \u003d \u0027sucdess\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"FAILED \u003d \u0027failed\u0027"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_87e30105","line":21,"range":{"start_line":21,"start_character":11,"end_line":21,"end_character":18},"updated":"2016-03-02 10:23:54.000000000","message":"s/\u0027sucdess\u0027/\u0027success\u0027","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"6c81a828dc80b1644d81d942a67947f9cfe19eeb","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"IN_PROGRESS \u003d \u0027in_progress\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"SUCCESS \u003d \u0027sucdess\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"FAILED \u003d \u0027failed\u0027"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_ba71b678","line":21,"range":{"start_line":21,"start_character":11,"end_line":21,"end_character":18},"in_reply_to":"7af24918_87e30105","updated":"2016-03-03 03:08:20.000000000","message":"Done","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"}],"smaug/operationengine/engine/executors/scheduled_operation_execution_state.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Scheduled operation state"},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"IN_PROGRESS \u003d \u0027in_progress\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"SUCCESS \u003d \u0027success\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"FAILED \u003d \u0027failed\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DROPPED_OUT_OF_WINDOW \u003d \u0027dropped_out_of_window\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_1dda734c","line":23,"range":{"start_line":17,"start_character":0,"end_line":23,"end_character":47},"updated":"2016-04-19 13:03:32.000000000","message":"this should not be in the executors directory","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"}],"smaug/operationengine/engine/executors/thread_pool_executor.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"393859410a5aca0a1071d0c22bb54fa931984ee8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"\r"},{"line_number":38,"context_line":"class ThreadPoolExecutor(base.BaseExecutor):\r"},{"line_number":39,"context_line":"    def __init__(self, operation_manager\u003dNone, thread_count\u003d10):\r"},{"line_number":40,"context_line":"        super(ThreadPoolExecutor, self).__init__()\r"},{"line_number":41,"context_line":"\r"},{"line_number":42,"context_line":"        if thread_count is None:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_d6d00756","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":40},"updated":"2016-02-22 08:00:54.000000000","message":"operation_manager can\u0027t be default None.","commit_id":"14f84c623d0e3463c7100c019625d0e3a46b494e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"393859410a5aca0a1071d0c22bb54fa931984ee8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"\r"},{"line_number":38,"context_line":"class ThreadPoolExecutor(base.BaseExecutor):\r"},{"line_number":39,"context_line":"    def __init__(self, operation_manager\u003dNone, thread_count\u003d10):\r"},{"line_number":40,"context_line":"        super(ThreadPoolExecutor, self).__init__()\r"},{"line_number":41,"context_line":"\r"},{"line_number":42,"context_line":"        if thread_count is None:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_36c0537c","line":39,"range":{"start_line":39,"start_character":60,"end_line":39,"end_character":62},"updated":"2016-02-22 08:00:54.000000000","message":"thread_count\u003dNone","commit_id":"14f84c623d0e3463c7100c019625d0e3a46b494e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"393859410a5aca0a1071d0c22bb54fa931984ee8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            difference \u003d now - expect_start_time\r"},{"line_number":99,"context_line":"            if difference \u003e grace_time:\r"},{"line_number":100,"context_line":"                log_ref.end_time \u003d now\r"},{"line_number":101,"context_line":"                log_ref.actual_start_time \u003d now\r"},{"line_number":102,"context_line":"                log_ref.state \u003d \u0027dropped_out_of_window\u0027\r"},{"line_number":103,"context_line":"                try:\r"},{"line_number":104,"context_line":"                    log_ref.save()\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_f4d9c484","line":101,"updated":"2016-02-22 08:00:54.000000000","message":"The operation doesn\u0027t actually run, why record this actual_start_time?","commit_id":"14f84c623d0e3463c7100c019625d0e3a46b494e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"ce3036c2de53d146da5542312fed3e2935298f3b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            self._before_execute_operation_fun(operation_id, **kwargs)\r"},{"line_number":120,"context_line":"\r"},{"line_number":121,"context_line":"        if operation_id in self._operation_to_cancel:\r"},{"line_number":122,"context_line":"            return execution_state.SUCCESS\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"        if expect_start_time and window_time:\r"},{"line_number":125,"context_line":"            now \u003d utils.utcnow()\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_fdd1c8fc","line":122,"range":{"start_line":122,"start_character":35,"end_line":122,"end_character":42},"updated":"2016-03-08 06:42:53.000000000","message":"why return SUCCESS while operation canceled?","commit_id":"b33886e09a67cd21c9d85f68d4f5915eecd7f999"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"e28750a4d79774affa3ccef5f145cdf6df5c72fd","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            self._before_execute_operation_fun(operation_id, **kwargs)\r"},{"line_number":120,"context_line":"\r"},{"line_number":121,"context_line":"        if operation_id in self._operation_to_cancel:\r"},{"line_number":122,"context_line":"            return execution_state.SUCCESS\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"        if expect_start_time and window_time:\r"},{"line_number":125,"context_line":"            now \u003d utils.utcnow()\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_189da159","line":122,"range":{"start_line":122,"start_character":35,"end_line":122,"end_character":42},"in_reply_to":"5aef4532_fdd1c8fc","updated":"2016-03-08 07:14:29.000000000","message":"If one operation is cancelled, it means that it is deleted and the corresponding operation log record is deleted too. So, we can return any state.","commit_id":"b33886e09a67cd21c9d85f68d4f5915eecd7f999"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ThreadPoolExecutor(base_executor.RecordOperationLogExecutor):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, thread_count\u003dNone):"},{"line_number":38,"context_line":"        super(ThreadPoolExecutor, self).__init__()"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_7da3a700","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":67},"updated":"2016-04-19 13:03:32.000000000","message":"ThreadPoolExecutor should inherit from the base executor","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self._operation_to_run.clear()"},{"line_number":51,"context_line":"        self._operation_to_cancel.clear()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def cancel_operation(self, operation_id):"},{"line_number":54,"context_line":"        with self._lock:"},{"line_number":55,"context_line":"            if operation_id in self._operation_to_run:"},{"line_number":56,"context_line":"                self._operation_to_cancel.add(operation_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_72cf5629","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":45},"updated":"2016-04-19 13:03:32.000000000","message":"I believe the cancel_operation should get a ScheduledOperationState id.\nOtherwise, we can have 2 protects in the same time - one is canceled, and the other is canceled as a result.","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        with self._lock:"},{"line_number":60,"context_line":"            return operation_id in self._operation_to_cancel"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _execute_operation(self, operation_id, expect_start_time\u003dNone,"},{"line_number":63,"context_line":"                           window_time\u003dNone, **kwargs):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        def callback(f):"},{"line_number":66,"context_line":"            self._finish_operation(operation_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_12da624c","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":55},"updated":"2016-04-19 13:03:32.000000000","message":"missing execute_operation method (which should get ScheduledOperationState id also)","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"}],"smaug/operationengine/manager.py":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"cf55fbcae2b4a7859ed5282964b64d270433de1c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                  \"request_spec:%s\", request_spec)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def init_host(self):"},{"line_number":53,"context_line":"        self._executor \u003d thread_pool_executor.ThreadPoolExecutor("},{"line_number":54,"context_line":"            self._operation_manager)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self._time_trigger \u003d time_trigger.TimeTrigger(self._executor)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_a7739d7f","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":64},"updated":"2016-03-02 10:23:54.000000000","message":"please consider to load the instance from config file to improve the flexibility.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"6c81a828dc80b1644d81d942a67947f9cfe19eeb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                  \"request_spec:%s\", request_spec)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def init_host(self):"},{"line_number":53,"context_line":"        self._executor \u003d thread_pool_executor.ThreadPoolExecutor("},{"line_number":54,"context_line":"            self._operation_manager)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self._time_trigger \u003d time_trigger.TimeTrigger(self._executor)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_9a567acc","line":53,"range":{"start_line":53,"start_character":46,"end_line":53,"end_character":64},"in_reply_to":"7af24918_a7739d7f","updated":"2016-03-03 03:08:20.000000000","message":"good suggestion. thanks.","commit_id":"a255b5eea304770e89764ad70a807c70e5a68747"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"d0a65fe77ed70d3b0018a5c917e866e4c47621e5","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def init_host(self):"},{"line_number":56,"context_line":"        executor_cls \u003d importutils.import_class(CONF.operation_executor)"},{"line_number":57,"context_line":"        self._executor \u003d executor_cls(self._operation_manager)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def cleanup_host(self):"},{"line_number":60,"context_line":"        if self._executor:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5aef4532_9b8ff422","line":57,"range":{"start_line":57,"start_character":43,"end_line":57,"end_character":61},"updated":"2016-03-08 03:10:34.000000000","message":"if i am right that all the **Excutor** do not support OperationManager parameter, please check if it\u0027s a mistake here.","commit_id":"b8561b46b87cbec574393e2ba04a112ad1117b66"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"20949125f4b810f6bb3615859de717ffff339027","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def init_host(self):"},{"line_number":56,"context_line":"        executor_cls \u003d importutils.import_class(CONF.operation_executor)"},{"line_number":57,"context_line":"        self._executor \u003d executor_cls(self._operation_manager)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def cleanup_host(self):"},{"line_number":60,"context_line":"        if self._executor:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5aef4532_35a06843","line":57,"range":{"start_line":57,"start_character":43,"end_line":57,"end_character":61},"in_reply_to":"5aef4532_9b8ff422","updated":"2016-03-08 07:14:42.000000000","message":"yes. at present, the Executor classes don\u0027t need any arguments to be initiated. it is a mistake. thanks very much.","commit_id":"b8561b46b87cbec574393e2ba04a112ad1117b66"}],"smaug/operationengine/operation_manager.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"adb4899818dce11f3af21492ff864b14ec9b808e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cls.check_operation_definition(operation_definition)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def execute_operation(self, operation_type, project_id,"},{"line_number":60,"context_line":"                          operation_definition, log_obj):"},{"line_number":61,"context_line":"        \"\"\"Execute operation."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param operation_type: the type of operation"}],"source_content_type":"text/x-python","patch_set":32,"id":"1a122d0e_fde5f737","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":57},"updated":"2016-04-19 13:03:32.000000000","message":"who is supposed to create the log object for the operation manager?","commit_id":"339868fa65e6707e2528bff5bb4234690b4d6662"}],"smaug/services/operationengine/engine/executors/scheduled_operation_executor.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fecb2fef96de166094f125c2117fbd4783d25327","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        self._execute_operation(operation_id, self._run_operation, param)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _run_operation(self, operation_id, param):"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        def _run():"},{"line_number":87,"context_line":"            check_item \u003d [self._CHECK_ITEMS[\u0027is_canceled\u0027]]"},{"line_number":88,"context_line":"            if self._check_operation(operation_id, check_item):"},{"line_number":89,"context_line":"                return"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            try:"},{"line_number":92,"context_line":"                operation \u003d objects.ScheduledOperation.get_by_id("},{"line_number":93,"context_line":"                    context.get_admin_context(), operation_id)"},{"line_number":94,"context_line":"            except Exception:"},{"line_number":95,"context_line":"                LOG.exception(_LE(\"Run operation(%s), get operation failed\"),"},{"line_number":96,"context_line":"                              operation_id)"},{"line_number":97,"context_line":"                return"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            try:"},{"line_number":100,"context_line":"                self._operation_manager.run_operation("},{"line_number":101,"context_line":"                    operation.operation_type, operation.project_id,"},{"line_number":102,"context_line":"                    operation.operation_definition,"},{"line_number":103,"context_line":"                    param\u003dparam)"},{"line_number":104,"context_line":"            except Exception:"},{"line_number":105,"context_line":"                LOG.exception(_LE(\"Run operation(%s) failed\"), operation_id)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self._update_operation_state("},{"line_number":108,"context_line":"            operation_id,"},{"line_number":109,"context_line":"            {\u0027state\u0027: constants.OPERATION_STATE_RUNNING})"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        _run()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self._update_operation_state("},{"line_number":114,"context_line":"            operation_id,"},{"line_number":115,"context_line":"            {\u0027state\u0027: constants.OPERATION_STATE_REGISTERED})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _update_operation_state(self, operation_id, updates):"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_cd8cca81","line":115,"range":{"start_line":84,"start_character":4,"end_line":115,"end_character":60},"updated":"2016-05-31 08:58:12.000000000","message":"This is a bit odd. You only use _run() once just below.\nI think that what you want to do is:\n\n self._update_operation_state(\n            operation_id,\n            {\u0027state\u0027: constants.OPERATION_STATE_RUNNING})\n\n        try:\n            {content of _run()}\n        except:\n            ...\n        else:\n            self._update_operation_state(\n                operation_id,\n                {\u0027state\u0027: constants.OPERATION_STATE_REGISTERED})\n\nOr just use try/finally if exceptions can\u0027t happen inside the try block.","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"be3919317fc1811766a3edcef9daa8427ce8f21b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        self._execute_operation(operation_id, self._run_operation, param)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _run_operation(self, operation_id, param):"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        def _run():"},{"line_number":87,"context_line":"            check_item \u003d [self._CHECK_ITEMS[\u0027is_canceled\u0027]]"},{"line_number":88,"context_line":"            if self._check_operation(operation_id, check_item):"},{"line_number":89,"context_line":"                return"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            try:"},{"line_number":92,"context_line":"                operation \u003d objects.ScheduledOperation.get_by_id("},{"line_number":93,"context_line":"                    context.get_admin_context(), operation_id)"},{"line_number":94,"context_line":"            except Exception:"},{"line_number":95,"context_line":"                LOG.exception(_LE(\"Run operation(%s), get operation failed\"),"},{"line_number":96,"context_line":"                              operation_id)"},{"line_number":97,"context_line":"                return"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            try:"},{"line_number":100,"context_line":"                self._operation_manager.run_operation("},{"line_number":101,"context_line":"                    operation.operation_type, operation.project_id,"},{"line_number":102,"context_line":"                    operation.operation_definition,"},{"line_number":103,"context_line":"                    param\u003dparam)"},{"line_number":104,"context_line":"            except Exception:"},{"line_number":105,"context_line":"                LOG.exception(_LE(\"Run operation(%s) failed\"), operation_id)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        self._update_operation_state("},{"line_number":108,"context_line":"            operation_id,"},{"line_number":109,"context_line":"            {\u0027state\u0027: constants.OPERATION_STATE_RUNNING})"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        _run()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self._update_operation_state("},{"line_number":114,"context_line":"            operation_id,"},{"line_number":115,"context_line":"            {\u0027state\u0027: constants.OPERATION_STATE_REGISTERED})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _update_operation_state(self, operation_id, updates):"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_bf0ec738","line":115,"range":{"start_line":84,"start_character":4,"end_line":115,"end_character":60},"in_reply_to":"9abb7d3a_cd8cca81","updated":"2016-05-31 09:50:39.000000000","message":"Done","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fecb2fef96de166094f125c2117fbd4783d25327","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            state_ref \u003d objects.ScheduledOperationState.get_by_operation_id("},{"line_number":122,"context_line":"                ctxt, operation_id)"},{"line_number":123,"context_line":"            for item in updates:"},{"line_number":124,"context_line":"                setattr(state_ref, item, updates.get(item))"},{"line_number":125,"context_line":"            state_ref.save()"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            LOG.exception(_LE(\"Execute operation(%s), update state failed\"),"}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_2dd4761e","line":124,"range":{"start_line":123,"start_character":12,"end_line":124,"end_character":59},"updated":"2016-05-31 08:58:12.000000000","message":"for item, value in six.iteritems(updates):\n    setattr(state_ref, item, value)","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"be3919317fc1811766a3edcef9daa8427ce8f21b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            state_ref \u003d objects.ScheduledOperationState.get_by_operation_id("},{"line_number":122,"context_line":"                ctxt, operation_id)"},{"line_number":123,"context_line":"            for item in updates:"},{"line_number":124,"context_line":"                setattr(state_ref, item, updates.get(item))"},{"line_number":125,"context_line":"            state_ref.save()"},{"line_number":126,"context_line":"        except Exception:"},{"line_number":127,"context_line":"            LOG.exception(_LE(\"Execute operation(%s), update state failed\"),"}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_4201c404","line":124,"range":{"start_line":123,"start_character":12,"end_line":124,"end_character":59},"in_reply_to":"9abb7d3a_2dd4761e","updated":"2016-05-31 09:50:39.000000000","message":"Done","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"}],"smaug/services/operationengine/engine/executors/thread_pool_executor.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fecb2fef96de166094f125c2117fbd4783d25327","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            thread_count \u003d CONF.thread_count"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._pool \u003d futures.ThreadPoolExecutor(thread_count)"},{"line_number":44,"context_line":"        self._operation_to_run \u003d defaultdict(lambda: 0)"},{"line_number":45,"context_line":"        self._operation_to_cancel \u003d set()"},{"line_number":46,"context_line":"        self._lock \u003d RLock()"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_0dcb721f","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":55},"updated":"2016-05-31 08:58:12.000000000","message":"defaultdict(int)","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"be3919317fc1811766a3edcef9daa8427ce8f21b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            thread_count \u003d CONF.thread_count"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self._pool \u003d futures.ThreadPoolExecutor(thread_count)"},{"line_number":44,"context_line":"        self._operation_to_run \u003d defaultdict(lambda: 0)"},{"line_number":45,"context_line":"        self._operation_to_cancel \u003d set()"},{"line_number":46,"context_line":"        self._lock \u003d RLock()"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_e28b9866","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":55},"in_reply_to":"9abb7d3a_0dcb721f","updated":"2016-05-31 09:50:39.000000000","message":"Done","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"fecb2fef96de166094f125c2117fbd4783d25327","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _check_operation(self, operation_id, check_items):"},{"line_number":67,"context_line":"        with self._lock:"},{"line_number":68,"context_line":"            for item in check_items:"},{"line_number":69,"context_line":"                if self._check_functions[item](operation_id):"},{"line_number":70,"context_line":"                    return True"},{"line_number":71,"context_line":"            return False"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _execute_operation(self, operation_id, function, param):"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_886470e5","line":71,"range":{"start_line":68,"start_character":12,"end_line":71,"end_character":24},"updated":"2016-05-31 08:58:12.000000000","message":"I think:\n return any(self._check_functions[item](operation_id) for item in check_items)\n\nIs clearer.\n\nFor the very list use:\n for item in check_items:\n     if self._check_functions[item](operation_id):\n         return True\n     else:\n         return False\n\nTo signal that false is do to exhausting the list.","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"be3919317fc1811766a3edcef9daa8427ce8f21b","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _check_operation(self, operation_id, check_items):"},{"line_number":67,"context_line":"        with self._lock:"},{"line_number":68,"context_line":"            for item in check_items:"},{"line_number":69,"context_line":"                if self._check_functions[item](operation_id):"},{"line_number":70,"context_line":"                    return True"},{"line_number":71,"context_line":"            return False"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _execute_operation(self, operation_id, function, param):"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9abb7d3a_657172a8","line":71,"range":{"start_line":68,"start_character":12,"end_line":71,"end_character":24},"in_reply_to":"9abb7d3a_886470e5","updated":"2016-05-31 09:50:39.000000000","message":"Done","commit_id":"7a428f33575da73f3c51b3c5ddb08cdab625009b"}]}
