)]}'
{"ironic/nova/virt/ironic/driver.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7924039159a0ac4bf311844d451455a5ad84e9ee","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        node_uuid \u003d instance.get(\u0027node\u0027)"},{"line_number":380,"context_line":"        if not node_uuid:"},{"line_number":381,"context_line":"            raise exception.NovaException(_(\"Ironic node uuid not supplied to \""},{"line_number":382,"context_line":"                    \"driver for instance %r.\") % instance[\u0027uuid\u0027])"},{"line_number":383,"context_line":"        icli \u003d self._get_client()"},{"line_number":384,"context_line":"        node \u003d icli.node.get(node_uuid)"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FqjE%3D","line":382,"updated":"2014-03-14 16:13:37.000000000","message":"I think we should use the \u0027%s\u0027 mask for the string here. The \u0027%r\u0027 uses repr() to make the conversion which works for strings but is not ideal since we want the string form here. E.g:\n\nIn [28]: \"UUID %s\" % uuid.uuid4()\nOut[28]: \u0027UUID 2ef0eb68-fa32-4292-b5c1-872904a96b9f\u0027\n\nIn [29]: \"UUID %r\" % uuid.uuid4()\nOut[29]: \"UUID UUID(\u0027da560a2f-1a07-4949-a2f1-66ab20cf0d34\u0027)\"","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"11b436171e9c88886c1338fc006de2b0ff000555","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        node_uuid \u003d instance.get(\u0027node\u0027)"},{"line_number":380,"context_line":"        if not node_uuid:"},{"line_number":381,"context_line":"            raise exception.NovaException(_(\"Ironic node uuid not supplied to \""},{"line_number":382,"context_line":"                    \"driver for instance %r.\") % instance[\u0027uuid\u0027])"},{"line_number":383,"context_line":"        icli \u003d self._get_client()"},{"line_number":384,"context_line":"        node \u003d icli.node.get(node_uuid)"},{"line_number":385,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FVu0%3D","line":382,"in_reply_to":"AAAAWH%2F%2FqjE%3D","updated":"2014-03-18 15:00:04.000000000","message":"Done","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7924039159a0ac4bf311844d451455a5ad84e9ee","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            node \u003d validate_instance_and_node(icli, instance)"},{"line_number":479,"context_line":"            node_uuid \u003d node.uuid"},{"line_number":480,"context_line":"        except exception.InstanceNotFound:"},{"line_number":481,"context_line":"            LOG.debug(_(\"Destroy called on non-existing instance %r.\")"},{"line_number":482,"context_line":"                        % instance[\u0027uuid\u0027])"},{"line_number":483,"context_line":"            # NOTE(deva): if nova.compute.ComputeManager._delete_instance()"},{"line_number":484,"context_line":"            #             is called on a non-existing instance, the only way"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FqlU%3D","line":481,"updated":"2014-03-14 16:13:37.000000000","message":"ditto %r","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"11b436171e9c88886c1338fc006de2b0ff000555","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            node \u003d validate_instance_and_node(icli, instance)"},{"line_number":479,"context_line":"            node_uuid \u003d node.uuid"},{"line_number":480,"context_line":"        except exception.InstanceNotFound:"},{"line_number":481,"context_line":"            LOG.debug(_(\"Destroy called on non-existing instance %r.\")"},{"line_number":482,"context_line":"                        % instance[\u0027uuid\u0027])"},{"line_number":483,"context_line":"            # NOTE(deva): if nova.compute.ComputeManager._delete_instance()"},{"line_number":484,"context_line":"            #             is called on a non-existing instance, the only way"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FVuw%3D","line":481,"in_reply_to":"AAAAWH%2F%2FqlU%3D","updated":"2014-03-18 15:00:04.000000000","message":"Done","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7924039159a0ac4bf311844d451455a5ad84e9ee","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        except Exception as e:"},{"line_number":499,"context_line":"            # if the node is already in a deprovisioned state, continue"},{"line_number":500,"context_line":"            # This should be fixed in Ironic. XXX [insert bug here]"},{"line_number":501,"context_line":"            if e.__name__ \u003d\u003d \u0027InstanceDeployFailure\u0027:"},{"line_number":502,"context_line":"                pass"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        def _wait_for_provision_state(node_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FqtY%3D","line":501,"updated":"2014-03-14 16:13:37.000000000","message":"Two comments here:\n\n1- I can\u0027t see how InstanceDeployFailure is going to be raised from  _retry_if_servive_is_unavailable or icli.node.set_provision_state.\n\n\n2- I think it\u0027s better to use isinstance() instead of doing a string matching, in case that exception changes the name, it will be really hard to track if it\u0027s a string, tools like flake8 or pylint won\u0027t detect that InstanceDeployFailure was refactored, so I suggest doing:\n\nif isinstance(e, exception.InstanceDeployFailure):\n    pass","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"11b436171e9c88886c1338fc006de2b0ff000555","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        except Exception as e:"},{"line_number":499,"context_line":"            # if the node is already in a deprovisioned state, continue"},{"line_number":500,"context_line":"            # This should be fixed in Ironic. XXX [insert bug here]"},{"line_number":501,"context_line":"            if e.__name__ \u003d\u003d \u0027InstanceDeployFailure\u0027:"},{"line_number":502,"context_line":"                pass"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        def _wait_for_provision_state(node_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FdK8%3D","line":501,"in_reply_to":"AAAAWH%2F%2FqtY%3D","updated":"2014-03-18 15:00:04.000000000","message":"Ah -- so, this exception is coming from within Ironic, and it\u0027s *not* included in ironicclient.exception, so we can\u0027t compare class here.\n\nAdding this exception to the client is probably the right answer, but this was quicker...","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7924039159a0ac4bf311844d451455a5ad84e9ee","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                pass"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        def _wait_for_provision_state(node_uuid):"},{"line_number":505,"context_line":"            node \u003d icli.node.get(node_uuid)"},{"line_number":506,"context_line":"            if not node.provision_state:"},{"line_number":507,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":508,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2Fqhg%3D","line":505,"updated":"2014-03-14 16:13:37.000000000","message":"node \u003d validate_instance_and_node(icli, instance)","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"11b436171e9c88886c1338fc006de2b0ff000555","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                pass"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        def _wait_for_provision_state(node_uuid):"},{"line_number":505,"context_line":"            node \u003d icli.node.get(node_uuid)"},{"line_number":506,"context_line":"            if not node.provision_state:"},{"line_number":507,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":508,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FVtY%3D","line":505,"in_reply_to":"AAAAWH%2F%2Fqhg%3D","updated":"2014-03-18 15:00:04.000000000","message":"Done","commit_id":"79aef11dae5815f2d48e81fae06a78aa23cde026"}]}
