)]}'
{"ironic/conductor/base_manager.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fe78c04e421f15aa8e39da82a662658a46fd2bf4","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self._collect_periodic_tasks(driver_obj)"},{"line_number":112,"context_line":"            for iface_name in (driver_obj.core_interfaces +"},{"line_number":113,"context_line":"                               driver_obj.standard_interfaces +"},{"line_number":114,"context_line":"                               driver_obj.enabled_interfaces +"},{"line_number":115,"context_line":"                               [\u0027vendor\u0027]):"},{"line_number":116,"context_line":"                iface \u003d getattr(driver_obj, iface_name, None)"},{"line_number":117,"context_line":"                if iface:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_ccb9b730","line":114,"updated":"2016-02-25 16:43:59.000000000","message":"This is a dict and you\u0027re adding it to lists.","commit_id":"86b26b739671d5af3c34e3da4d1a9d33c2352e3e"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"62dac32663e054c390c2b680f49d5030de57f99f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self._collect_periodic_tasks(driver_obj, (self, admin_context))"},{"line_number":136,"context_line":"            for iface_name in (driver_obj.core_interfaces +"},{"line_number":137,"context_line":"                               driver_obj.standard_interfaces +"},{"line_number":138,"context_line":"                               driver_obj.enabled_interfaces +"},{"line_number":139,"context_line":"                               [\u0027vendor\u0027]):"},{"line_number":140,"context_line":"                iface \u003d getattr(driver_obj, iface_name, None)"},{"line_number":141,"context_line":"                if iface and iface.__class__ not in periodic_task_classes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_2ba3e950","line":138,"updated":"2016-02-26 15:49:29.000000000","message":"This no longer exists we need to do something like:\n\nfor interface in driver_factory.interfaces().values():\n   self._collect_periodic_tasks(interface, (self, admin_context))\n\nwhere driver_factory.interfaces returns a dict mapping just like driver_factory.drivers() does.","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"}],"ironic/conductor/task_manager.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fe78c04e421f15aa8e39da82a662658a46fd2bf4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d ("},{"line_number":217,"context_line":"                self.driver.enabled_interfaces[\u0027network\u0027][self.node.network_interface])"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"            # NOTE(deva): this handles the Juno-era NOSTATE state"},{"line_number":220,"context_line":"            #             and should be deleted after Kilo is released"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_a7672cb6","line":217,"updated":"2016-02-25 16:43:59.000000000","message":"or default?","commit_id":"86b26b739671d5af3c34e3da4d1a9d33c2352e3e"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a367ce3ef68c252d803ed53cd0fd6cc804eaf9b2","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                                self.node.id)"},{"line_number":213,"context_line":"            _driver \u003d driver_factory.get_driver(driver_name or"},{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d driver_factory.NetworkInterfaceFactory("},{"line_number":217,"context_line":"                ).get_interface_by_name(self.node.network_interface)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_005ef2e8","line":215,"updated":"2016-02-25 23:20:28.000000000","message":"I am concerned about this deepcopy(_driver) copying the driver singleton.\n\nThe most logical thing to do is:\n- make singletons out of each driver interface class\n- create a new \"driver object\" class\n- the \"driver object\" associates thee interface singletons  during instantiation (or fetches references from the enable interface list or something)\n- make task.driver to become an instance of this new \"driver object\" class","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"11ef88de6bfc15a0e40cd098e02f8fcf186338bc","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                                self.node.id)"},{"line_number":213,"context_line":"            _driver \u003d driver_factory.get_driver(driver_name or"},{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d driver_factory.NetworkInterfaceFactory("},{"line_number":217,"context_line":"                ).get_interface_by_name(self.node.network_interface)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_26a4ee55","line":215,"in_reply_to":"9aed3d3a_005ef2e8","updated":"2016-02-26 00:30:39.000000000","message":"So, after talking about this in IRC:\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2016-02-25.log.html#t2016-02-25T23:09:54\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2016-02-26.log.html\n\nWe decided that this is the right path forward, however is much more work and should probably wait for Newton (and have a spec). I\u0027ll be writing this spec up after I\u0027m done re-working this patch.","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"62dac32663e054c390c2b680f49d5030de57f99f","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                                self.node.id)"},{"line_number":213,"context_line":"            _driver \u003d driver_factory.get_driver(driver_name or"},{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d driver_factory.NetworkInterfaceFactory("},{"line_number":217,"context_line":"                ).get_interface_by_name(self.node.network_interface)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_e64db89a","line":215,"in_reply_to":"9aed3d3a_26a4ee55","updated":"2016-02-26 15:49:29.000000000","message":"Wouldn\u0027t it be pretty easy do just do:\n\n    driver \u003d object()\n    driver.\u003csome interface\u003e \u003d _driver.\u003csome interface\u003e\n\nso that we\u0027re only using pointers to the singleton instead of deep copying the whole thing?","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7c0a498ce3a9c4ea37fb09a3f2c49ce0410fb594","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                                self.node.id)"},{"line_number":213,"context_line":"            _driver \u003d driver_factory.get_driver(driver_name or"},{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d driver_factory.NetworkInterfaceFactory("},{"line_number":217,"context_line":"                ).get_interface_by_name(self.node.network_interface)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_ccba5323","line":215,"in_reply_to":"9aed3d3a_b1680889","updated":"2016-02-26 16:06:28.000000000","message":"+1, but still should remove the deep copy if we can","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"50448dc566972cd3561bea9ae82c9ef3bb658e22","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                                                self.node.id)"},{"line_number":213,"context_line":"            _driver \u003d driver_factory.get_driver(driver_name or"},{"line_number":214,"context_line":"                                                self.node.driver)"},{"line_number":215,"context_line":"            self.driver \u003d copy.deepcopy(_driver)"},{"line_number":216,"context_line":"            self.driver.network \u003d driver_factory.NetworkInterfaceFactory("},{"line_number":217,"context_line":"                ).get_interface_by_name(self.node.network_interface)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_b1680889","line":215,"in_reply_to":"9aed3d3a_e64db89a","updated":"2016-02-26 15:53:24.000000000","message":"Yeah, now we will have 1 driver per-node so we have to assembly it on the fly.\n\nBut it feels out of the place to task_manager module to assembly it. IMHO the driver_factory should do it. What about having a new method in driver_factory.py called get_driver_for_node() ?\n\ne.g\n\ndriver_factory.py:\n\n def get_driver_for_node(node, driver_name\u003dNone):\n      base_driver \u003d copy.deepcopy(get_driver(driver_name or node.name))\n      base_driver.network \u003d NetworkInterfaceFactory(node.network_name)\n      return base_driver\n\n\nOr even re factoring get_driver() to do that","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"}],"ironic/drivers/base.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"a367ce3ef68c252d803ed53cd0fd6cc804eaf9b2","unresolved":false,"context_lines":[{"line_number":988,"context_line":"        return raid.get_logical_disk_properties(self.raid_schema)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":992,"context_line":"class NetworkInterface(object):"},{"line_number":993,"context_line":"    \"\"\"Base class for network drivers\"\"\""},{"line_number":994,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_60653ee0","line":991,"updated":"2016-02-25 23:20:28.000000000","message":"this class makes me very happy","commit_id":"c2b83212425d80da165540a930d0abf3dfc7d971"}]}
