)]}'
{"karbor/services/operationengine/engine/triggers/timetrigger/time_trigger.py":[{"author":{"_account_id":23068,"name":"Wang Hui","email":"wanghui71@huawei.com","username":"krejwang"},"change_message_id":"f81042945ca98ee232cedb25dcc143c020a7413d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            msg \u003d (_(\"The operation_id(%s) is exist\") % operation_id)"},{"line_number":123,"context_line":"            raise exception.ScheduledOperationExist(msg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if self._operation_ids and self._greenthread is None:"},{"line_number":126,"context_line":"            # The green thread has exited."},{"line_number":127,"context_line":"            # Update the trigger and try again."},{"line_number":128,"context_line":"            raise exception.TriggerIsInvalid(trigger_id\u003dself._id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_f8546acb","line":125,"range":{"start_line":125,"start_character":7,"end_line":125,"end_character":60},"updated":"2016-09-20 06:35:48.000000000","message":"Sorry, i don\u0027t understand why do this change.","commit_id":"6234ccedc4933373be4a436ede09ba24fc76e637"},{"author":{"_account_id":23068,"name":"Wang Hui","email":"wanghui71@huawei.com","username":"krejwang"},"change_message_id":"0d9f803d78f028e496b4c4177b1033441435224a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            msg \u003d (_(\"The operation_id(%s) is exist\") % operation_id)"},{"line_number":123,"context_line":"            raise exception.ScheduledOperationExist(msg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if self._operation_ids and self._greenthread is None:"},{"line_number":126,"context_line":"            # The green thread has exited."},{"line_number":127,"context_line":"            # Update the trigger and try again."},{"line_number":128,"context_line":"            raise exception.TriggerIsInvalid(trigger_id\u003dself._id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_f3b488d2","line":125,"range":{"start_line":125,"start_character":7,"end_line":125,"end_character":60},"in_reply_to":"7a8ec9b2_b0991622","updated":"2016-09-20 08:05:13.000000000","message":"Got it,thanks a lot","commit_id":"6234ccedc4933373be4a436ede09ba24fc76e637"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"5586ebb93af97b53f5ee3a15e1a962228f9cbcef","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            msg \u003d (_(\"The operation_id(%s) is exist\") % operation_id)"},{"line_number":123,"context_line":"            raise exception.ScheduledOperationExist(msg)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if self._operation_ids and self._greenthread is None:"},{"line_number":126,"context_line":"            # The green thread has exited."},{"line_number":127,"context_line":"            # Update the trigger and try again."},{"line_number":128,"context_line":"            raise exception.TriggerIsInvalid(trigger_id\u003dself._id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_b0991622","line":125,"range":{"start_line":125,"start_character":7,"end_line":125,"end_character":60},"in_reply_to":"7a8ec9b2_f8546acb","updated":"2016-09-20 07:53:32.000000000","message":"The result is same as before. Because I introduce a new method \u0027_greenthread_exit_call_back\u0027, and when the green thread exits, this method will be called and set \u0027_greenthread\u0027 to None. If there are some operation registered to this trigger and the green thread exit, that means the trigger has stopped. If user register a new operation to trigger at this time, it is not allowed and user should update the trigger and try again.","commit_id":"6234ccedc4933373be4a436ede09ba24fc76e637"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"f93d1e49e44faa678fd04c59fe16a4ccbf21b69d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_737af7f2","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"updated":"2016-11-09 09:09:49.000000000","message":"why hold the old greenthread?","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"2ad4cec3fd9753fd1020661be6193d8752708434","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_efdbd71f","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"9a629dbe_4cefdae8","updated":"2016-11-14 09:43:54.000000000","message":"The self._old_greenthread is needed. Please look at the new patch. Actually, the real bug is that one operation may be triggered at the same time in both old and new threads when updating the trigger property two times successively.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9c58a90187aa1f6cc08b77caf6aa36b96a4d2404","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_4cefdae8","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"9a629dbe_4ea361b2","updated":"2016-11-10 11:09:00.000000000","message":"1. I agree that it is the user choice. If the user wants to update the 2, 3 or 10 times in a row, it should be possible.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bc5cd8df15144d604073841f6a490830789e82e8","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_79272c64","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"9a629dbe_4ed8ea1d","updated":"2016-11-09 13:20:51.000000000","message":"1. Why not update the trigger frequently?\n2. Even if we will not hold the old trigger, it is still referenced, and will not be killed","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"784853b0cc24908ab0f9796c4831e172f27a2e9d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_4ed8ea1d","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"9a629dbe_737af7f2","updated":"2016-11-09 09:42:38.000000000","message":"Because the old thread should continue to run, instead of being interrupted and killed arbitrarily. Besides the \u0027self._old_green_thread\u0027 is used at method \u0027update_trigger_property\u0027 to avoid updating trigger too frequently","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7f98a200897f04e1e886a23f3b7ac68cbbdde02e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            trigger_property)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self._greenthread \u003d None"},{"line_number":117,"context_line":"        self._old_greenthread \u003d None"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def shutdown(self):"},{"line_number":120,"context_line":"        self._kill_greenthread()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_4ea361b2","line":117,"range":{"start_line":117,"start_character":0,"end_line":117,"end_character":36},"in_reply_to":"9a629dbe_79272c64","updated":"2016-11-10 03:08:53.000000000","message":"Regarding to question 1. I think it is user\u0027s choice. He may update time trigger twice continuously, because the first updating is not what he want. Besides, from the robustness of time trigger, we should add this logic.\n\nRegarding to question 2. My explanation is below.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"f93d1e49e44faa678fd04c59fe16a4ccbf21b69d","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_938ceb36","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"updated":"2016-11-09 09:09:49.000000000","message":"After line 178, both _old_greenthread and _greenthread hold the same green thread. Then the call to restart_greenthread kills it. Is that intentional? (why hold the old green thread then?)","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bc5cd8df15144d604073841f6a490830789e82e8","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_59d7c822","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"9a629dbe_0e79922f","updated":"2016-11-09 13:20:51.000000000","message":"Why do we need to hold the old greenthread? It will keep running even if we don\u0027t hold it","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"2ad4cec3fd9753fd1020661be6193d8752708434","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ef2af72e","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"9a629dbe_4c18ba1e","updated":"2016-11-14 09:43:54.000000000","message":"Today, I have done some tests. You are right. The old thread will continue to run even if not holding it. Sorry for my lack of knowledge about python\u0027s mechanism of garbage collection.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7f98a200897f04e1e886a23f3b7ac68cbbdde02e","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ee943544","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"9a629dbe_59d7c822","updated":"2016-11-10 03:08:53.000000000","message":"1. Both the variable \u0027self._old_greenthread\u0027 and \u0027self._greenthread\u0027 are the instance of local class \u0027TriggerOperationGreenThread\u0027, not the instance of eventlet.greenthread.GreenThread. The previous instance will not be referenced by any variables when \u0027self._restart_greenthread\u0027 is invoked, if it is not assigned to \u0027self._old_green_thread\u0027. It is true that the old thread will continue to run which I have verified by a simple test. The reason maybe is that the instance will not been deleted immediately even if the ref count is reach 0. I worry that whether it will work right when there are many triggers running simultaneously. On the other hand, there is any disadvantage and it is safer, if I use \u0027self._old_greethread\u0027.\n\n2. This patch is aimed at keeping the old thread continue to run after the execution control returns back. If the old thread will continue to run normally as you said, then this patch is not needed. because there is no problem.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"784853b0cc24908ab0f9796c4831e172f27a2e9d","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_0e79922f","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"9a629dbe_938ceb36","updated":"2016-11-09 09:42:38.000000000","message":"Yes, it is my design. self._old_greenthread will keep the previous thread which will continue to run when swapping out execution next time, and self._greenthread will keep the new thread which will be run some time later.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"9c58a90187aa1f6cc08b77caf6aa36b96a4d2404","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if len(self._operation_ids) \u003e 0:"},{"line_number":177,"context_line":"            # hold the green thread until it exit normally,"},{"line_number":178,"context_line":"            self._old_greenthread \u003d self._greenthread"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Restart greenthread to take the change of trigger property"},{"line_number":181,"context_line":"            # effect immediately"},{"line_number":182,"context_line":"            self._restart_greenthread()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _kill_greenthread(self):"},{"line_number":185,"context_line":"        if self._greenthread:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_4c18ba1e","line":182,"range":{"start_line":178,"start_character":0,"end_line":182,"end_character":39},"in_reply_to":"9a629dbe_ee943544","updated":"2016-11-10 11:09:00.000000000","message":"1. The TriggerOperationGreenThread will not be garbage collected since it is being referenced by both _run and _on_done when they are held in eventlet as bound methods.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"f93d1e49e44faa678fd04c59fe16a4ccbf21b69d","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        window \u003d trigger_property.get(\"window\")"},{"line_number":238,"context_line":"        end_time \u003d expect_run_time + timedelta(seconds\u003dwindow)"},{"line_number":239,"context_line":"        if now1 \u003e\u003d end_time:"},{"line_number":240,"context_line":"            LOG.error(_LE(\"Can not trigger operations to run, \""},{"line_number":241,"context_line":"                          \"now\u003d%(now)s, expect_run_time\u003d%(expect)s, \""},{"line_number":242,"context_line":"                          \"end time\u003d%(end)s\"),"},{"line_number":243,"context_line":"                      {\u0027now\u0027: now1,"},{"line_number":244,"context_line":"                       \u0027expect\u0027: expect_run_time,"},{"line_number":245,"context_line":"                       \u0027end\u0027: end_time})"},{"line_number":246,"context_line":"        else:"},{"line_number":247,"context_line":"            # The self._executor.execute_operation may have I/O operation."},{"line_number":248,"context_line":"            # If it is, this green thread will be switched out during looping"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_53c5f358","line":245,"range":{"start_line":240,"start_character":0,"end_line":245,"end_character":40},"updated":"2016-11-09 09:09:49.000000000","message":"uninformative error message (why cannot trigger operation?)","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7f98a200897f04e1e886a23f3b7ac68cbbdde02e","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        window \u003d trigger_property.get(\"window\")"},{"line_number":238,"context_line":"        end_time \u003d expect_run_time + timedelta(seconds\u003dwindow)"},{"line_number":239,"context_line":"        if now1 \u003e\u003d end_time:"},{"line_number":240,"context_line":"            LOG.error(_LE(\"Can not trigger operations to run, \""},{"line_number":241,"context_line":"                          \"now\u003d%(now)s, expect_run_time\u003d%(expect)s, \""},{"line_number":242,"context_line":"                          \"end time\u003d%(end)s\"),"},{"line_number":243,"context_line":"                      {\u0027now\u0027: now1,"},{"line_number":244,"context_line":"                       \u0027expect\u0027: expect_run_time,"},{"line_number":245,"context_line":"                       \u0027end\u0027: end_time})"},{"line_number":246,"context_line":"        else:"},{"line_number":247,"context_line":"            # The self._executor.execute_operation may have I/O operation."},{"line_number":248,"context_line":"            # If it is, this green thread will be switched out during looping"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_e2128908","line":245,"range":{"start_line":240,"start_character":0,"end_line":245,"end_character":40},"in_reply_to":"9a629dbe_39bbf4e6","updated":"2016-11-10 03:08:53.000000000","message":"got it.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"784853b0cc24908ab0f9796c4831e172f27a2e9d","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        window \u003d trigger_property.get(\"window\")"},{"line_number":238,"context_line":"        end_time \u003d expect_run_time + timedelta(seconds\u003dwindow)"},{"line_number":239,"context_line":"        if now1 \u003e\u003d end_time:"},{"line_number":240,"context_line":"            LOG.error(_LE(\"Can not trigger operations to run, \""},{"line_number":241,"context_line":"                          \"now\u003d%(now)s, expect_run_time\u003d%(expect)s, \""},{"line_number":242,"context_line":"                          \"end time\u003d%(end)s\"),"},{"line_number":243,"context_line":"                      {\u0027now\u0027: now1,"},{"line_number":244,"context_line":"                       \u0027expect\u0027: expect_run_time,"},{"line_number":245,"context_line":"                       \u0027end\u0027: end_time})"},{"line_number":246,"context_line":"        else:"},{"line_number":247,"context_line":"            # The self._executor.execute_operation may have I/O operation."},{"line_number":248,"context_line":"            # If it is, this green thread will be switched out during looping"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_6eef6e87","line":245,"range":{"start_line":240,"start_character":0,"end_line":245,"end_character":40},"in_reply_to":"9a629dbe_53c5f358","updated":"2016-11-09 09:42:38.000000000","message":"Because the operation can only be run at the time between \u0027expect_run_time\u0027 and \u0027end_time\u0027 which is our design. We don\u0027t allow the operation to be run after the time \u0027expect_run_time + window\u0027.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bc5cd8df15144d604073841f6a490830789e82e8","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        window \u003d trigger_property.get(\"window\")"},{"line_number":238,"context_line":"        end_time \u003d expect_run_time + timedelta(seconds\u003dwindow)"},{"line_number":239,"context_line":"        if now1 \u003e\u003d end_time:"},{"line_number":240,"context_line":"            LOG.error(_LE(\"Can not trigger operations to run, \""},{"line_number":241,"context_line":"                          \"now\u003d%(now)s, expect_run_time\u003d%(expect)s, \""},{"line_number":242,"context_line":"                          \"end time\u003d%(end)s\"),"},{"line_number":243,"context_line":"                      {\u0027now\u0027: now1,"},{"line_number":244,"context_line":"                       \u0027expect\u0027: expect_run_time,"},{"line_number":245,"context_line":"                       \u0027end\u0027: end_time})"},{"line_number":246,"context_line":"        else:"},{"line_number":247,"context_line":"            # The self._executor.execute_operation may have I/O operation."},{"line_number":248,"context_line":"            # If it is, this green thread will be switched out during looping"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_39bbf4e6","line":245,"range":{"start_line":240,"start_character":0,"end_line":245,"end_character":40},"in_reply_to":"9a629dbe_6eef6e87","updated":"2016-11-09 13:20:51.000000000","message":"I know why we cannot trigger the operation, it is just not explained in the error message","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"f93d1e49e44faa678fd04c59fe16a4ccbf21b69d","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"                now \u003d datetime.utcnow()"},{"line_number":263,"context_line":"                if now \u003e\u003d end_time:"},{"line_number":264,"context_line":"                    LOG.error(_LE(\"TimeTrigger didn\u0027t trigger operation \""},{"line_number":265,"context_line":"                                  \"on time, now\u003d%(now)s, expect run time\u003d\""},{"line_number":266,"context_line":"                                  \"%(expect)s, end time\u003d%(end_time)s, \""},{"line_number":267,"context_line":"                                  \"not been triggered operations\u003d%(ops)s\"),"},{"line_number":268,"context_line":"                              {\u0027now\u0027: now,"},{"line_number":269,"context_line":"                               \u0027expect\u0027: expect_run_time,"},{"line_number":270,"context_line":"                               \u0027end_time\u0027: end_time,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_53eed3ec","line":267,"range":{"start_line":264,"start_character":0,"end_line":267,"end_character":75},"updated":"2016-11-09 09:09:49.000000000","message":"uninformative error message (add that it wasn\u0027t triggered because out of window)","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"784853b0cc24908ab0f9796c4831e172f27a2e9d","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"                now \u003d datetime.utcnow()"},{"line_number":263,"context_line":"                if now \u003e\u003d end_time:"},{"line_number":264,"context_line":"                    LOG.error(_LE(\"TimeTrigger didn\u0027t trigger operation \""},{"line_number":265,"context_line":"                                  \"on time, now\u003d%(now)s, expect run time\u003d\""},{"line_number":266,"context_line":"                                  \"%(expect)s, end time\u003d%(end_time)s, \""},{"line_number":267,"context_line":"                                  \"not been triggered operations\u003d%(ops)s\"),"},{"line_number":268,"context_line":"                              {\u0027now\u0027: now,"},{"line_number":269,"context_line":"                               \u0027expect\u0027: expect_run_time,"},{"line_number":270,"context_line":"                               \u0027end_time\u0027: end_time,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_294d706c","line":267,"range":{"start_line":264,"start_character":0,"end_line":267,"end_character":75},"in_reply_to":"9a629dbe_53eed3ec","updated":"2016-11-09 09:42:38.000000000","message":"got it.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"f93d1e49e44faa678fd04c59fe16a4ccbf21b69d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            trigger_property[\u0027pattern\u0027])"},{"line_number":287,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":288,"context_line":"        if now \u003e\u003d next_time:"},{"line_number":289,"context_line":"            LOG.error(_LE(\"It is terrible,  entry time\u003d%(now1)s, end time\u003d\""},{"line_number":290,"context_line":"                          \"%(end)s, now\u003d%(now)s, next run time\u003d%(next_time)s\"),"},{"line_number":291,"context_line":"                      {\u0027now1\u0027: now1,"},{"line_number":292,"context_line":"                       \u0027end\u0027: end_time,"},{"line_number":293,"context_line":"                       \u0027now\u0027: now,"},{"line_number":294,"context_line":"                       \u0027next_time\u0027: next_time})"},{"line_number":295,"context_line":"        return next_time"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_131d3b0f","line":294,"range":{"start_line":289,"start_character":0,"end_line":294,"end_character":47},"updated":"2016-11-09 09:09:49.000000000","message":"uninformative error message","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"784853b0cc24908ab0f9796c4831e172f27a2e9d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            trigger_property[\u0027pattern\u0027])"},{"line_number":287,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":288,"context_line":"        if now \u003e\u003d next_time:"},{"line_number":289,"context_line":"            LOG.error(_LE(\"It is terrible,  entry time\u003d%(now1)s, end time\u003d\""},{"line_number":290,"context_line":"                          \"%(end)s, now\u003d%(now)s, next run time\u003d%(next_time)s\"),"},{"line_number":291,"context_line":"                      {\u0027now1\u0027: now1,"},{"line_number":292,"context_line":"                       \u0027end\u0027: end_time,"},{"line_number":293,"context_line":"                       \u0027now\u0027: now,"},{"line_number":294,"context_line":"                       \u0027next_time\u0027: next_time})"},{"line_number":295,"context_line":"        return next_time"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_6975a896","line":294,"range":{"start_line":289,"start_character":0,"end_line":294,"end_character":47},"in_reply_to":"9a629dbe_131d3b0f","updated":"2016-11-09 09:42:38.000000000","message":"got it.","commit_id":"c8710594f1b3b2d736e5018c5b11c8c327a2524b"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"d44b4378ded6cb891385bcc68ce13a5be1530b71","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._thread.kill()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def started(self):"},{"line_number":67,"context_line":"        return self._running"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a629dbe_225234de","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":15},"updated":"2016-11-14 17:03:04.000000000","message":"Why the change?\nI don\u0027t think it\u0027s related anyway and could be done in a different patch.","commit_id":"ef97b2507041f16f70b87b4343e87e8cdbbaf697"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"32273f9c5a3b8fedd1c0f2bbbf2a511950680bda","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            self._thread.kill()"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @property"},{"line_number":66,"context_line":"    def started(self):"},{"line_number":67,"context_line":"        return self._running"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_c7d28134","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":15},"in_reply_to":"9a629dbe_225234de","updated":"2016-11-15 01:10:02.000000000","message":"Yes, it is not very related. Just change to be a meaningful name.","commit_id":"ef97b2507041f16f70b87b4343e87e8cdbbaf697"}]}
