)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for driver-specific periodic tasks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Syncs openstack.common.periodic_task to"},{"line_number":10,"context_line":"commit 0848516902444ca83dd4998655cae3901d038d"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I63ee4ce30b3684e53158fe5f985efd04e4e88fef"},{"line_number":13,"context_line":"Implements: blueprint driver-periodic-tasks"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da86d52c_68de2d41","line":10,"updated":"2015-02-03 02:53:37.000000000","message":"I couldn\u0027t figure out how to use that commit value to get the appropriate file. It was this patch to periodic_task, right? [1] \n\n[1] https://review.openstack.org/#/c/148854/","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for driver-specific periodic tasks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Syncs openstack.common.periodic_task to"},{"line_number":10,"context_line":"commit 0848516902444ca83dd4998655cae3901d038d"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I63ee4ce30b3684e53158fe5f985efd04e4e88fef"},{"line_number":13,"context_line":"Implements: blueprint driver-periodic-tasks"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"da86d52c_30373250","line":10,"in_reply_to":"da86d52c_68de2d41","updated":"2015-02-03 11:10:17.000000000","message":"right. will update","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f607a2cba1773406fc453a70add397647c8b278b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Syncs openstack.common.periodic_task to"},{"line_number":10,"context_line":"commit 0848516902444ca83dd4998655cae3901d038d"},{"line_number":11,"context_line":"(https://review.openstack.org/#/c/148854/)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch also makes service start running periodic tasks"},{"line_number":14,"context_line":"after init_host() is called."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"da86d52c_de997720","line":11,"updated":"2015-02-03 17:00:56.000000000","message":"Jim R helped me with this one. He said this is the merge commit; this is the sha that we should use here: fbd77a7b9b569210f0df18f33c90ef69c9166a2f\n\nThat works for me. (And no need for the link to the review).","commit_id":"d3d3164a6b8bc4ff5fdd02ea4ba22e411868b729"}],"doc/source/dev/architecture.rst":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"551cce2cdf78efe9a7c4d528681f7a5c72a0aa85","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Drivers may run their own periodic tasks, i.e. actions run repeatedly after"},{"line_number":78,"context_line":"certain amount of time. Such task is created by decorating a method on the"},{"line_number":79,"context_line":"dirver itself or on any interface with driver_periodic_task_ decorator, e.g."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"::"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"da86d52c_2c301b56","line":79,"updated":"2015-01-30 20:31:28.000000000","message":"Nit: s/dirver/driver/","commit_id":"54b4f53c898d2158f42c81f4e619a7f8689776b7"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Driver-Specific Periodic Tasks"},{"line_number":75,"context_line":"------------------------------"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Drivers may run their own periodic tasks, i.e. actions run repeatedly after"},{"line_number":78,"context_line":"certain amount of time. Such task is created by decorating a method on the"},{"line_number":79,"context_line":"driver itself or on any interface with driver_periodic_task_ decorator, e.g."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_822a622a","line":77,"updated":"2015-02-03 02:53:37.000000000","message":"nit s/after/after a/","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Driver-Specific Periodic Tasks"},{"line_number":75,"context_line":"------------------------------"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Drivers may run their own periodic tasks, i.e. actions run repeatedly after"},{"line_number":78,"context_line":"certain amount of time. Such task is created by decorating a method on the"},{"line_number":79,"context_line":"driver itself or on any interface with driver_periodic_task_ decorator, e.g."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_503ae636","line":77,"in_reply_to":"da86d52c_822a622a","updated":"2015-02-03 11:10:17.000000000","message":"Done","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    class FakePower(base.PowerInterface):"},{"line_number":84,"context_line":"        @base.driver_periodic_task(spacing\u003d42)"},{"line_number":85,"context_line":"        def task(self, manager, context):"},{"line_number":86,"context_line":"            pass  # do something"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_a272067a","line":84,"updated":"2015-02-03 02:53:37.000000000","message":"what is the \u0027spacing\u003d42\u0027 for? (That\u0027s what I would ask if I were reading this. Maybe not even put the spacing?)","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":81,"context_line":"::"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    class FakePower(base.PowerInterface):"},{"line_number":84,"context_line":"        @base.driver_periodic_task(spacing\u003d42)"},{"line_number":85,"context_line":"        def task(self, manager, context):"},{"line_number":86,"context_line":"            pass  # do something"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_10178ea4","line":84,"in_reply_to":"da86d52c_a272067a","updated":"2015-02-03 11:10:17.000000000","message":"I\u0027d better clarify it, because it\u0027s an important value to set","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. note::"},{"line_number":98,"context_line":"    Method names should be unique within Python module due to how periodic"},{"line_number":99,"context_line":"    tasks are named. Use ``name`` argument to driver_periodic_task_ to"},{"line_number":100,"context_line":"    override automatically generated name."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_02c4b25d","line":98,"updated":"2015-02-03 02:53:37.000000000","message":"the names of the methods used for the periodic tasks, right? Or all method names in that module?","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":".. note::"},{"line_number":98,"context_line":"    Method names should be unique within Python module due to how periodic"},{"line_number":99,"context_line":"    tasks are named. Use ``name`` argument to driver_periodic_task_ to"},{"line_number":100,"context_line":"    override automatically generated name."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"da86d52c_b02162fd","line":98,"in_reply_to":"da86d52c_02c4b25d","updated":"2015-02-03 11:10:17.000000000","message":"Done","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f607a2cba1773406fc453a70add397647c8b278b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            pass  # do something"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Here ``spacing`` argument is a period for a given periodic task."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":".. note::"},{"line_number":100,"context_line":"    By default periodic task names are derived from method names,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"da86d52c_5eaca735","line":97,"updated":"2015-02-03 17:00:56.000000000","message":"(only if you want)  s/period/the period (in seconds)/","commit_id":"d3d3164a6b8bc4ff5fdd02ea4ba22e411868b729"}],"ironic/conductor/manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        for driver_obj in driver_factory.drivers().values():"},{"line_number":219,"context_line":"            self._collect_periodic_tasks(driver_obj)"},{"line_number":220,"context_line":"            for iface_name in (driver_obj.core_interfaces +"},{"line_number":221,"context_line":"                               driver_obj.standard_interfaces):"},{"line_number":222,"context_line":"                iface \u003d getattr(driver_obj, iface_name, None)"},{"line_number":223,"context_line":"                if iface:"},{"line_number":224,"context_line":"                    self._collect_periodic_tasks(iface)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_c2729ae2","line":221,"updated":"2015-02-03 02:53:37.000000000","message":"not vendor interface?","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        for driver_obj in driver_factory.drivers().values():"},{"line_number":219,"context_line":"            self._collect_periodic_tasks(driver_obj)"},{"line_number":220,"context_line":"            for iface_name in (driver_obj.core_interfaces +"},{"line_number":221,"context_line":"                               driver_obj.standard_interfaces):"},{"line_number":222,"context_line":"                iface \u003d getattr(driver_obj, iface_name, None)"},{"line_number":223,"context_line":"                if iface:"},{"line_number":224,"context_line":"                    self._collect_periodic_tasks(iface)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_9050de5f","line":221,"in_reply_to":"da86d52c_c2729ae2","updated":"2015-02-03 11:10:17.000000000","message":"hmmm.. didn\u0027t notice it\u0027s not part of these lists (no idea why, it\u0027s a standard interface)","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        idle \u003d self.run_periodic_tasks(context, raise_on_error\u003draise_on_error)"},{"line_number":286,"context_line":"        if self.periodic_first_run:"},{"line_number":287,"context_line":"            # NOTE(dtantsur): driver-specific periodic tasks are added"},{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_0802110b","line":288,"updated":"2015-02-03 02:53:37.000000000","message":"This is cuz RPCService sets things up and this is called before the RPCService calls manager.init_host(), right?","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        idle \u003d self.run_periodic_tasks(context, raise_on_error\u003draise_on_error)"},{"line_number":286,"context_line":"        if self.periodic_first_run:"},{"line_number":287,"context_line":"            # NOTE(dtantsur): driver-specific periodic tasks are added"},{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b04fa2bc","line":288,"in_reply_to":"da86d52c_0802110b","updated":"2015-02-03 11:10:17.000000000","message":"yes","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c6f91b71acd8b545e584e182fdc1d6e729569ef9","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        idle \u003d self.run_periodic_tasks(context, raise_on_error\u003draise_on_error)"},{"line_number":286,"context_line":"        if self.periodic_first_run:"},{"line_number":287,"context_line":"            # NOTE(dtantsur): driver-specific periodic tasks are added"},{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_27a612c2","line":288,"in_reply_to":"da86d52c_7340d4a5","updated":"2015-02-03 12:55:17.000000000","message":"Sorry, I got that the wrong way around - that is how it is at the moment. Move the call to periodic_tasks after init_host.","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2472b1f9ba796d10fff7818278715762a482c2d4","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        idle \u003d self.run_periodic_tasks(context, raise_on_error\u003draise_on_error)"},{"line_number":286,"context_line":"        if self.periodic_first_run:"},{"line_number":287,"context_line":"            # NOTE(dtantsur): driver-specific periodic tasks are added"},{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_7340d4a5","line":288,"in_reply_to":"da86d52c_b04fa2bc","updated":"2015-02-03 11:23:32.000000000","message":"A simple fix would be to move the call to init_host after the call to periodic_tasks in common/service.py. I\u0027m not sure whether this would have more far reaching effects without fully looking into it.","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"147278161c226e4410dd019b14a44df71b1db62c","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            return idle"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_e8585d58","line":291,"updated":"2015-02-03 02:53:37.000000000","message":"I don\u0027t understand this, but that could be cuz I don\u0027t understand the periodic_task code. If I look at PeriodicTasks.run_periodic_tasks(), it looks like it returns some value \u003c\u003d DEFAULT_INTERVAL, so this min() will just return idle anyway. What am I missing?","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"890bdc3714fa5e779b0027a6d84ac1e2245b0aa0","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            return idle"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_ed906297","line":291,"in_reply_to":"da86d52c_e8585d58","updated":"2015-02-03 10:26:51.000000000","message":"I\u0027m also unfamiliar with the periodic_task code, but I tend to agree with Ruby - I don\u0027t see what this achieves.","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4cddd4556ef7a6a3d49d4ba6e9abd56009ce1ebd","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            # after this method is called the first time. We need some"},{"line_number":289,"context_line":"            # reasonable idle period, so that they have chances to run soon."},{"line_number":290,"context_line":"            self.periodic_first_run \u003d False"},{"line_number":291,"context_line":"            return min(idle, periodic_task.DEFAULT_INTERVAL)"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            return idle"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_50174651","line":291,"in_reply_to":"da86d52c_ed906297","updated":"2015-02-03 11:10:17.000000000","message":"right. no idea how to handle it then... maybe I\u0027d better just rerun it after a couple of seconds?","commit_id":"286f76c80b758cdfd124db0e541c1e85c18aea5b"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"7bc8d30f41d84d124287829f54da7898c632be3e","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        self.assertEqual(obj.task, tasks[expected_task_name])"},{"line_number":246,"context_line":"        self.assertEqual(42,"},{"line_number":247,"context_line":"                         self.service._periodic_spacing[expected_task_name])"},{"line_number":248,"context_line":"        self.assertIn(expected_task_name, self.service._periodic_last_run)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    @mock.patch.object(driver_factory.DriverFactory, \u0027__init__\u0027)"},{"line_number":251,"context_line":"    def test_start_fails_on_missing_driver(self, mock_df):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa81d914_bb3ef827","line":248,"updated":"2015-01-28 01:06:14.000000000","message":"This might be accomplished more clearly by using stevedore\u0027s testing tools, but this is fine too.\n\ne.g. http://docs.openstack.org/developer/stevedore/managers.html#stevedore.tests.manager.TestExtensionManager","commit_id":"95a55b727541de2387631575a6993438ae98a608"}]}
