)]}'
{"networking_odl/db/db.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f66f90ff25fee026643bbb6085d95df1abdf775","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        state\u003dodl_const.PROCESSING,"},{"line_number":182,"context_line":"        task\u003dtask).one_or_none()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if row is None:"},{"line_number":185,"context_line":"        return False"},{"line_number":186,"context_line":"    return True"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"def was_periodic_task_executed_recently(context, task, interval):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_fb441b49","line":186,"range":{"start_line":184,"start_character":4,"end_line":186,"end_character":15},"updated":"2019-03-13 17:40:59.000000000","message":"simplify: return row is None\nNote: its optional it won\u0027t contribute to -1 if given","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"4151fa218a58e97e2144af8b4af1159cbcbbec62","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        state\u003dodl_const.PROCESSING,"},{"line_number":182,"context_line":"        task\u003dtask).one_or_none()"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    if row is None:"},{"line_number":185,"context_line":"        return False"},{"line_number":186,"context_line":"    return True"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"def was_periodic_task_executed_recently(context, task, interval):"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_01791a2e","line":186,"range":{"start_line":184,"start_character":4,"end_line":186,"end_character":15},"in_reply_to":"5fc1f717_fb441b49","updated":"2019-03-19 07:24:41.000000000","message":"Done","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f66f90ff25fee026643bbb6085d95df1abdf775","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    if (row is None):"},{"line_number":196,"context_line":"        LOG.info(\u0027Row is absent task %s, returning False\u0027, task)"},{"line_number":197,"context_line":"        return bool(False)"},{"line_number":198,"context_line":"    result \u003d bool(not (now - delta \u003e\u003d (row.lock_updated)))"},{"line_number":199,"context_line":"    LOG.info(\u0027task %s, now %s, delta %s, lock_updated %s bool %s\u0027,"},{"line_number":200,"context_line":"             task, now, delta, row.lock_updated, result)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_3b962395","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":26},"updated":"2019-03-13 17:40:59.000000000","message":"why bool ? False is of \u003cclass bool\u003e anyway !","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"4151fa218a58e97e2144af8b4af1159cbcbbec62","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    if (row is None):"},{"line_number":196,"context_line":"        LOG.info(\u0027Row is absent task %s, returning False\u0027, task)"},{"line_number":197,"context_line":"        return bool(False)"},{"line_number":198,"context_line":"    result \u003d bool(not (now - delta \u003e\u003d (row.lock_updated)))"},{"line_number":199,"context_line":"    LOG.info(\u0027task %s, now %s, delta %s, lock_updated %s bool %s\u0027,"},{"line_number":200,"context_line":"             task, now, delta, row.lock_updated, result)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_21fe966b","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":26},"in_reply_to":"5fc1f717_3b962395","updated":"2019-03-19 07:24:41.000000000","message":"Done","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f66f90ff25fee026643bbb6085d95df1abdf775","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    if (row is None):"},{"line_number":196,"context_line":"        LOG.info(\u0027Row is absent task %s, returning False\u0027, task)"},{"line_number":197,"context_line":"        return bool(False)"},{"line_number":198,"context_line":"    result \u003d bool(not (now - delta \u003e\u003d (row.lock_updated)))"},{"line_number":199,"context_line":"    LOG.info(\u0027task %s, now %s, delta %s, lock_updated %s bool %s\u0027,"},{"line_number":200,"context_line":"             task, now, delta, row.lock_updated, result)"},{"line_number":201,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_3bc4e390","line":198,"range":{"start_line":198,"start_character":13,"end_line":198,"end_character":17},"updated":"2019-03-13 17:40:59.000000000","message":"this isn\u0027t needed","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"4151fa218a58e97e2144af8b4af1159cbcbbec62","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    if (row is None):"},{"line_number":196,"context_line":"        LOG.info(\u0027Row is absent task %s, returning False\u0027, task)"},{"line_number":197,"context_line":"        return bool(False)"},{"line_number":198,"context_line":"    result \u003d bool(not (now - delta \u003e\u003d (row.lock_updated)))"},{"line_number":199,"context_line":"    LOG.info(\u0027task %s, now %s, delta %s, lock_updated %s bool %s\u0027,"},{"line_number":200,"context_line":"             task, now, delta, row.lock_updated, result)"},{"line_number":201,"context_line":"    return result"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_81098a96","line":198,"range":{"start_line":198,"start_character":13,"end_line":198,"end_character":17},"in_reply_to":"5fc1f717_3bc4e390","updated":"2019-03-19 07:24:41.000000000","message":"Done","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"}],"networking_odl/journal/periodic_task.py":[{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"2305049003df758ab076eee7e3975713a3b10c2d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":101,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":102,"context_line":"        # Handles bug #181307"},{"line_number":103,"context_line":"        if (self.task \u003d\u003d \u0027hostconfig\u0027 and"},{"line_number":104,"context_line":"                not self.task_already_executed_recently("},{"line_number":105,"context_line":"                    context, 3 * self.interval)):"},{"line_number":106,"context_line":"                self.force_unlock(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_1b6b271e","line":103,"updated":"2019-01-29 07:18:58.000000000","message":"this is not the right place to bring specific task checks, as PeriodicTask is a common class.\n\nPlease override execute_ops in the derived PeriodicTask class for PseudoAgentDbBinding and then encode this logic there.","commit_id":"0b6d57de24b8af6c9acf707a314ffcc921f8f793"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"e036fc59f1d01b253315ff48897d28b2e5c61a4a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":101,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":102,"context_line":"        # Handles bug #181307"},{"line_number":103,"context_line":"        if (self.task \u003d\u003d \u0027hostconfig\u0027 and"},{"line_number":104,"context_line":"                not self.task_already_executed_recently("},{"line_number":105,"context_line":"                    context, 3 * self.interval)):"},{"line_number":106,"context_line":"                self.force_unlock(context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_7e634143","line":103,"in_reply_to":"9fdfeff1_1b6b271e","updated":"2019-01-29 08:23:16.000000000","message":"PseudoAgentDBBonding is not  a derived class , it is instantiating a PeriodicTask class within it like this.\nclass PseudoAgentDBBindingPeriodicTask(PseudoAgentDBBindingTaskBase):\n    def __init__(self, worker):\n       ......\n        self._periodic \u003d periodic_task.PeriodicTask(          \u0027hostconfig\u0027,cfg.CONF.ml2_odl.restconf_poll_interval)\n     self._periodic.register_operation(self._get_and_update_hostconfigs)\n        self._periodic.start()","commit_id":"0b6d57de24b8af6c9acf707a314ffcc921f8f793"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"2305049003df758ab076eee7e3975713a3b10c2d","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def force_unlock(self, context):"},{"line_number":121,"context_line":"        session \u003d context.session"},{"line_number":122,"context_line":"        with db_api.autonested_transaction(session):"},{"line_number":123,"context_line":"            db.unlock_periodic_task(session, self.task)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def register_operation(self, phase):"},{"line_number":126,"context_line":"        \"\"\"Register a function to be run by the periodic task."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_bb73fb15","line":123,"updated":"2019-01-29 07:18:58.000000000","message":"it is better to invoke clear_and_unlock_task()","commit_id":"0b6d57de24b8af6c9acf707a314ffcc921f8f793"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f66f90ff25fee026643bbb6085d95df1abdf775","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                          op_details)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def task_already_executed_recently(self, context, interval\u003dNone):"},{"line_number":71,"context_line":"        if interval is None:"},{"line_number":72,"context_line":"            interval \u003d self.interval"},{"line_number":73,"context_line":"        return db.was_periodic_task_executed_recently("},{"line_number":74,"context_line":"            context, self.task, interval)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_3b206348","line":72,"range":{"start_line":71,"start_character":8,"end_line":72,"end_character":36},"updated":"2019-03-13 17:40:59.000000000","message":"simplify: interval \u003d interval or self.interval ?","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"4151fa218a58e97e2144af8b4af1159cbcbbec62","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                          op_details)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def task_already_executed_recently(self, context, interval\u003dNone):"},{"line_number":71,"context_line":"        if interval is None:"},{"line_number":72,"context_line":"            interval \u003d self.interval"},{"line_number":73,"context_line":"        return db.was_periodic_task_executed_recently("},{"line_number":74,"context_line":"            context, self.task, interval)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_c1d552e7","line":72,"range":{"start_line":71,"start_character":8,"end_line":72,"end_character":36},"in_reply_to":"5fc1f717_3b206348","updated":"2019-03-19 07:24:41.000000000","message":"Done","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"}],"networking_odl/ml2/pseudo_agentdb_binding.py":[{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"a6efd5c5c00494f20ca4afff15a80d75a0bbe034","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        if self.task_already_executed_recently(admin_ctx):"},{"line_number":172,"context_line":"            LOG.info(\"Periodic %s task executed after periodic interval \""},{"line_number":173,"context_line":"                     \"Skipping execution.\", self.task)"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":177,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_376620c3","line":174,"updated":"2019-01-30 17:17:01.000000000","message":"why is line 168 to 174 necessary?","commit_id":"f0ea3939ba6b34d0769fb4433c0a587d668dcdb5"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"726318a2ba1be7f21aae528da6b5e8bac2c2091d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        if self.task_already_executed_recently(admin_ctx):"},{"line_number":172,"context_line":"            LOG.info(\"Periodic %s task executed after periodic interval \""},{"line_number":173,"context_line":"                     \"Skipping execution.\", self.task)"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":177,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_83fc693e","line":174,"in_reply_to":"9fdfeff1_376620c3","updated":"2019-01-31 05:38:12.000000000","message":"Required if another thread processing within the interval time since last update we need to skip hostconfig operation","commit_id":"f0ea3939ba6b34d0769fb4433c0a587d668dcdb5"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"a6efd5c5c00494f20ca4afff15a80d75a0bbe034","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # Handles bug #181307"},{"line_number":179,"context_line":"        if not self.task_already_executed_recently("},{"line_number":180,"context_line":"                admin_ctx, 3 * self.interval):"},{"line_number":181,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        if not self._lock_task(admin_ctx):"},{"line_number":184,"context_line":"            LOG.info(\"Periodic %s task already running task\", self.task)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_d758f4fa","line":181,"updated":"2019-01-30 17:17:01.000000000","message":"we have to return here...","commit_id":"f0ea3939ba6b34d0769fb4433c0a587d668dcdb5"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"726318a2ba1be7f21aae528da6b5e8bac2c2091d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # Handles bug #181307"},{"line_number":179,"context_line":"        if not self.task_already_executed_recently("},{"line_number":180,"context_line":"                admin_ctx, 3 * self.interval):"},{"line_number":181,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        if not self._lock_task(admin_ctx):"},{"line_number":184,"context_line":"            LOG.info(\"Periodic %s task already running task\", self.task)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_a3f72d59","line":181,"in_reply_to":"9fdfeff1_d758f4fa","updated":"2019-01-31 05:38:12.000000000","message":"Done","commit_id":"f0ea3939ba6b34d0769fb4433c0a587d668dcdb5"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1812feffcb0d2785fc0e191cf2d3ff3fccc5fc5e","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_8af23699","line":165,"range":{"start_line":165,"start_character":4,"end_line":165,"end_character":26},"updated":"2019-01-31 10:12:39.000000000","message":"As I  see this is mostly copy-paste, Could you please check with super(HostConfigPeriodicTask, self).execute_ops(...)\nand add your extra only to this method.","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1812feffcb0d2785fc0e191cf2d3ff3fccc5fc5e","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_aabffaa7","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"updated":"2019-01-31 10:12:39.000000000","message":"you changed the signature of the parent class\u0027 method, is that intentional?","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"836c99e189b959d2c498928d387c25ed509b97f4","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_8fda4375","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"in_reply_to":"9fdfeff1_4928db95","updated":"2019-01-31 13:51:26.000000000","message":"Corrected the signature. Additionally now I will be checking if state is processing and only then change it back to pending ( this would avoid the case where task will not be executed if in pending due to the return here)","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"836c99e189b959d2c498928d387c25ed509b97f4","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_6fb11f47","line":165,"range":{"start_line":165,"start_character":4,"end_line":165,"end_character":26},"in_reply_to":"9fdfeff1_8af23699","updated":"2019-01-31 13:51:26.000000000","message":"The new change is a check that needs to happen during the execution not before/after the task is run which could change the state of the task during its execution","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"3bbcb777033b9be6ce22ffcb940c4bedb78a7456","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_c9012b6c","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"in_reply_to":"9fdfeff1_aabffaa7","updated":"2019-01-31 11:50:31.000000000","message":"I\u0027m wondering why we need to inherit from PeriodicTask at all. It seems to me that this problem likely has its cause in the generic handling of periodic tasks. I\u0027m not familiar with this code base, but a bit of code reading leads me to believe db.unlock_periodic_task() should set the task state back to pending. If that\u0027s not happening I think we should debug that and find the why.\n\nI\u0027m not suggesting to go back to what was present in ps4, but can\u0027t we have a fix in PeriodicTask that\u0027s not specific to a hostconfig periodic task?","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"0abf6e25f7ab71f478422da5da437a30095aeb12","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class HostConfigPeriodicTask(periodic_task.PeriodicTask):"},{"line_number":165,"context_line":"    def execute_ops(self):"},{"line_number":166,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":167,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_4928db95","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"in_reply_to":"9fdfeff1_c9012b6c","updated":"2019-01-31 12:10:32.000000000","message":"Lajos,\nwe should not tinker with the parent class signature.  In fact we should override it exactly.. Good catch !\n\n@Achuth, please take care of this ..\n\nBence,  \nThe unlock_periodic_task() is not guaranteed to be invoked when we restart a neutron server.\n\nIt is also not guaranteed to be invoked if the greenlet running the execute_ops dies inbetween.\n\nSo it is imperative that we unlock any stuck \u0027PROCESSING\u0027 rows by one of the subsequent greenlets that ran at say at 3x interval (whichever server it runs on) which will bring back the row to \u0027PENDING\u0027 state for functionality to continue.","commit_id":"d9e1eeba76246cee930df26c2455ceb4d631cbc3"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":168,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Lock make sure that periodic task is executed only after"},{"line_number":171,"context_line":"        # specified interval. It makes sure that maintenance tasks"},{"line_number":172,"context_line":"        # are not executed back to back."},{"line_number":173,"context_line":"        if self.task_already_executed_recently(admin_ctx):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_87553afc","line":170,"updated":"2019-02-01 08:58:42.000000000","message":"Make sure that periodic task","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        LOG.info(\"Starting %s periodic task.\", self.task)"},{"line_number":168,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Lock make sure that periodic task is executed only after"},{"line_number":171,"context_line":"        # specified interval. It makes sure that maintenance tasks"},{"line_number":172,"context_line":"        # are not executed back to back."},{"line_number":173,"context_line":"        if self.task_already_executed_recently(admin_ctx):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_ef3382f5","line":170,"in_reply_to":"9fdfeff1_87553afc","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Lock make sure that periodic task is executed only after"},{"line_number":171,"context_line":"        # specified interval. It makes sure that maintenance tasks"},{"line_number":172,"context_line":"        # are not executed back to back."},{"line_number":173,"context_line":"        if self.task_already_executed_recently(admin_ctx):"},{"line_number":174,"context_line":"            LOG.info(\"Periodic %s task executed after periodic interval \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_a7587e30","line":171,"updated":"2019-02-01 08:58:42.000000000","message":"this enforces that hostconfig tasks are not","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        admin_ctx \u003d context.get_admin_context()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # Lock make sure that periodic task is executed only after"},{"line_number":171,"context_line":"        # specified interval. It makes sure that maintenance tasks"},{"line_number":172,"context_line":"        # are not executed back to back."},{"line_number":173,"context_line":"        if self.task_already_executed_recently(admin_ctx):"},{"line_number":174,"context_line":"            LOG.info(\"Periodic %s task executed after periodic interval \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_4f372ee5","line":171,"in_reply_to":"9fdfeff1_a7587e30","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_6767f6ea","line":180,"updated":"2019-02-01 08:58:42.000000000","message":"pleaser remove # Handles bug","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_0f3126ed","line":180,"in_reply_to":"9fdfeff1_6767f6ea","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_275d6e14","line":181,"updated":"2019-02-01 08:58:42.000000000","message":"please bring the \u0027and\u0027 operator to the next line.","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_af4b3a5d","line":181,"in_reply_to":"9fdfeff1_275d6e14","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":185,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":186,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_47b19246","line":183,"updated":"2019-02-01 08:58:42.000000000","message":"is this value tunable.  I have concerns if 3x wait would work for 100 computes equivalent hostconfig payloads..\n\ncan you please post how much is hostconfig payload for a single compute?","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # Handles bug #181307"},{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":185,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":186,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_a7a07e43","line":183,"in_reply_to":"9fdfeff1_47b19246","updated":"2019-02-05 18:34:43.000000000","message":"ODLPORTBINDING hostconfigs:\n[\n    \"{\\\"hostconfigs\\\":{\\\"hostconfig\\\":[{\\\"host-id\\\":\\\"osc-pike-ubuntu16\\\",\\\"host-type\\\":\\\"ODL L2\\\",\\\"config\\\":\\\"{\\\\\\\"allowed_network_types\\\\\\\": [\\\\\\\"local\",\n    \"\\\\\\\", \\\\\\\"flat\\\\\\\", \\\\\\\"vlan\\\\\\\", \\\\\\\"vxlan\\\\\\\", \\\\\\\"gre\\\\\\\"], \\\\\\\"bridge_mappings\\\\\\\": {}, \\\\\\\"datapath_type\\\\\\\": \\\\\\\"system\\\\\\\", \\\\\\\"supported_vnic_types\\\\\\\": [\",\n    \"{\\\\\\\"vif_type\\\\\\\": \\\\\\\"ovs\\\\\\\", \\\\\\\"vnic_type\\\\\\\": \\\\\\\"normal\\\\\\\", \\\\\\\"vif_details\\\\\\\": {\\\\\\\"support_vhost_user\\\\\\\": false, \\\\\\\"has_datapath_type_netdev\\\\\\\"\",\n    \": false, \\\\\\\"uuid\\\\\\\": \\\\\\\"043b676e-4739-44f0-93a8-d33fb42bb28b\\\\\\\", \\\\\\\"host_addresses\\\\\\\": [\\\\\\\"osc-pike-ubuntu16\\\\\\\"]}}]}\\\"}]}}\"\n]^[[00m ^[[00;33mfrom (pid\u003d14454) _rest_get_hostconfigs /opt/stack/networking-odl/networking_odl/ml2/pseudo_agentdb_binding.py:91^[[00m\n2019-02-01 15:07:50.262 ^[[00;32mDEBUG networking_odl.ml2.pseudo_agentdb_binding [^[[01;36mreq-c86db4f9-d0af-44c9-9d59-0ac90f89554b ^[[00;36mNone None^[[00;32m] ^[[01;35m^[[00;32mODLPORTBINDING Updating agents DB with ODL hostconfigs^[[00m ^[[00;33mfrom (pid\u003d14454) update_agents_db /opt/stack/networking-odl/networking_odl/ml2/pseudo_agentdb_binding.py:311^[[00m","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":185,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":186,"context_line":"            return"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_0734eadc","line":184,"updated":"2019-02-01 08:58:42.000000000","message":"this can be LOG.error","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task) and"},{"line_number":182,"context_line":"                not self.task_already_executed_recently("},{"line_number":183,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":184,"context_line":"            LOG.debug(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":185,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":186,"context_line":"            return"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_2f68aab8","line":184,"in_reply_to":"9fdfeff1_0734eadc","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"3f66f90ff25fee026643bbb6085d95df1abdf775","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task)"},{"line_number":181,"context_line":"                and not self.task_already_executed_recently("},{"line_number":182,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":183,"context_line":"            LOG.error(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":184,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":185,"context_line":"            return"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if not self._lock_task(admin_ctx):"},{"line_number":188,"context_line":"            LOG.info(\"Periodic %s task already running task\", self.task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_dbd7dfed","line":185,"range":{"start_line":180,"start_character":8,"end_line":185,"end_character":18},"updated":"2019-03-13 17:40:59.000000000","message":"what if you just add these lines in execute_ops method in PeriodicTask itself ? like\n\nif self.task \u003d\u003d \u0027hostconfig\u0027 and condition starting from L180 ?","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"dadc9e8fe8c7089afff4cbdc64a1f71fc3adfcb8","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Force hostconfig task back to pending if it has not been updated for"},{"line_number":179,"context_line":"        # a specified interval ( set now to 3 times restconf interval)"},{"line_number":180,"context_line":"        if (db._is_periodic_task_in_processing(admin_ctx, self.task)"},{"line_number":181,"context_line":"                and not self.task_already_executed_recently("},{"line_number":182,"context_line":"                admin_ctx, 3 * self.interval)):"},{"line_number":183,"context_line":"            LOG.error(\"Reset the periodic %s task back to pending.\", self.task)"},{"line_number":184,"context_line":"            self._clear_and_unlock_task(admin_ctx)"},{"line_number":185,"context_line":"            return"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if not self._lock_task(admin_ctx):"},{"line_number":188,"context_line":"            LOG.info(\"Periodic %s task already running task\", self.task)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5fc1f717_94bfc5a8","line":185,"range":{"start_line":180,"start_character":8,"end_line":185,"end_character":18},"in_reply_to":"5fc1f717_dbd7dfed","updated":"2019-03-15 06:42:32.000000000","message":"There was a comment for PS4 to move it out from base class, so  I had moved it out to the new Hostconfig specific task. what are the pros / cons that you can think of ?\nOne is this can be applicable to other tasks as well that can go into such a state but do we want to  reset state for any valid task that is probably taking time to complete","commit_id":"5146f889a88d192d5cbbfd903ebb2c8136c5e421"}],"networking_odl/tests/unit/db/test_db.py":[{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"8484f4689efa810d420812c1b439d5e24232ae4f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(True, db._is_periodic_task_in_processing("},{"line_number":419,"context_line":"            self.db_context, processing_task))"},{"line_number":420,"context_line":"        self.assertEqual(False, db._is_periodic_task_in_processing("},{"line_number":421,"context_line":"            self.db_context, pending_task))"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def test_lock_periodic_task(self):"},{"line_number":424,"context_line":"        self._test_periodic_task_lock_unlock(db.lock_periodic_task,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_e789a674","line":421,"updated":"2019-02-01 08:58:42.000000000","message":"we need add a unit-test to check if the reset of state happens in 3x time.. can you please add one?","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"5f14311907bf4e25b2470fdd0725c650e2b735c2","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(True, db._is_periodic_task_in_processing("},{"line_number":419,"context_line":"            self.db_context, processing_task))"},{"line_number":420,"context_line":"        self.assertEqual(False, db._is_periodic_task_in_processing("},{"line_number":421,"context_line":"            self.db_context, pending_task))"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def test_lock_periodic_task(self):"},{"line_number":424,"context_line":"        self._test_periodic_task_lock_unlock(db.lock_periodic_task,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fdfeff1_af99fad0","line":421,"in_reply_to":"9fdfeff1_e789a674","updated":"2019-02-05 18:34:43.000000000","message":"Done","commit_id":"50c9d946f90992c6cf8001e2e4ec0946e28ffb71"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"c6bf5d9c6ef37f10799e5ed9a354fa3202729f9e","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(True, db._is_periodic_task_in_processing("},{"line_number":419,"context_line":"            self.db_context, processing_task))"},{"line_number":420,"context_line":"        self.assertEqual(False, db._is_periodic_task_in_processing("},{"line_number":421,"context_line":"            self.db_context, pending_task))"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def test_lock_periodic_task(self):"},{"line_number":424,"context_line":"        self._test_periodic_task_lock_unlock(db.lock_periodic_task,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_16727a7d","line":421,"updated":"2019-02-21 09:30:00.000000000","message":"this test doesn\u0027t seem to cover what we need..\n\nwe need a test that will set the lock state as PROCESSING and then have another task simply comes in after 90 seconds (i.e., 1.5 minutes) and then our assert must be after that second task completes, lock state must be PENDING.\n\ncan you please rewrite this test?","commit_id":"9cb7acb5709ec22f24800c3dde5bae04baf1ffc0"},{"author":{"_account_id":25550,"name":"Achuth","email":"achuth.maniyedath@gmail.com","username":"achuthm"},"change_message_id":"fc8c1cd7995d149160b17ae2d0bdcff0ef094324","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertEqual(True, db._is_periodic_task_in_processing("},{"line_number":419,"context_line":"            self.db_context, processing_task))"},{"line_number":420,"context_line":"        self.assertEqual(False, db._is_periodic_task_in_processing("},{"line_number":421,"context_line":"            self.db_context, pending_task))"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def test_lock_periodic_task(self):"},{"line_number":424,"context_line":"        self._test_periodic_task_lock_unlock(db.lock_periodic_task,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9fdfeff1_10a6fdac","line":421,"in_reply_to":"9fdfeff1_16727a7d","updated":"2019-02-21 12:03:15.000000000","message":"The test to check when processing has changed to pending is made available in test_periodic_task.py -\u003e test_processing_reset","commit_id":"9cb7acb5709ec22f24800c3dde5bae04baf1ffc0"}]}
