)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"106538551ccb297b10ff405856a67c005059757c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"ends up passed into the \u0027details\u0027 argument, making it True, so the"},{"line_number":11,"context_line":"query returns all nodes instead of just one. Fix it and add a logging"},{"line_number":12,"context_line":"in case it ever repeats."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: If464423b3c5bc05e2b22ff2245828c677b264d15"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5faad753_18850cae","line":13,"updated":"2019-09-06 13:20:09.000000000","message":"Even though we\u0027re not backporting it we\u0027d normally have a bug reported for this since it\u0027s a regression.","commit_id":"c30cdd0d7cde86d26c834f450b02c14f52916efb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e158828bfeee13ec9a6568d510a10bc16948e17a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This call accepts keyword arguments, not a dictionary. The dictionary"},{"line_number":10,"context_line":"ends up passed into the \u0027details\u0027 argument, making it True, so the"},{"line_number":11,"context_line":"query returns all nodes instead of just one. Fix it and add a logging"},{"line_number":12,"context_line":"in case it ever repeats."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1843050"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5faad753_d653c4e1","line":11,"range":{"start_line":11,"start_character":56,"end_line":11,"end_character":69},"updated":"2019-09-06 14:39:05.000000000","message":"raise an error","commit_id":"4656e6484e8479f8d05ef2bed3b247e48d15f2a4"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b48ee61271b290c942b0f91587c2f41cc2056837","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        try:"},{"line_number":238,"context_line":"            node \u003d next(self.ironic_connection.nodes("},{"line_number":239,"context_line":"                {\"instance_id\": instance.uuid, \"fields\": _NODE_FIELDS}))"},{"line_number":240,"context_line":"            # TODO(dustinc): Make consumers use the right fields and remove"},{"line_number":241,"context_line":"            if hasattr(node, \"id\"):"},{"line_number":242,"context_line":"                node.uuid \u003d node.id"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_535926fc","side":"PARENT","line":239,"range":{"start_line":239,"start_character":16,"end_line":239,"end_character":70},"updated":"2019-09-06 14:10:29.000000000","message":"So looking at https://github.com/openstack/openstacksdk/blob/0.35.0/openstack/baremetal/v1/_common.py#L63 and assuming there is some sdk magic that passes the session along automatically, the dict here was passed as the details and just evaluated to truthy? But really was meant to be the **params kwargs for filtering, right?\n\n(later)\n\nOh yeah that\u0027s what the commit message says.","commit_id":"a2b814619bd20b153d06e701ba4e86129f858fde"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2cabc30a6cad9325275b8cb3bfb3cbb35ecef1b","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        try:"},{"line_number":238,"context_line":"            node \u003d next(self.ironic_connection.nodes("},{"line_number":239,"context_line":"                {\"instance_id\": instance.uuid, \"fields\": _NODE_FIELDS}))"},{"line_number":240,"context_line":"            # TODO(dustinc): Make consumers use the right fields and remove"},{"line_number":241,"context_line":"            if hasattr(node, \"id\"):"},{"line_number":242,"context_line":"                node.uuid \u003d node.id"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_b3673a26","side":"PARENT","line":239,"range":{"start_line":239,"start_character":16,"end_line":239,"end_character":70},"in_reply_to":"5faad753_535926fc","updated":"2019-09-06 14:17:41.000000000","message":"This is a better link: https://github.com/openstack/openstacksdk/blob/0.35.0/openstack/baremetal/v1/_proxy.py#L192","commit_id":"a2b814619bd20b153d06e701ba4e86129f858fde"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b48ee61271b290c942b0f91587c2f41cc2056837","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        Check with the Ironic service that this instance is associated with a"},{"line_number":235,"context_line":"        node, and return the node."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        nodes \u003d list(self.ironic_connection.nodes("},{"line_number":238,"context_line":"            instance_id\u003dinstance.uuid, fields\u003d_NODE_FIELDS))"},{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_9336beb4","line":237,"range":{"start_line":237,"start_character":16,"end_line":237,"end_character":20},"updated":"2019-09-06 14:10:29.000000000","message":"OK this is because a generator is returned right?\n\nhttps://github.com/openstack/openstacksdk/blob/0.35.0/openstack/baremetal/v1/_common.py#L78\n\n(I\u0027m new to the SDK code so trying to confirm how this works)","commit_id":"0846a8df5f3746006ae21e8c360b6193003de3b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2cabc30a6cad9325275b8cb3bfb3cbb35ecef1b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        Check with the Ironic service that this instance is associated with a"},{"line_number":235,"context_line":"        node, and return the node."},{"line_number":236,"context_line":"        \"\"\""},{"line_number":237,"context_line":"        nodes \u003d list(self.ironic_connection.nodes("},{"line_number":238,"context_line":"            instance_id\u003dinstance.uuid, fields\u003d_NODE_FIELDS))"},{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_b3c2dae8","line":237,"range":{"start_line":237,"start_character":16,"end_line":237,"end_character":20},"in_reply_to":"5faad753_9336beb4","updated":"2019-09-06 14:17:41.000000000","message":"Correct.","commit_id":"0846a8df5f3746006ae21e8c360b6193003de3b7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b48ee61271b290c942b0f91587c2f41cc2056837","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            instance_id\u003dinstance.uuid, fields\u003d_NODE_FIELDS))"},{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":241,"context_line":"        elif len(nodes) \u003e 1:"},{"line_number":242,"context_line":"            LOG.error(\u0027BUG: ironic returned more than one node for a query \u0027"},{"line_number":243,"context_line":"                      \u0027that can only return zero or one: %s\u0027, nodes)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_b3c09a52","line":241,"updated":"2019-09-06 14:10:29.000000000","message":"note that we don\u0027t have a test for this","commit_id":"0846a8df5f3746006ae21e8c360b6193003de3b7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b48ee61271b290c942b0f91587c2f41cc2056837","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":241,"context_line":"        elif len(nodes) \u003e 1:"},{"line_number":242,"context_line":"            LOG.error(\u0027BUG: ironic returned more than one node for a query \u0027"},{"line_number":243,"context_line":"                      \u0027that can only return zero or one: %s\u0027, nodes)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        node \u003d nodes[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_13216e4e","line":242,"updated":"2019-09-06 14:10:29.000000000","message":"OK and this is just purely here for detecting programming errors in the future...why not just raise an exception? Meaning, we pick a random node which may or may not be correct for the operation, but was definitely not what we wanted since we\u0027re filtering on what should be the unique node uuid, right? So I\u0027m thinking we should raise, something like the NetworkAmbiguous error we have, but we don\u0027t have something like NodeAmbiguous (we could add one, or just raise some other existing exception that fits the bill).","commit_id":"0846a8df5f3746006ae21e8c360b6193003de3b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2cabc30a6cad9325275b8cb3bfb3cbb35ecef1b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":241,"context_line":"        elif len(nodes) \u003e 1:"},{"line_number":242,"context_line":"            LOG.error(\u0027BUG: ironic returned more than one node for a query \u0027"},{"line_number":243,"context_line":"                      \u0027that can only return zero or one: %s\u0027, nodes)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        node \u003d nodes[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_73bc6269","line":242,"in_reply_to":"5faad753_13216e4e","updated":"2019-09-06 14:17:41.000000000","message":"Done","commit_id":"0846a8df5f3746006ae21e8c360b6193003de3b7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e158828bfeee13ec9a6568d510a10bc16948e17a","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            instance_id\u003dinstance.uuid, fields\u003d_NODE_FIELDS))"},{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":241,"context_line":"        elif len(nodes) \u003e 1:"},{"line_number":242,"context_line":"            raise exception.NovaException("},{"line_number":243,"context_line":"                _(\u0027Ironic returned more than one node for a query \u0027"},{"line_number":244,"context_line":"                  \u0027that can only return zero or one: %s\u0027) % nodes)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_f669208b","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":12},"updated":"2019-09-06 14:39:05.000000000","message":"nit: this could just be \"if\"","commit_id":"4656e6484e8479f8d05ef2bed3b247e48d15f2a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e158828bfeee13ec9a6568d510a10bc16948e17a","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if not nodes:"},{"line_number":240,"context_line":"            raise exception.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":241,"context_line":"        elif len(nodes) \u003e 1:"},{"line_number":242,"context_line":"            raise exception.NovaException("},{"line_number":243,"context_line":"                _(\u0027Ironic returned more than one node for a query \u0027"},{"line_number":244,"context_line":"                  \u0027that can only return zero or one: %s\u0027) % nodes)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_f6fe00ad","line":242,"range":{"start_line":242,"start_character":28,"end_line":242,"end_character":41},"updated":"2019-09-06 14:39:05.000000000","message":"Could also use something like InternalError but it doesn\u0027t gain us much.","commit_id":"4656e6484e8479f8d05ef2bed3b247e48d15f2a4"}]}
