)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3d341f8253b52db23225ad3281ff0777c96f6a2d","unresolved":false,"context_lines":[{"line_number":2102,"context_line":"        :param context: request context."},{"line_number":2103,"context_line":"        :param node_id: node id or uuid."},{"line_number":2104,"context_line":"        :param callback_url: URL to reach back to the ramdisk."},{"line_number":2105,"context_line":"        :raises: InvalidParameterValue, if validation of target raid config"},{"line_number":2106,"context_line":"            fails."},{"line_number":2107,"context_line":"        :raises: MissingParameterValue, if some required parameters are"},{"line_number":2108,"context_line":"            missing."}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_5d2c1902","line":2105,"range":{"start_line":2105,"start_character":57,"end_line":2105,"end_character":68},"updated":"2016-06-23 11:10:18.000000000","message":"This is not raid related.","commit_id":"34e890194722ee7dc491c040a934f64345ba1698"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d4abd39dc8d2cd6af16f79d7317c26010d68e088","unresolved":false,"context_lines":[{"line_number":2102,"context_line":"        :param context: request context."},{"line_number":2103,"context_line":"        :param node_id: node id or uuid."},{"line_number":2104,"context_line":"        :param callback_url: URL to reach back to the ramdisk."},{"line_number":2105,"context_line":"        :raises: InvalidParameterValue, if validation of target raid config"},{"line_number":2106,"context_line":"            fails."},{"line_number":2107,"context_line":"        :raises: MissingParameterValue, if some required parameters are"},{"line_number":2108,"context_line":"            missing."}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_bd509d5f","line":2105,"range":{"start_line":2105,"start_character":57,"end_line":2105,"end_character":68},"in_reply_to":"3aaa91ec_5d2c1902","updated":"2016-06-23 11:11:16.000000000","message":"ooops, copy-paste failure :)","commit_id":"34e890194722ee7dc491c040a934f64345ba1698"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":2093,"context_line":""},{"line_number":2094,"context_line":"        return driver.raid.get_logical_disk_properties()"},{"line_number":2095,"context_line":""},{"line_number":2096,"context_line":"    @messaging.expected_exceptions(exception.NoFreeConductorWorker)"},{"line_number":2097,"context_line":"    def heartbeat(self, context, node_id, callback_url):"},{"line_number":2098,"context_line":"        \"\"\"Process a heartbeat from the ramdisk."},{"line_number":2099,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_74273cca","line":2096,"updated":"2016-06-24 05:15:28.000000000","message":"Should we add NodeLocked to expected exceptions?","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":2100,"context_line":"        :param context: request context."},{"line_number":2101,"context_line":"        :param node_id: node id or uuid."},{"line_number":2102,"context_line":"        :param callback_url: URL to reach back to the ramdisk."},{"line_number":2103,"context_line":"        :raises: NodeLocked if node is locked by another conductor."},{"line_number":2104,"context_line":"        \"\"\""},{"line_number":2105,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2106,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_343934f3","line":2103,"updated":"2016-06-24 05:15:28.000000000","message":"NoFreeConductorWorker can be raised as well.","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"29379b21351ec1426f923297439cf7f2a098313b","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        \"\"\""},{"line_number":2106,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        # NOTE(dtantsur): we acquire a shared lock to begin with, drivers are"},{"line_number":2109,"context_line":"        # free to promote it to an exclusive one."},{"line_number":2110,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":2111,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2112,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_59f457ce","line":2109,"range":{"start_line":2108,"start_character":26,"end_line":2109,"end_character":48},"updated":"2016-06-28 13:45:24.000000000","message":"So far in tree we only have 1 heartbeat() method (at agent_base_vendor.py) and it does write stuff to the db (at driver_internal_info). I think it would be safer if we had an exclusive lock\n\nDo we foresee a heartbeat mechanism which doesn\u0027t involve writing to the db?","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"05b2c159f95dd164384aacfc8ba9af4783a7d299","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        \"\"\""},{"line_number":2106,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        # NOTE(dtantsur): we acquire a shared lock to begin with, drivers are"},{"line_number":2109,"context_line":"        # free to promote it to an exclusive one."},{"line_number":2110,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":2111,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2112,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_9d3b21eb","line":2109,"range":{"start_line":2108,"start_character":26,"end_line":2109,"end_character":48},"in_reply_to":"3aaa91ec_59f457ce","updated":"2016-06-29 07:56:03.000000000","message":"This is driver dependent. For example someone can implement simple one-shot callback like old ramdisk.","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3d7ae3a574ef58d9a7949a8e4b4b421764245db6","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        \"\"\""},{"line_number":2106,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        # NOTE(dtantsur): we acquire a shared lock to begin with, drivers are"},{"line_number":2109,"context_line":"        # free to promote it to an exclusive one."},{"line_number":2110,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":2111,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2112,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_ebbe0a63","line":2109,"range":{"start_line":2108,"start_character":26,"end_line":2109,"end_character":48},"in_reply_to":"3aaa91ec_59f457ce","updated":"2016-06-28 13:49:03.000000000","message":"Writing to database does not necessary require a lock - it has transactions. So my plan is to NOT do exclusive locking on agent heartbeating if we don\u0027t have real actions. It\u0027s not implemented in the follow-up patches, but I plan on it.","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0e61f3049c932f0606e504020a4f0479a76ccbd0","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        \"\"\""},{"line_number":2106,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        # NOTE(dtantsur): we acquire a shared lock to begin with, drivers are"},{"line_number":2109,"context_line":"        # free to promote it to an exclusive one."},{"line_number":2110,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":2111,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2112,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_5f09d42b","line":2109,"range":{"start_line":2108,"start_character":26,"end_line":2109,"end_character":48},"in_reply_to":"3aaa91ec_619eb955","updated":"2016-06-28 14:31:13.000000000","message":"Ok, seems that this is following the approved spec: http://specs.openstack.org/openstack/ironic-specs/specs/approved/agent-api.html#driver-api-impact","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"74cd22472bd79d0c718cd80bc1bd7aec4175e93a","unresolved":false,"context_lines":[{"line_number":2105,"context_line":"        \"\"\""},{"line_number":2106,"context_line":"        LOG.debug(\u0027RPC heartbeat called for node %s\u0027, node_id)"},{"line_number":2107,"context_line":""},{"line_number":2108,"context_line":"        # NOTE(dtantsur): we acquire a shared lock to begin with, drivers are"},{"line_number":2109,"context_line":"        # free to promote it to an exclusive one."},{"line_number":2110,"context_line":"        with task_manager.acquire(context, node_id, shared\u003dTrue,"},{"line_number":2111,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2112,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_619eb955","line":2109,"range":{"start_line":2108,"start_character":26,"end_line":2109,"end_character":48},"in_reply_to":"3aaa91ec_ebbe0a63","updated":"2016-06-28 14:22:26.000000000","message":"Right, yeah not in general terms but the heartbeat() method does write to the node\u0027s driver_internal_info.\n\nAnyway, since we are reimplementing it we can promote the lock on the heartbeat method. I\u0027m just wondering whether we should not do it here since we only have one upstream method for heartbeat for now (and is pretty generic)","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        :param context: request context."},{"line_number":654,"context_line":"        :param node_id: node ID or UUID."},{"line_number":655,"context_line":"        :param callback_url: URL to reach back to the ramdisk."},{"line_number":656,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":657,"context_line":"        \"\"\""},{"line_number":658,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.34\u0027)"},{"line_number":659,"context_line":"        return cctxt.call(context, \u0027heartbeat\u0027, node_id\u003dnode_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_74b29c95","line":656,"updated":"2016-06-24 05:15:28.000000000","message":"please add return value to docstring.","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"}],"ironic/drivers/base.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        pass"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def heartbeat(self, task, callback_url):"},{"line_number":379,"context_line":"        \"\"\"Record a heartbeat for the node."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a task manager task"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_ef007903","line":378,"updated":"2016-06-24 05:15:28.000000000","message":"this method is not covered by unit tests.","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    def heartbeat(self, task, callback_url):"},{"line_number":379,"context_line":"        \"\"\"Record a heartbeat for the node."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a task manager task"},{"line_number":382,"context_line":"        :param callback_url: a URL to use to call to the ramdisk"},{"line_number":383,"context_line":"        :return: None"},{"line_number":384,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_af1b1172","line":381,"updated":"2016-06-24 05:15:28.000000000","message":"s/a task manager task/A Taskmanager object./","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a1eaccb7c6e5f00fa5b9d50bb54b8f8d48ccb188","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        \"\"\"Record a heartbeat for the node."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a task manager task"},{"line_number":382,"context_line":"        :param callback_url: a URL to use to call to the ramdisk"},{"line_number":383,"context_line":"        :return: None"},{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        LOG.warning(_LW(\u0027Got heartbeat message from node %(node)s, but \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_cf2c9d9b","line":382,"range":{"start_line":382,"start_character":29,"end_line":382,"end_character":30},"updated":"2016-06-24 05:15:28.000000000","message":"s/a/An/ period is missed at the end.","commit_id":"41bf8da6f3f312c57e512f54bfdd0a2a576bec28"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"29379b21351ec1426f923297439cf7f2a098313b","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    def heartbeat(self, task, callback_url):"},{"line_number":379,"context_line":"        \"\"\"Record a heartbeat for the node."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":382,"context_line":"        :param callback_url: a URL to use to call to the ramdisk."},{"line_number":383,"context_line":"        :return: None"},{"line_number":384,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_59cc5761","line":381,"range":{"start_line":381,"start_character":21,"end_line":381,"end_character":73},"updated":"2016-06-28 13:45:24.000000000","message":"nit: if we go for the shared task approach, let\u0027s mention it in this docstring as well","commit_id":"97f96642a9a85e3d6d638ddabb0586ec5902b614"}]}
