)]}'
{"smaug/operationengine/api.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"6d2ce04cf0dafbdeea622824208ce9ec68651c4a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            OperationEngineAPI()"},{"line_number":34,"context_line":"        super(API, self).__init__(db_driver)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":37,"context_line":"        self.operationengine_rpcapi.create_scheduled_operation(context,"},{"line_number":38,"context_line":"                                                               operation_id,"},{"line_number":39,"context_line":"                                                               trigger_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_903422df","line":36,"range":{"start_line":36,"start_character":50,"end_line":36,"end_character":62},"updated":"2016-02-14 07:06:51.000000000","message":"The operation_id passed as a parameter, does this mean that there\u0027ll be another method to create operation in ScheduledOperation table?","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"a856230f44d4102e3271afc5ed846c737d2078a0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            OperationEngineAPI()"},{"line_number":34,"context_line":"        super(API, self).__init__(db_driver)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":37,"context_line":"        self.operationengine_rpcapi.create_scheduled_operation(context,"},{"line_number":38,"context_line":"                                                               operation_id,"},{"line_number":39,"context_line":"                                                               trigger_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_f6800649","line":36,"range":{"start_line":36,"start_character":50,"end_line":36,"end_character":62},"in_reply_to":"dae33548_903422df","updated":"2016-02-14 09:45:15.000000000","message":"the steps are as follows:\n1. create a record in the ScheduledOperation table at API service.\n2. invoke this api.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"}],"smaug/operationengine/engine/trigger_manager.py":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"6168186fa776cab8627e24273650be3d6ff6914b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"    def register_operation(self, trigger_type, operation_id,\r"},{"line_number":78,"context_line":"                           operation_name, **kwargs):\r"},{"line_number":79,"context_line":"        \"\"\"Check operation definition.\r"},{"line_number":80,"context_line":"\r"},{"line_number":81,"context_line":"        :param trigger_type: The type of trigger\r"},{"line_number":82,"context_line":"        :param operation_id: ID of the operation\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_488d6f7a","line":79,"range":{"start_line":79,"start_character":11,"end_line":79,"end_character":16},"updated":"2016-02-27 08:39:24.000000000","message":"please update the docstring with the correct description, I guess you just copy from other place.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"bd573cd11b3ab5c5a89a656ebb739ab56b2a7060","unresolved":false,"context_lines":[{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"    def register_operation(self, trigger_type, operation_id,\r"},{"line_number":78,"context_line":"                           operation_name, **kwargs):\r"},{"line_number":79,"context_line":"        \"\"\"Check operation definition.\r"},{"line_number":80,"context_line":"\r"},{"line_number":81,"context_line":"        :param trigger_type: The type of trigger\r"},{"line_number":82,"context_line":"        :param operation_id: ID of the operation\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_7bde5f6e","line":79,"range":{"start_line":79,"start_character":11,"end_line":79,"end_character":16},"in_reply_to":"9aed3d3a_488d6f7a","updated":"2016-03-08 08:53:31.000000000","message":"got it. thanks.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"}],"smaug/operationengine/engine/triggers/__init__.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"381a865a7b408de837a9a12ad022123b86264029","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class BaseTrigger(object):\r"},{"line_number":22,"context_line":"    \"\"\"Trigger base class that all Triggers should inherit from\"\"\"\r"},{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"    TRIGGER_TYPE \u003d \"\"\r"},{"line_number":25,"context_line":"\r"},{"line_number":26,"context_line":"    def __init__(self, executor):\r"},{"line_number":27,"context_line":"        super(BaseTrigger, self).__init__()\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"7af24918_03a0708f","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":16},"updated":"2016-03-02 15:28:11.000000000","message":"Please consider changing this to abstractmethod that returns the type \n\nget_type(..)","commit_id":"35280c856f817b61a8628353009786a71fedb20f"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"4a16e6f9b02f4b0c8810210ab02076b8388945ad","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        pass\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    @abstractmethod\r"},{"line_number":36,"context_line":"    def shutdown():\r"},{"line_number":37,"context_line":"        pass\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    @abstractmethod\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_2a7fa415","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":16},"updated":"2016-03-11 02:51:38.000000000","message":"This method must have a first parameter  \u0027self\u0027.\n\nRefer to this link:\n\nhttps://review.openstack.org/#/c/276081/25/smaug/operationengine/engine/triggers/timetrigger/time_trigger.py#71","commit_id":"0b5ad04da91648f477c84b5e6918eaadada96f43"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"e935e54e8d5ab323e10b40ad6bfb6c435ac79744","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        pass\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    @abstractmethod\r"},{"line_number":36,"context_line":"    def shutdown():\r"},{"line_number":37,"context_line":"        pass\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    @abstractmethod\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_65c71f64","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":16},"in_reply_to":"5aef4532_2a7fa415","updated":"2016-03-11 03:25:56.000000000","message":"got it. thanks.","commit_id":"0b5ad04da91648f477c84b5e6918eaadada96f43"}],"smaug/operationengine/engine/triggers/timetrigger/time_trigger.py":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"6168186fa776cab8627e24273650be3d6ff6914b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            next_wake_up_time \u003d job_store.get_next_run_time()\r"},{"line_number":158,"context_line":"\r"},{"line_number":159,"context_line":"        def timedelta_seconds(delta):\r"},{"line_number":160,"context_line":"            return delta.days * 24 * 60 * 60 + delta.seconds +\\\r"},{"line_number":161,"context_line":"                delta.microseconds / 1000000.0\r"},{"line_number":162,"context_line":"\r"},{"line_number":163,"context_line":"        # Determine the delay until this method should be called again\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_687953f6","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":29},"updated":"2016-02-27 08:39:24.000000000","message":"try to avoid using the \"\\\" for line continuation; suggest to define a constant member instead of using digit directly.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"bd573cd11b3ab5c5a89a656ebb739ab56b2a7060","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            next_wake_up_time \u003d job_store.get_next_run_time()\r"},{"line_number":158,"context_line":"\r"},{"line_number":159,"context_line":"        def timedelta_seconds(delta):\r"},{"line_number":160,"context_line":"            return delta.days * 24 * 60 * 60 + delta.seconds +\\\r"},{"line_number":161,"context_line":"                delta.microseconds / 1000000.0\r"},{"line_number":162,"context_line":"\r"},{"line_number":163,"context_line":"        # Determine the delay until this method should be called again\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_db6173aa","line":160,"range":{"start_line":160,"start_character":25,"end_line":160,"end_character":29},"in_reply_to":"9aed3d3a_687953f6","updated":"2016-03-08 08:53:31.000000000","message":"got it. thanks.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"}],"smaug/operationengine/manager.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"6d2ce04cf0dafbdeea622824208ce9ec68651c4a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":46,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # get service id"},{"line_number":49,"context_line":"        if not self._service_id:"},{"line_number":50,"context_line":"            for i in range(3):"},{"line_number":51,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_3010b64e","line":48,"updated":"2016-02-14 07:06:51.000000000","message":"Suggest encapsulating this get service logic as an individual method.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"9e946b5034460916cb99554890bcdfc36a292185","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":46,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # get service id"},{"line_number":49,"context_line":"        if not self._service_id:"},{"line_number":50,"context_line":"            for i in range(3):"},{"line_number":51,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_16580afa","line":48,"in_reply_to":"dae33548_3010b64e","updated":"2016-02-14 09:47:30.000000000","message":"got it. thanks.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"6d2ce04cf0dafbdeea622824208ce9ec68651c4a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    pass"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            if not self._service_id:"},{"line_number":63,"context_line":"                LOG.ERROR(\"Create scheduled operation, get service id failed\")"},{"line_number":64,"context_line":"                return"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # get trigger"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_754b50b1","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":25},"updated":"2016-02-14 07:06:51.000000000","message":"LOG.ERROR-\u003eLOG.error\nAnd for this method, the constant string should be wrapped by _LE().\nThere are the same problem below as well. Please fix them together.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"a856230f44d4102e3271afc5ed846c737d2078a0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    pass"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"            if not self._service_id:"},{"line_number":63,"context_line":"                LOG.ERROR(\"Create scheduled operation, get service id failed\")"},{"line_number":64,"context_line":"                return"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # get trigger"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_76bb560f","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":25},"in_reply_to":"dae33548_754b50b1","updated":"2016-02-14 09:45:15.000000000","message":"got it. thanks.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"6d2ce04cf0dafbdeea622824208ce9ec68651c4a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # register operation"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":89,"context_line":"                self._time_trigger.register_operation("},{"line_number":90,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.property)"},{"line_number":91,"context_line":"        except Exception:"},{"line_number":92,"context_line":"            operation_state.destroy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d594dce9","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":34},"updated":"2016-02-14 07:06:51.000000000","message":"Seems nowhere to specify the self._time_trigger value.","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"a856230f44d4102e3271afc5ed846c737d2078a0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        # register operation"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":89,"context_line":"                self._time_trigger.register_operation("},{"line_number":90,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.property)"},{"line_number":91,"context_line":"        except Exception:"},{"line_number":92,"context_line":"            operation_state.destroy()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_96bedafd","line":89,"range":{"start_line":89,"start_character":21,"end_line":89,"end_character":34},"in_reply_to":"dae33548_d594dce9","updated":"2016-02-14 09:45:15.000000000","message":"sorry, the initialization code of self._time_trigger is at bp:implement-time-trigger. you can see it at:https://review.openstack.org/#/c/271196/","commit_id":"575cb8c1b4f00507927aa580d2f19ea5242292aa"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7523a335f54029568d2c5dce24245d3b2e1dfc0b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        operation_state \u003d objects.ScheduledOperationState(context)"},{"line_number":96,"context_line":"        operation_state.operation_id \u003d operation_id"},{"line_number":97,"context_line":"        operation_state.service_id \u003d self._service_id"},{"line_number":98,"context_line":"        operation_state.state \u003d \u0027init\u0027"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            operation_state.create()"},{"line_number":101,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_3bd95e84","line":98,"range":{"start_line":98,"start_character":32,"end_line":98,"end_character":38},"updated":"2016-02-22 07:01:16.000000000","message":"Suggest defining some constant variables to represent these (\u0027init\u0027, \u0027registered\u0027, ...) states, rather than use string directly.","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fbcf9b391a955584a95c639c1f7d384363cef3d3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        operation_state \u003d objects.ScheduledOperationState(context)"},{"line_number":96,"context_line":"        operation_state.operation_id \u003d operation_id"},{"line_number":97,"context_line":"        operation_state.service_id \u003d self._service_id"},{"line_number":98,"context_line":"        operation_state.state \u003d \u0027init\u0027"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            operation_state.create()"},{"line_number":101,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_e9c33b36","line":98,"range":{"start_line":98,"start_character":32,"end_line":98,"end_character":38},"in_reply_to":"bae84128_3bd95e84","updated":"2016-02-24 07:05:44.000000000","message":"Done","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7523a335f54029568d2c5dce24245d3b2e1dfc0b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            LOG.exception(_LE(\"Delete scheduled operation(%s), \""},{"line_number":128,"context_line":"                              \"get state failed\"), operation_id)"},{"line_number":129,"context_line":"            return"},{"line_number":130,"context_line":"        operation_state.state \u003d \u0027deleted\u0027"},{"line_number":131,"context_line":"        operation_state.save()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_1b58da31","line":130,"range":{"start_line":130,"start_character":33,"end_line":130,"end_character":40},"updated":"2016-02-22 07:01:16.000000000","message":"Is it better to use \u0027deleting\u0027, cause the operation_state is actually deleted while operation.destroy().","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fbcf9b391a955584a95c639c1f7d384363cef3d3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            LOG.exception(_LE(\"Delete scheduled operation(%s), \""},{"line_number":128,"context_line":"                              \"get state failed\"), operation_id)"},{"line_number":129,"context_line":"            return"},{"line_number":130,"context_line":"        operation_state.state \u003d \u0027deleted\u0027"},{"line_number":131,"context_line":"        operation_state.save()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_c9a4774c","line":130,"range":{"start_line":130,"start_character":33,"end_line":130,"end_character":40},"in_reply_to":"bae84128_1b58da31","updated":"2016-02-24 07:05:44.000000000","message":"The \u0027deleted\u0027 state is used to mark the record which need be deleted. If operation engine service crashes while deleting the operation, we can know the operation need to be deleted whose state is deleted when restoring the service. If the deleting process successes, the record in the db is not exist. So, there is no need to change to deleting state.","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7523a335f54029568d2c5dce24245d3b2e1dfc0b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":143,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_c04de19a","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":22},"updated":"2016-02-22 07:01:16.000000000","message":"Is there another patch to init this to a non None value?","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fbcf9b391a955584a95c639c1f7d384363cef3d3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":143,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_4914e74b","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":22},"in_reply_to":"bae84128_3b503e5e","updated":"2016-02-24 07:05:44.000000000","message":"the operation will be registered to trigger to be scheduled. When the operation is triggered, it will be submitted to executor to run when we will call submit_operation method of executor.","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"5c4d13a6f4d66195cab457de3aad88b91ffdc938","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":143,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_3b503e5e","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":22},"in_reply_to":"bae84128_c04de19a","updated":"2016-02-22 07:17:55.000000000","message":"And didn\u0027t see a corresponding submit_operation call in create_schedule_operation.","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fbcf9b391a955584a95c639c1f7d384363cef3d3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":143,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_4946a77b","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":22},"in_reply_to":"bae84128_c04de19a","updated":"2016-02-24 07:05:44.000000000","message":"sorry, later I will rebase the code.","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"7523a335f54029568d2c5dce24245d3b2e1dfc0b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"},{"line_number":149,"context_line":"        operation.destroy()"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_40ac3135","line":148,"range":{"start_line":148,"start_character":51,"end_line":148,"end_character":56},"updated":"2016-02-22 07:01:16.000000000","message":"table","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"fbcf9b391a955584a95c639c1f7d384363cef3d3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # delete scheduled_operation_state and scheduled_operation_log record"},{"line_number":148,"context_line":"        # by delete cascade of scheduled_operation talbe"},{"line_number":149,"context_line":"        operation.destroy()"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_e905fb13","line":148,"range":{"start_line":148,"start_character":51,"end_line":148,"end_character":56},"in_reply_to":"bae84128_40ac3135","updated":"2016-02-24 07:05:44.000000000","message":"Done","commit_id":"3f11d34e8b1cadbed66e212d4eebad73fbb361a7"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"79b34561e4dd1527ef6e67f007e7eec54c1c603b","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # register operation"},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":116,"context_line":"                self._time_trigger.register_operation("},{"line_number":117,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.properties)"},{"line_number":118,"context_line":"        except Exception:"},{"line_number":119,"context_line":"            operation_state.destroy()"},{"line_number":120,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, register \""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_7fc21d54","line":117,"range":{"start_line":115,"start_character":0,"end_line":117,"end_character":76},"updated":"2016-02-24 15:01:19.000000000","message":"There needs to be a better way to match trigger type and what to do with it.","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7d5a8c1d12ed776c778a6337a6c49722acc22898","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # register operation"},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":116,"context_line":"                self._time_trigger.register_operation("},{"line_number":117,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.properties)"},{"line_number":118,"context_line":"        except Exception:"},{"line_number":119,"context_line":"            operation_state.destroy()"},{"line_number":120,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, register \""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_0b69e58b","line":117,"range":{"start_line":115,"start_character":0,"end_line":117,"end_character":76},"in_reply_to":"bae84128_7fc21d54","updated":"2016-02-25 08:42:14.000000000","message":"Done","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"79b34561e4dd1527ef6e67f007e7eec54c1c603b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            except Exception:"},{"line_number":79,"context_line":"                pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":82,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # get service id"},{"line_number":85,"context_line":"        if not self._service_id:"},{"line_number":86,"context_line":"            self._get_service_id(context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if not self._service_id:"},{"line_number":89,"context_line":"                LOG.exception(_LE(\"Create scheduled operation, \""},{"line_number":90,"context_line":"                                  \"get service id failed\"))"},{"line_number":91,"context_line":"                return"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # get trigger"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            trigger \u003d objects.Trigger.get_by_id(context, trigger_id)"},{"line_number":96,"context_line":"        except Exception:"},{"line_number":97,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, get trigger(%s)\""},{"line_number":98,"context_line":"                              \" failed\"), trigger_id)"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # create ScheduledOperationState record"},{"line_number":102,"context_line":"        operation_state \u003d objects.ScheduledOperationState(context)"},{"line_number":103,"context_line":"        operation_state.operation_id \u003d operation_id"},{"line_number":104,"context_line":"        operation_state.service_id \u003d self._service_id"},{"line_number":105,"context_line":"        operation_state.state \u003d \u0027init\u0027"},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            operation_state.create()"},{"line_number":108,"context_line":"        except Exception:"},{"line_number":109,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, maybe recreate \""},{"line_number":110,"context_line":"                              \"with same operation id(%s)\"), operation_id)"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # register operation"},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":116,"context_line":"                self._time_trigger.register_operation("},{"line_number":117,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.properties)"},{"line_number":118,"context_line":"        except Exception:"},{"line_number":119,"context_line":"            operation_state.destroy()"},{"line_number":120,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, register \""},{"line_number":121,"context_line":"                              \"operation failed, trigger_id\u003d%s\"), trigger_id)"},{"line_number":122,"context_line":"            return"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        operation_state.state \u003d \u0027registered\u0027"},{"line_number":125,"context_line":"        operation_state.save()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def delete_scheduled_operation(self, context, operation_id):"},{"line_number":128,"context_line":"        LOG.debug(\"Delete scheduled operation.\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_dc337712","line":125,"range":{"start_line":81,"start_character":8,"end_line":125,"end_character":30},"updated":"2016-02-24 15:01:19.000000000","message":"This whole function needs to be split to function logically","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7d5a8c1d12ed776c778a6337a6c49722acc22898","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            except Exception:"},{"line_number":79,"context_line":"                pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":82,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # get service id"},{"line_number":85,"context_line":"        if not self._service_id:"},{"line_number":86,"context_line":"            self._get_service_id(context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if not self._service_id:"},{"line_number":89,"context_line":"                LOG.exception(_LE(\"Create scheduled operation, \""},{"line_number":90,"context_line":"                                  \"get service id failed\"))"},{"line_number":91,"context_line":"                return"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # get trigger"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            trigger \u003d objects.Trigger.get_by_id(context, trigger_id)"},{"line_number":96,"context_line":"        except Exception:"},{"line_number":97,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, get trigger(%s)\""},{"line_number":98,"context_line":"                              \" failed\"), trigger_id)"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # create ScheduledOperationState record"},{"line_number":102,"context_line":"        operation_state \u003d objects.ScheduledOperationState(context)"},{"line_number":103,"context_line":"        operation_state.operation_id \u003d operation_id"},{"line_number":104,"context_line":"        operation_state.service_id \u003d self._service_id"},{"line_number":105,"context_line":"        operation_state.state \u003d \u0027init\u0027"},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            operation_state.create()"},{"line_number":108,"context_line":"        except Exception:"},{"line_number":109,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, maybe recreate \""},{"line_number":110,"context_line":"                              \"with same operation id(%s)\"), operation_id)"},{"line_number":111,"context_line":"            return"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # register operation"},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            if \u0027time\u0027 \u003d\u003d trigger.type:"},{"line_number":116,"context_line":"                self._time_trigger.register_operation("},{"line_number":117,"context_line":"                    operation_id, None, trigger_property\u003dtrigger.properties)"},{"line_number":118,"context_line":"        except Exception:"},{"line_number":119,"context_line":"            operation_state.destroy()"},{"line_number":120,"context_line":"            LOG.exception(_LE(\"Create scheduled operation, register \""},{"line_number":121,"context_line":"                              \"operation failed, trigger_id\u003d%s\"), trigger_id)"},{"line_number":122,"context_line":"            return"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        operation_state.state \u003d \u0027registered\u0027"},{"line_number":125,"context_line":"        operation_state.save()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def delete_scheduled_operation(self, context, operation_id):"},{"line_number":128,"context_line":"        LOG.debug(\"Delete scheduled operation.\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_4bcbed1e","line":125,"range":{"start_line":81,"start_character":8,"end_line":125,"end_character":30},"in_reply_to":"bae84128_dc337712","updated":"2016-02-25 08:42:14.000000000","message":"sorry, i don\u0027t quite understand your comment. do you mean split the steps into corresponding functions? why? do you think the logic of this function is not clear?","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"79b34561e4dd1527ef6e67f007e7eec54c1c603b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                              \"get operation failed\"), operation_id)"},{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":150,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_7f997d78","line":150,"range":{"start_line":149,"start_character":0,"end_line":150,"end_character":65},"updated":"2016-02-24 15:01:19.000000000","message":"Also here we need a way to match type and operation. Maybe create a class for every type.","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7d5a8c1d12ed776c778a6337a6c49722acc22898","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                              \"get operation failed\"), operation_id)"},{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        if \u0027time\u0027 \u003d\u003d operation.trigger[\u0027type\u0027]:"},{"line_number":150,"context_line":"            self._time_trigger.unregister_operation(operation_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self._executor.cancel_operation(operation_id)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_6b04f1c5","line":150,"range":{"start_line":149,"start_character":0,"end_line":150,"end_character":65},"in_reply_to":"bae84128_7f997d78","updated":"2016-02-25 08:42:14.000000000","message":"Done","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"6168186fa776cab8627e24273650be3d6ff6914b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        if self._trigger_manager:"},{"line_number":60,"context_line":"            self._trigger_manager.shutdown_triggers()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self._executor:"},{"line_number":63,"context_line":"            self._executor.shutdown()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _get_service_id(self, context):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_5c51b00d","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"updated":"2016-02-27 08:39:24.000000000","message":"i\u0027m not sure if there is any other case that will use the executor out of the manager. i think it should really be moved the status management capability into TriggerManager class if the executor just be used in TriggerManager only.so that we can make sure they are in the same status.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"bd573cd11b3ab5c5a89a656ebb739ab56b2a7060","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        if self._trigger_manager:"},{"line_number":60,"context_line":"            self._trigger_manager.shutdown_triggers()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if self._executor:"},{"line_number":63,"context_line":"            self._executor.shutdown()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _get_service_id(self, context):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_3e5965ff","line":62,"range":{"start_line":62,"start_character":16,"end_line":62,"end_character":25},"in_reply_to":"9aed3d3a_5c51b00d","updated":"2016-03-08 08:53:31.000000000","message":"got it. i will think it again.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2ba5797c98e5b0619ccda9453de4faead4450275","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            except Exception:"},{"line_number":80,"context_line":"                pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":83,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # get service id"}],"source_content_type":"text/x-python","patch_set":15,"id":"9aed3d3a_0dced959","line":82,"updated":"2016-02-27 06:43:25.000000000","message":"I see this method won\u0027t return any result or raise exceptions to indicate if executing success or fail, then how will user know the schedule operation is success or not?","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"bd573cd11b3ab5c5a89a656ebb739ab56b2a7060","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            except Exception:"},{"line_number":80,"context_line":"                pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_scheduled_operation(self, context, operation_id, trigger_id):"},{"line_number":83,"context_line":"        LOG.debug(\"Create scheduled operation.\")"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # get service id"}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_db29738b","line":82,"in_reply_to":"9aed3d3a_0dced959","updated":"2016-03-08 08:53:31.000000000","message":"sorry to answer you so late. yes, you are right. recently, i have been learning how to send the exceptions to API service, and found a bug, please review the \"https://review.openstack.org/#/c/289685/\" to see this bug. thanks again.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"d0e4e663d3cccf00a235d9e417e7c807f03b3715","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if self._service_id is not None:"},{"line_number":74,"context_line":"            return"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for i in range(3):"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                service \u003d objects.Service.get_by_args("},{"line_number":79,"context_line":"                    context,"},{"line_number":80,"context_line":"                    self.host,"},{"line_number":81,"context_line":"                    \"smaug-operationengine\")"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"                if service:"},{"line_number":84,"context_line":"                    self._service_id \u003d service.id"},{"line_number":85,"context_line":"                    break"},{"line_number":86,"context_line":"            except Exception:"},{"line_number":87,"context_line":"                pass"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @messaging.expected_exceptions(exception.ServiceNotFound,"},{"line_number":90,"context_line":"                                   exception.TriggerNotFound,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa0719c6_236a381b","line":87,"range":{"start_line":76,"start_character":0,"end_line":87,"end_character":20},"updated":"2016-03-20 13:08:35.000000000","message":"Why do we need 3 retries?","commit_id":"960bd9139a46f59610b4035d07f6f6b3c2fae895"}],"smaug/operationengine/rpcapi.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c53aae63e80e28ccf300d95ff091cc52ff493dfd","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_scheduled_operation(self, ctxt, operation_id, trigger_id):"},{"line_number":45,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":46,"context_line":"        return cctxt.cast(ctxt, \u0027create_scheduled_operation\u0027,"},{"line_number":47,"context_line":"                          operation_id\u003doperation_id, trigger_id\u003dtrigger_id)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def delete_scheduled_operation(self, ctxt, operation_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_b9b84f12","line":46,"range":{"start_line":46,"start_character":21,"end_line":46,"end_character":25},"updated":"2016-02-24 11:55:25.000000000","message":"Use call then it will be queued and execute on one operation engine","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7d5a8c1d12ed776c778a6337a6c49722acc22898","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def create_scheduled_operation(self, ctxt, operation_id, trigger_id):"},{"line_number":45,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":46,"context_line":"        return cctxt.cast(ctxt, \u0027create_scheduled_operation\u0027,"},{"line_number":47,"context_line":"                          operation_id\u003doperation_id, trigger_id\u003dtrigger_id)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def delete_scheduled_operation(self, ctxt, operation_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_999f1a50","line":46,"range":{"start_line":46,"start_character":21,"end_line":46,"end_character":25},"in_reply_to":"bae84128_b9b84f12","updated":"2016-02-25 08:42:14.000000000","message":"Done","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c53aae63e80e28ccf300d95ff091cc52ff493dfd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                          operation_id\u003doperation_id, trigger_id\u003dtrigger_id)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def delete_scheduled_operation(self, ctxt, operation_id):"},{"line_number":50,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":51,"context_line":"        return cctxt.cast(ctxt, \u0027delete_scheduled_operation\u0027,"},{"line_number":52,"context_line":"                          operation_id\u003doperation_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_39439f14","line":50,"range":{"start_line":50,"start_character":28,"end_line":50,"end_character":35},"updated":"2016-02-24 11:55:25.000000000","message":"ditto","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7d5a8c1d12ed776c778a6337a6c49722acc22898","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                          operation_id\u003doperation_id, trigger_id\u003dtrigger_id)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def delete_scheduled_operation(self, ctxt, operation_id):"},{"line_number":50,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":51,"context_line":"        return cctxt.cast(ctxt, \u0027delete_scheduled_operation\u0027,"},{"line_number":52,"context_line":"                          operation_id\u003doperation_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_19baeac0","line":50,"range":{"start_line":50,"start_character":28,"end_line":50,"end_character":35},"in_reply_to":"bae84128_39439f14","updated":"2016-02-25 08:42:14.000000000","message":"Done","commit_id":"37caeec746069d6544b5fccfc33538d48d4fb04c"}],"smaug/operationengine/scheduled_operation_state.py":[{"author":{"_account_id":15069,"name":"zhonghuali","email":"lizhonghua.li@huawei.com","username":"sloblee"},"change_message_id":"6168186fa776cab8627e24273650be3d6ff6914b","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":15,"id":"9aed3d3a_dc92e09e","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-02-27 08:39:24.000000000","message":"please update with the current year and right company name if you are not Red Hat.","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"bd573cd11b3ab5c5a89a656ebb739ab56b2a7060","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":15,"id":"5aef4532_fb742f9d","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"9aed3d3a_dc92e09e","updated":"2016-03-08 08:53:31.000000000","message":"Done","commit_id":"1ad75284433b24fea36bc813b67b48fe07b6d371"}],"smaug/tests/unit/operationengine/engine/test_trigger_manager.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"d0e4e663d3cccf00a235d9e417e7c807f03b3715","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        bingo \u003d 0"},{"line_number":30,"context_line":"        try:"},{"line_number":31,"context_line":"            self.tm.check_trigger_definition(\"123\", None)"},{"line_number":32,"context_line":"        except exception.InvalidInput as ex:"},{"line_number":33,"context_line":"            bingo \u003d 1 if ex.msg.find(\"trigger type\") \u003e\u003d 0 else 0"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        self.assertEqual(1, bingo)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa0719c6_43548c53","line":35,"range":{"start_line":32,"start_character":0,"end_line":35,"end_character":34},"updated":"2016-03-20 13:08:35.000000000","message":"Use assertRaisesRegex","commit_id":"960bd9139a46f59610b4035d07f6f6b3c2fae895"}]}
