)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"067a6aad165cb13a259168ca04f67bb2ac50f401","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As requested by clarkb, convert to using timeutils so that the unit"},{"line_number":10,"context_line":"test doesn\u0027t have to actually sleep while testing."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Resolves bug 1098979."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I1e6a0a0b1622a3f8c37c42376f5261f5f2dbf6fe"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAOH%2F%2F7Ik%3D","line":11,"updated":"2013-03-20 20:09:42.000000000","message":"Suggested commit message:\n\nRework time handling in periodic tasks.\n\nUpdate time calculations in the periodic task handling to use the timeutils module from oslo.  This provides benefits for unit testing, since we can easily override the time functions to simulate time differences without having to actually sleep and make the unit tests run unnecessarily long.","commit_id":"a6d9dbc43004d7288c378b4d708b7e3fa719911e"}],"nova/manager.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"00725fb309bed61036b10863838a1d90ce67a97a","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # If a periodic task is _nearly_ due, then we\u0027ll run it early"},{"line_number":224,"context_line":"            run_now \u003d False"},{"line_number":225,"context_line":"            if ((self._periodic_spacing[task_name] is None"},{"line_number":226,"context_line":"                 or self._periodic_last_run[task_name] is None)):"},{"line_number":227,"context_line":"                run_now \u003d True"},{"line_number":228,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2FzYE%3D","line":225,"updated":"2013-03-12 00:33:02.000000000","message":"Need 2 sets of parentheses?","commit_id":"468795d89bbcf566e5fc0473d5ee873794933e9f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"00725fb309bed61036b10863838a1d90ce67a97a","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                due \u003d self._periodic_last_run[task_name] + delta"},{"line_number":232,"context_line":"                wait \u003d timeutils.delta_seconds(timeutils.utcnow(), due)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"                print \u0027Name    : %s\u0027 % task_name"},{"line_number":235,"context_line":"                print \u0027Last run: %s\u0027 % self._periodic_last_run[task_name]"},{"line_number":236,"context_line":"                print \u0027Delay   : %s\u0027 % self._periodic_spacing[task_name]"},{"line_number":237,"context_line":"                print \u0027Next run: %s\u0027 % due"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2FzX0%3D","line":234,"updated":"2013-03-12 00:33:02.000000000","message":"prints were for debug?","commit_id":"468795d89bbcf566e5fc0473d5ee873794933e9f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"61656b1616e31ecf56bd1e00398cbd6d364aadd1","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                due \u003d self._periodic_last_run[task_name] + delta"},{"line_number":232,"context_line":"                wait \u003d timeutils.delta_seconds(timeutils.utcnow(), due)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"                print \u0027Name    : %s\u0027 % task_name"},{"line_number":235,"context_line":"                print \u0027Last run: %s\u0027 % self._periodic_last_run[task_name]"},{"line_number":236,"context_line":"                print \u0027Delay   : %s\u0027 % self._periodic_spacing[task_name]"},{"line_number":237,"context_line":"                print \u0027Next run: %s\u0027 % due"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2FzXQ%3D","line":234,"in_reply_to":"AAAAN3%2F%2FzX0%3D","updated":"2013-03-12 00:42:49.000000000","message":"Yeah, these should be removed or converted to debug log statements (but I suspect the former)","commit_id":"468795d89bbcf566e5fc0473d5ee873794933e9f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"ca0654894a352a0162274fc98682661b6a2b6f3f","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # If a periodic task is _nearly_ due, then we\u0027ll run it early"},{"line_number":224,"context_line":"            run_now \u003d False"},{"line_number":225,"context_line":"            if ((self._periodic_spacing[task_name] is None"},{"line_number":226,"context_line":"                 or self._periodic_last_run[task_name] is None)):"},{"line_number":227,"context_line":"                run_now \u003d True"},{"line_number":228,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2Fy3Q%3D","line":225,"updated":"2013-03-12 11:40:42.000000000","message":"@lifeless, do we need 2 sets of parentheses?","commit_id":"e3a6aafd65fbcf7b1b170f8f1cb9c97b247d690a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"c769eec9a61c7c201a24c1c2179054a142901da1","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # If a periodic task is _nearly_ due, then we\u0027ll run it early"},{"line_number":224,"context_line":"            run_now \u003d False"},{"line_number":225,"context_line":"            if ((self._periodic_spacing[task_name] is None"},{"line_number":226,"context_line":"                 or self._periodic_last_run[task_name] is None)):"},{"line_number":227,"context_line":"                run_now \u003d True"},{"line_number":228,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2Fytk%3D","line":225,"in_reply_to":"AAAAN3%2F%2Fy3Q%3D","updated":"2013-03-12 14:02:56.000000000","message":"The set of two is a requirement of the pep8 indent rules. Otherwise the indented block inside the statement lines up with the second line of the if which causes a pep8 failure.","commit_id":"e3a6aafd65fbcf7b1b170f8f1cb9c97b247d690a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"af04c9aa8b669f4b9a251233b83b6dfa65a848d1","unresolved":false,"context_lines":[{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            # If a periodic task is _nearly_ due, then we\u0027ll run it early"},{"line_number":224,"context_line":"            run_now \u003d False"},{"line_number":225,"context_line":"            if ((self._periodic_spacing[task_name] is None"},{"line_number":226,"context_line":"                 or self._periodic_last_run[task_name] is None)):"},{"line_number":227,"context_line":"                run_now \u003d True"},{"line_number":228,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2Fyrw%3D","line":225,"in_reply_to":"AAAAN3%2F%2Fytk%3D","updated":"2013-03-12 14:12:30.000000000","message":"Since when? I mean I know that regular pep8 will complain about this, but I\u0027m pretty sure we have this rule disabled in nova, no?","commit_id":"e3a6aafd65fbcf7b1b170f8f1cb9c97b247d690a"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"162fecfa2f7649ac5a71e7a8cae07fa82177ce85","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                    idle_for \u003d min(wait, idle_for)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            if not run_now:"},{"line_number":240,"context_line":"                continue"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            LOG.debug(_(\"Running periodic task %(full_task_name)s\"), locals())"},{"line_number":243,"context_line":"            self._periodic_last_run[task_name] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F2Kw%3D","line":240,"updated":"2013-03-25 09:28:50.000000000","message":"The run_now logic seems overly convoluted. This is easier:\n\n    if (self._periodic_spacing[task_name] is not None and\n        self._periodic_last_run[task_name] is not None):\n        delta \u003d datetime.timedelta(\n            seconds\u003dself._periodic_spacing[task_name])\n        due \u003d self._periodic_last_run[task_name] + delta\n        wait \u003d timeutils.delta_seconds(timeutils.utcnow(), due)\n\n        if not timeutils.is_soon(due, 0.2):\n            idle_for \u003d min(wait, idle_for)\n            continue\n\nand refactored a bit more:\n\n    now \u003d timeutils.utcnow()\n    spacing \u003d self._periodic_spacing[task_name]\n    last_run \u003d self._periodic_last_run[task_name]\n\n    # If a periodic task is _nearly_ due, then we\u0027ll run it early\n    if spacing is not None and last_run is not None:\n        due \u003d last_run + datetime.timedelta(seconds\u003dspacing)\n        if not timeutils.is_soon(due, 0.2):\n            idle_for \u003d min(idle_for, timeutils.delta_seconds(now, due))\n            continue\n\n    if spacing is not None:\n        idle_for \u003d min(idle_for, spacing)\n\n(the last bit is moved up from the bottom of the loop)","commit_id":"fd91b7a4afdb2f71109ae945243f49310536dd56"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a525c8103da7b6c18b61d6c78d2e2571100f1465","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                    idle_for \u003d min(wait, idle_for)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            if not run_now:"},{"line_number":240,"context_line":"                continue"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            LOG.debug(_(\"Running periodic task %(full_task_name)s\"), locals())"},{"line_number":243,"context_line":"            self._periodic_last_run[task_name] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2Fy0A%3D","line":240,"in_reply_to":"AAAAOH%2F%2F2Kw%3D","updated":"2013-03-27 09:04:04.000000000","message":"Thanks for this.","commit_id":"fd91b7a4afdb2f71109ae945243f49310536dd56"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"63a1c3afaec134ad41a85cbaadb0d0a6c6229502","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    continue"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"                if spacing is not None:"},{"line_number":235,"context_line":"                    idle_for \u003d min(idle_for, spacing)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            LOG.debug(_(\"Running periodic task %(full_task_name)s\"), locals())"},{"line_number":238,"context_line":"            self._periodic_last_run[task_name] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2Fypg%3D","line":235,"updated":"2013-03-27 12:29:52.000000000","message":"these two lines are over-indented - the code would have been run previously even if last_run was None","commit_id":"1aa8ac9f3d990d49e645260ec6f29a04790b9dbd"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"de688187efe31ac10c8e30d9466180d4384ba2c2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    continue"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"                if spacing is not None:"},{"line_number":235,"context_line":"                    idle_for \u003d min(idle_for, spacing)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            LOG.debug(_(\"Running periodic task %(full_task_name)s\"), locals())"},{"line_number":238,"context_line":"            self._periodic_last_run[task_name] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2FxYs%3D","line":235,"in_reply_to":"AAAAOH%2F%2Fypg%3D","updated":"2013-03-28 05:15:09.000000000","message":"Thanks for this. Fixed.","commit_id":"1aa8ac9f3d990d49e645260ec6f29a04790b9dbd"}],"nova/tests/test_periodic_tasks.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"162fecfa2f7649ac5a71e7a8cae07fa82177ce85","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        m.periodic_tasks(None)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        fake_time +\u003d datetime.timedelta(seconds\u003d5)"},{"line_number":96,"context_line":"        timeutils.set_time_override(fake_time)"},{"line_number":97,"context_line":"        idle \u003d m.periodic_tasks(None)"},{"line_number":98,"context_line":"        self.assertAlmostEqual(5, idle, 1)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F2Ks%3D","line":96,"updated":"2013-03-25 09:28:50.000000000","message":"You can use advance_time_delta()","commit_id":"fd91b7a4afdb2f71109ae945243f49310536dd56"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a525c8103da7b6c18b61d6c78d2e2571100f1465","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        m.periodic_tasks(None)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        fake_time +\u003d datetime.timedelta(seconds\u003d5)"},{"line_number":96,"context_line":"        timeutils.set_time_override(fake_time)"},{"line_number":97,"context_line":"        idle \u003d m.periodic_tasks(None)"},{"line_number":98,"context_line":"        self.assertAlmostEqual(5, idle, 1)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2Fy0E%3D","line":96,"in_reply_to":"AAAAOH%2F%2F2Ks%3D","updated":"2013-03-27 09:04:04.000000000","message":"Done","commit_id":"fd91b7a4afdb2f71109ae945243f49310536dd56"}]}
