)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":16,"context_line":"information which must be run on the compute node that the instance is"},{"line_number":17,"context_line":"located on."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Blueprint: nova-manage-commands-to-manage-connection_info"},{"line_number":20,"context_line":"Co-authored-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":21,"context_line":"Change-Id: I2e3a77428f5f6113c10cc316f94bbec83f0f46c1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9ea5c4dc_972e4f97","line":19,"updated":"2021-08-19 13:17:54.000000000","message":"the bluperint is https://blueprints.launchpad.net/nova/+spec/nova-manage-refresh-connection-info","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":16,"context_line":"information which must be run on the compute node that the instance is"},{"line_number":17,"context_line":"located on."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Blueprint: nova-manage-commands-to-manage-connection_info"},{"line_number":20,"context_line":"Co-authored-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e"},{"line_number":21,"context_line":"Change-Id: I2e3a77428f5f6113c10cc316f94bbec83f0f46c1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5132cdbd_723885ae","line":19,"in_reply_to":"9ea5c4dc_972e4f97","updated":"2021-08-19 14:01:50.000000000","message":"Ack","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"}],"doc/source/cli/nova-manage.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":1479,"context_line":"   * - 5"},{"line_number":1480,"context_line":"     - Instance vm_state not stopped"},{"line_number":1481,"context_line":"   * - 6"},{"line_number":1482,"context_line":"     - Instance is not attached to volume"},{"line_number":1483,"context_line":"   * - 7"},{"line_number":1484,"context_line":"     - Unable to lock instance"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"b6c7c748_fafb24ff","line":1482,"range":{"start_line":1482,"start_character":7,"end_line":1482,"end_character":41},"updated":"2021-08-19 13:17:54.000000000","message":"hm, I tend to look at this the other way around so for me volumes attached to an instance. But this way is also true I guess.","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"   * - 5"},{"line_number":1480,"context_line":"     - Instance vm_state not stopped"},{"line_number":1481,"context_line":"   * - 6"},{"line_number":1482,"context_line":"     - Instance is not attached to volume"},{"line_number":1483,"context_line":"   * - 7"},{"line_number":1484,"context_line":"     - Unable to lock instance"},{"line_number":1485,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"42632e26_7107d64b","line":1482,"range":{"start_line":1482,"start_character":7,"end_line":1482,"end_character":41},"in_reply_to":"b6c7c748_fafb24ff","updated":"2021-08-19 14:01:50.000000000","message":"ACK I\u0027ll reword.","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":".. code-block:: shell"},{"line_number":1395,"context_line":""},{"line_number":1396,"context_line":"    nova-manage volume_attachment show [VOLUME_UUID] [INSTANCE_UUID]"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":"Show the details of a the volume attachment between ``VOLUME_UUID`` and"},{"line_number":1399,"context_line":"``INSTANCE_UUID``."}],"source_content_type":"text/x-rst","patch_set":9,"id":"8c4c4b3e_493c3e42","line":1396,"range":{"start_line":1396,"start_character":40,"end_line":1396,"end_character":51},"updated":"2021-08-19 22:57:21.000000000","message":"Note: this is inconsistent with the variable name and metavar in the implementation \"volume_id\".","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":1393,"context_line":""},{"line_number":1394,"context_line":".. code-block:: shell"},{"line_number":1395,"context_line":""},{"line_number":1396,"context_line":"    nova-manage volume_attachment show [VOLUME_UUID] [INSTANCE_UUID]"},{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":"Show the details of a the volume attachment between ``VOLUME_UUID`` and"},{"line_number":1399,"context_line":"``INSTANCE_UUID``."}],"source_content_type":"text/x-rst","patch_set":9,"id":"66a2e988_ef9ca175","line":1396,"range":{"start_line":1396,"start_character":40,"end_line":1396,"end_character":51},"in_reply_to":"8c4c4b3e_493c3e42","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":1411,"context_line":"   * - 0"},{"line_number":1412,"context_line":"     - Success"},{"line_number":1413,"context_line":"   * - 1"},{"line_number":1414,"context_line":"     - An unexpected error occurred"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"volume_attachment get_connector"},{"line_number":1417,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"82c129c5_94120677","line":1414,"updated":"2021-08-19 22:57:21.000000000","message":"This list is missing return codes 2 and 3.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":1411,"context_line":"   * - 0"},{"line_number":1412,"context_line":"     - Success"},{"line_number":1413,"context_line":"   * - 1"},{"line_number":1414,"context_line":"     - An unexpected error occurred"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"volume_attachment get_connector"},{"line_number":1417,"context_line":"-------------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"82848b6d_a9ef4fef","line":1414,"in_reply_to":"82c129c5_94120677","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    nova-manage volume_attachment get_connector"},{"line_number":1424,"context_line":""},{"line_number":1425,"context_line":"Show the host connector for this host."},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"This dumps a JSON string containing the connector information, which can be"},{"line_number":1428,"context_line":"saved to a file and used as input for the :program:`nova-manage"}],"source_content_type":"text/x-rst","patch_set":9,"id":"21ed1880_213f18f3","line":1425,"updated":"2021-08-19 22:57:21.000000000","message":"I assume this means it needs to be run on the compute host? It might be worth stating in the detailed description below, to make it abundantly clear.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"    nova-manage volume_attachment get_connector"},{"line_number":1424,"context_line":""},{"line_number":1425,"context_line":"Show the host connector for this host."},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"This dumps a JSON string containing the connector information, which can be"},{"line_number":1428,"context_line":"saved to a file and used as input for the :program:`nova-manage"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fb6e7a41_fa059334","line":1425,"in_reply_to":"21ed1880_213f18f3","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":1439,"context_line":"   * - Return code"},{"line_number":1440,"context_line":"     - Description"},{"line_number":1441,"context_line":"   * - 0"},{"line_number":1442,"context_line":"     - Success"},{"line_number":1443,"context_line":""},{"line_number":1444,"context_line":"volume_attachment refresh"},{"line_number":1445,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"b358cd52_27bad47b","line":1442,"updated":"2021-08-19 22:57:21.000000000","message":"This list is missing return code 1.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"   * - Return code"},{"line_number":1440,"context_line":"     - Description"},{"line_number":1441,"context_line":"   * - 0"},{"line_number":1442,"context_line":"     - Success"},{"line_number":1443,"context_line":""},{"line_number":1444,"context_line":"volume_attachment refresh"},{"line_number":1445,"context_line":"-------------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"52a030e5_b5562525","line":1442,"in_reply_to":"b358cd52_27bad47b","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"}],"nova/cmd/manage.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":2818,"context_line":""},{"line_number":2819,"context_line":"    @action_description("},{"line_number":2820,"context_line":"        _(\"Refresh the connection info associated with a given volume BDM\"))"},{"line_number":2821,"context_line":"    @args("},{"line_number":2822,"context_line":"        \u0027volume_id\u0027, metavar\u003d\u0027\u003cvolume_id\u003e\u0027,"},{"line_number":2823,"context_line":"        help\u003d\u0027UUID of the volume\u0027)"},{"line_number":2824,"context_line":"    @args("},{"line_number":2825,"context_line":"        \u0027instance\u0027, metavar\u003d\u0027\u003cinstance_uuid\u003e\u0027,"},{"line_number":2826,"context_line":"        help\u003d\u0027UUID of the instance\u0027)"},{"line_number":2827,"context_line":"    @args("},{"line_number":2828,"context_line":"        \u0027connector_path\u0027, metavar\u003d\u0027\u003cconnector_path\u003e\u0027,"},{"line_number":2829,"context_line":"        help\u003d\u0027Path to file containing updated connector\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2357a9ff_c736fbd8","line":2826,"range":{"start_line":2821,"start_character":0,"end_line":2826,"end_character":36},"updated":"2021-07-19 14:13:11.000000000","message":"Need to flip these IMHO, should be instance_uuid volume_id to match other commands in osc and novaclient like:\n\n  $ openstack server add volume $instance_uuid $volume_id\n  $ openstack server remove volume $instance_uuid $volume_id\n  $ openstack server volume update $instance_uuid [..]\n\n  $ nova volume-attach $instance_uuid $volume_id $device\n  $ nova volume-detach $instance $volume_id\n  $ nova volume-attachments $instance_uuid\n  $ nova volume-update $instance_uuid [..]","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":2838,"context_line":"        # connector directly from the remote compute hosting the instance."},{"line_number":2839,"context_line":"        if not os.path.exists(connector_path):"},{"line_number":2840,"context_line":"            print(\u0027%s does not exist\u0027 % connector_path)"},{"line_number":2841,"context_line":"            return 1"},{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        try:"},{"line_number":2844,"context_line":"            with open(connector_path, \u0027rb\u0027) as connector_file:"}],"source_content_type":"text/x-python","patch_set":4,"id":"faca1147_b5f66c5e","line":2841,"range":{"start_line":2841,"start_character":12,"end_line":2841,"end_character":20},"updated":"2021-07-19 14:13:11.000000000","message":"I\u0027d prefer to return some different failure codes for different failures as done with other commands.","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            pt.add_row([k, v])"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    return encodeutils.safe_encode(pt.get_string()).decode()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class DbCommands(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"117f1e3e_a32c2e45","line":139,"updated":"2021-08-19 13:17:54.000000000","message":"OK it is just a move refactoring except the print part that left for the caller.","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        else:"},{"line_number":137,"context_line":"            pt.add_row([k, v])"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    return encodeutils.safe_encode(pt.get_string()).decode()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class DbCommands(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c4708f6e_259605ea","line":139,"in_reply_to":"117f1e3e_a32c2e45","updated":"2021-08-19 14:01:50.000000000","message":"Ack","commit_id":"b85dd26ba27b0faabc838c15449d5a70de0ffb6d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":2820,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2821,"context_line":"            im \u003d objects.InstanceMapping.get_by_instance_uuid("},{"line_number":2822,"context_line":"                ctxt, instance_uuid)"},{"line_number":2823,"context_line":"            with context.target_cell(ctxt, im.cell_mapping) as cctxt:"},{"line_number":2824,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume("},{"line_number":2825,"context_line":"                    cctxt, volume_id, instance_uuid)"},{"line_number":2826,"context_line":"                if connection_info and json:"}],"source_content_type":"text/x-python","patch_set":8,"id":"b049de50_0fff935c","line":2823,"updated":"2021-08-19 13:17:54.000000000","message":"I\u0027m wondering if this works if the instance is in cell0 as it never landed on a compute.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"425835dae067b0b644e0706490717e554da47809","unresolved":false,"context_lines":[{"line_number":2820,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2821,"context_line":"            im \u003d objects.InstanceMapping.get_by_instance_uuid("},{"line_number":2822,"context_line":"                ctxt, instance_uuid)"},{"line_number":2823,"context_line":"            with context.target_cell(ctxt, im.cell_mapping) as cctxt:"},{"line_number":2824,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume("},{"line_number":2825,"context_line":"                    cctxt, volume_id, instance_uuid)"},{"line_number":2826,"context_line":"                if connection_info and json:"}],"source_content_type":"text/x-python","patch_set":8,"id":"377fb96f_91f42c30","line":2823,"in_reply_to":"694c7174_22c8a6c0","updated":"2021-08-19 15:41:27.000000000","message":"Ack","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":true,"context_lines":[{"line_number":2820,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":2821,"context_line":"            im \u003d objects.InstanceMapping.get_by_instance_uuid("},{"line_number":2822,"context_line":"                ctxt, instance_uuid)"},{"line_number":2823,"context_line":"            with context.target_cell(ctxt, im.cell_mapping) as cctxt:"},{"line_number":2824,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume("},{"line_number":2825,"context_line":"                    cctxt, volume_id, instance_uuid)"},{"line_number":2826,"context_line":"                if connection_info and json:"}],"source_content_type":"text/x-python","patch_set":8,"id":"694c7174_22c8a6c0","line":2823,"in_reply_to":"b049de50_0fff935c","updated":"2021-08-19 14:01:50.000000000","message":"If we haven\u0027t landed on a compute yet then I can\u0027t think why this command would be useful as we wouldn\u0027t have a bdm yet.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":2832,"context_line":"                else:"},{"line_number":2833,"context_line":"                    print(format_dict(bdm))"},{"line_number":2834,"context_line":"        except Exception:"},{"line_number":2835,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2836,"context_line":"            return 1"},{"line_number":2837,"context_line":""},{"line_number":2838,"context_line":"    @action_description(_(\u0027Show the host connector for this host\u0027))"}],"source_content_type":"text/x-python","patch_set":8,"id":"bb020be0_6a325571","line":2835,"updated":"2021-08-19 13:17:54.000000000","message":"please be a bit more specific I guess the user wants to know if she mistyped the instance uuid or the volume uuid. I think we can dump the exception text to give these details.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"425835dae067b0b644e0706490717e554da47809","unresolved":false,"context_lines":[{"line_number":2832,"context_line":"                else:"},{"line_number":2833,"context_line":"                    print(format_dict(bdm))"},{"line_number":2834,"context_line":"        except Exception:"},{"line_number":2835,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2836,"context_line":"            return 1"},{"line_number":2837,"context_line":""},{"line_number":2838,"context_line":"    @action_description(_(\u0027Show the host connector for this host\u0027))"}],"source_content_type":"text/x-python","patch_set":8,"id":"a209dd26_021eca22","line":2835,"in_reply_to":"885b10e6_3207c397","updated":"2021-08-19 15:41:27.000000000","message":"You are right we get the full traceback","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":true,"context_lines":[{"line_number":2832,"context_line":"                else:"},{"line_number":2833,"context_line":"                    print(format_dict(bdm))"},{"line_number":2834,"context_line":"        except Exception:"},{"line_number":2835,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2836,"context_line":"            return 1"},{"line_number":2837,"context_line":""},{"line_number":2838,"context_line":"    @action_description(_(\u0027Show the host connector for this host\u0027))"}],"source_content_type":"text/x-python","patch_set":8,"id":"885b10e6_3207c397","line":2835,"in_reply_to":"bb020be0_6a325571","updated":"2021-08-19 14:01:50.000000000","message":"I\u0027ll copy the handling from below for InstanceNotFound and VolumeBDMNotFound. As for the generic Exception case, shouldn\u0027t LOG.exception log the full trace for us?","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":2859,"context_line":"            else:"},{"line_number":2860,"context_line":"                print(format_dict(host_connector))"},{"line_number":2861,"context_line":"        except Exception:"},{"line_number":2862,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2863,"context_line":"            return 1"},{"line_number":2864,"context_line":""},{"line_number":2865,"context_line":"    @action_description("}],"source_content_type":"text/x-python","patch_set":8,"id":"e5f706f2_bd11e9c0","line":2862,"updated":"2021-08-19 13:17:54.000000000","message":"ditto, I would dump the exception message so the user can troubleshoot","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"425835dae067b0b644e0706490717e554da47809","unresolved":false,"context_lines":[{"line_number":2859,"context_line":"            else:"},{"line_number":2860,"context_line":"                print(format_dict(host_connector))"},{"line_number":2861,"context_line":"        except Exception:"},{"line_number":2862,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2863,"context_line":"            return 1"},{"line_number":2864,"context_line":""},{"line_number":2865,"context_line":"    @action_description("}],"source_content_type":"text/x-python","patch_set":8,"id":"c82d98e7_22641f7e","line":2862,"in_reply_to":"e0498d18_3108c61a","updated":"2021-08-19 15:41:27.000000000","message":"Ack","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":true,"context_lines":[{"line_number":2859,"context_line":"            else:"},{"line_number":2860,"context_line":"                print(format_dict(host_connector))"},{"line_number":2861,"context_line":"        except Exception:"},{"line_number":2862,"context_line":"            LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":2863,"context_line":"            return 1"},{"line_number":2864,"context_line":""},{"line_number":2865,"context_line":"    @action_description("}],"source_content_type":"text/x-python","patch_set":8,"id":"e0498d18_3108c61a","line":2862,"in_reply_to":"e5f706f2_bd11e9c0","updated":"2021-08-19 14:01:50.000000000","message":"As above don\u0027t we get that with LOG.exception?","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":2933,"context_line":"                # Lock the instance to stop users from restarting it during"},{"line_number":2934,"context_line":"                # this refresh, admins however are able to preform actions"},{"line_number":2935,"context_line":"                # against it still so care is still required."},{"line_number":2936,"context_line":"                compute_api.lock("},{"line_number":2937,"context_line":"                    cctxt, instance,"},{"line_number":2938,"context_line":"                    reason\u003d("},{"line_number":2939,"context_line":"                        f\u0027Refreshing connection_info for BDM {bdm.uuid} \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"aeaa4388_9b6f46ed","line":2936,"updated":"2021-08-19 13:17:54.000000000","message":"Does locking an already locked instance an error? Should we just ignore that error and move forward?","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":2933,"context_line":"                # Lock the instance to stop users from restarting it during"},{"line_number":2934,"context_line":"                # this refresh, admins however are able to preform actions"},{"line_number":2935,"context_line":"                # against it still so care is still required."},{"line_number":2936,"context_line":"                compute_api.lock("},{"line_number":2937,"context_line":"                    cctxt, instance,"},{"line_number":2938,"context_line":"                    reason\u003d("},{"line_number":2939,"context_line":"                        f\u0027Refreshing connection_info for BDM {bdm.uuid} \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"4696d126_53732cee","line":2936,"in_reply_to":"aeaa4388_9b6f46ed","updated":"2021-08-19 14:01:50.000000000","message":"Oddly no, it just returns.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"        # NOTE(lyarwood): Yes this is weird but we need to recreate the admin"},{"line_number":2948,"context_line":"        # context here to ensure the lock above uses a unique request-id"},{"line_number":2949,"context_line":"        # verus the following refresh and eventual unlock."},{"line_number":2950,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":2951,"context_line":"        volume_api \u003d cinder.API()"},{"line_number":2952,"context_line":"        compute_rpcapi \u003d rpcapi.ComputeAPI()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ae83c3b0_ff0a2faf","line":2949,"range":{"start_line":2949,"start_character":10,"end_line":2949,"end_character":15},"updated":"2021-08-19 13:17:54.000000000","message":"nit: versus","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"        # NOTE(lyarwood): Yes this is weird but we need to recreate the admin"},{"line_number":2948,"context_line":"        # context here to ensure the lock above uses a unique request-id"},{"line_number":2949,"context_line":"        # verus the following refresh and eventual unlock."},{"line_number":2950,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":2951,"context_line":"        volume_api \u003d cinder.API()"},{"line_number":2952,"context_line":"        compute_rpcapi \u003d rpcapi.ComputeAPI()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ec3bc9bc_19aa96da","line":2949,"range":{"start_line":2949,"start_character":10,"end_line":2949,"end_character":15},"in_reply_to":"ae83c3b0_ff0a2faf","updated":"2021-08-19 14:01:50.000000000","message":"Done","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":"                return 0"},{"line_number":3003,"context_line":"            except Exception:"},{"line_number":3004,"context_line":"                LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":3005,"context_line":"                return 1"},{"line_number":3006,"context_line":"            finally:"},{"line_number":3007,"context_line":"                # If the bdm.attachment_id wasn\u0027t updated make sure we clean"}],"source_content_type":"text/x-python","patch_set":8,"id":"859a0fd5_08b7f402","line":3004,"updated":"2021-08-19 13:17:54.000000000","message":"ditto","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":false,"context_lines":[{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":"                return 0"},{"line_number":3003,"context_line":"            except Exception:"},{"line_number":3004,"context_line":"                LOG.exception(\u0027Unexpected error\u0027)"},{"line_number":3005,"context_line":"                return 1"},{"line_number":3006,"context_line":"            finally:"},{"line_number":3007,"context_line":"                # If the bdm.attachment_id wasn\u0027t updated make sure we clean"}],"source_content_type":"text/x-python","patch_set":8,"id":"ad983d6a_5d93c5cd","line":3004,"in_reply_to":"859a0fd5_08b7f402","updated":"2021-08-19 14:01:50.000000000","message":"Ack","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6109fe6ff5667278d1f8d4eb42bca08666dfe1c0","unresolved":true,"context_lines":[{"line_number":3024,"context_line":"                    context.get_admin_context(),"},{"line_number":3025,"context_line":"                    im.cell_mapping"},{"line_number":3026,"context_line":"                ) as u_cctxt:"},{"line_number":3027,"context_line":"                    compute_api.unlock(u_cctxt, instance)"},{"line_number":3028,"context_line":""},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"CATEGORIES \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"db1e3eb3_4b354adb","line":3027,"updated":"2021-08-19 13:17:54.000000000","message":"If locking an already locked instance is not an error (or we will add the code to ignore such error) then this unlock action might remove a lock that was not added by this code. We should not remove the lock if we did not added it in the first place.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"425835dae067b0b644e0706490717e554da47809","unresolved":false,"context_lines":[{"line_number":3024,"context_line":"                    context.get_admin_context(),"},{"line_number":3025,"context_line":"                    im.cell_mapping"},{"line_number":3026,"context_line":"                ) as u_cctxt:"},{"line_number":3027,"context_line":"                    compute_api.unlock(u_cctxt, instance)"},{"line_number":3028,"context_line":""},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"CATEGORIES \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"b4634cf1_afd4e07e","line":3027,"in_reply_to":"901ed506_f7613eb5","updated":"2021-08-19 15:41:27.000000000","message":"Ack","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"5bf1c8d2ce37f738d6fa4e987f02cad25ca1ecbf","unresolved":true,"context_lines":[{"line_number":3024,"context_line":"                    context.get_admin_context(),"},{"line_number":3025,"context_line":"                    im.cell_mapping"},{"line_number":3026,"context_line":"                ) as u_cctxt:"},{"line_number":3027,"context_line":"                    compute_api.unlock(u_cctxt, instance)"},{"line_number":3028,"context_line":""},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"CATEGORIES \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"901ed506_f7613eb5","line":3027,"in_reply_to":"db1e3eb3_4b354adb","updated":"2021-08-19 14:01:50.000000000","message":"ACK, even though the duplicate lock attempts don\u0027t raise an error I guess this still could be true so I\u0027ll add a check earlier to ensure it isn\u0027t already locked before we try to.","commit_id":"d143fc9ea99dfd4d414e42c46f835d4a9d5b092b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2814,"context_line":""},{"line_number":2815,"context_line":"        Return codes:"},{"line_number":2816,"context_line":"        * 0: Command completed successfully."},{"line_number":2817,"context_line":"        * 1: An unexpected error happened."},{"line_number":2818,"context_line":"        \"\"\""},{"line_number":2819,"context_line":"        try:"},{"line_number":2820,"context_line":"            ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"72560e61_9123cca2","line":2817,"updated":"2021-08-19 22:57:21.000000000","message":"This list is missing return codes 2 and 3.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":2814,"context_line":""},{"line_number":2815,"context_line":"        Return codes:"},{"line_number":2816,"context_line":"        * 0: Command completed successfully."},{"line_number":2817,"context_line":"        * 1: An unexpected error happened."},{"line_number":2818,"context_line":"        \"\"\""},{"line_number":2819,"context_line":"        try:"},{"line_number":2820,"context_line":"            ctxt \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"836b37a5_94572225","line":2817,"in_reply_to":"72560e61_9123cca2","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2881,"context_line":"        help\u003d\u0027UUID of the volume\u0027)"},{"line_number":2882,"context_line":"    @args("},{"line_number":2883,"context_line":"        \u0027connector_path\u0027, metavar\u003d\u0027\u003cconnector_path\u003e\u0027,"},{"line_number":2884,"context_line":"        help\u003d\u0027Path to file containing updated connector\u0027)"},{"line_number":2885,"context_line":"    def refresh(self, instance_uuid\u003dNone, volume_id\u003dNone, connector_path\u003dNone):"},{"line_number":2886,"context_line":"        \"\"\"Refresh the connection_info associated with a volume attachment"},{"line_number":2887,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"53021f5a_d6656423","line":2884,"updated":"2021-08-19 22:57:21.000000000","message":"\"...in json format\" would be helpful I think.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":2881,"context_line":"        help\u003d\u0027UUID of the volume\u0027)"},{"line_number":2882,"context_line":"    @args("},{"line_number":2883,"context_line":"        \u0027connector_path\u0027, metavar\u003d\u0027\u003cconnector_path\u003e\u0027,"},{"line_number":2884,"context_line":"        help\u003d\u0027Path to file containing updated connector\u0027)"},{"line_number":2885,"context_line":"    def refresh(self, instance_uuid\u003dNone, volume_id\u003dNone, connector_path\u003dNone):"},{"line_number":2886,"context_line":"        \"\"\"Refresh the connection_info associated with a volume attachment"},{"line_number":2887,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3cd6e2df_f55d8c5d","line":2884,"in_reply_to":"53021f5a_d6656423","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2892,"context_line":"        * 3: Failed to open connector path."},{"line_number":2893,"context_line":"        * 4: Instance does not exist."},{"line_number":2894,"context_line":"        * 5: Instance vm_state not stopped."},{"line_number":2895,"context_line":"        * 6: Instance is not attached to volume."},{"line_number":2896,"context_line":"        * 7: Unable to lock instance."},{"line_number":2897,"context_line":"        * 8: Instance already locked."},{"line_number":2898,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"c51c11b2_938b3813","line":2895,"range":{"start_line":2895,"start_character":13,"end_line":2895,"end_character":47},"updated":"2021-08-19 22:57:21.000000000","message":"Nit: Volume is not attached to instance? Doc states it that way.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":false,"context_lines":[{"line_number":2892,"context_line":"        * 3: Failed to open connector path."},{"line_number":2893,"context_line":"        * 4: Instance does not exist."},{"line_number":2894,"context_line":"        * 5: Instance vm_state not stopped."},{"line_number":2895,"context_line":"        * 6: Instance is not attached to volume."},{"line_number":2896,"context_line":"        * 7: Unable to lock instance."},{"line_number":2897,"context_line":"        * 8: Instance already locked."},{"line_number":2898,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"c7660617_bff911d5","line":2895,"range":{"start_line":2895,"start_character":13,"end_line":2895,"end_character":47},"in_reply_to":"c51c11b2_938b3813","updated":"2021-08-20 11:10:05.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        compute_api \u003d api.API()"},{"line_number":2916,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":2917,"context_line":"        im \u003d objects.InstanceMapping.get_by_instance_uuid(ctxt, instance_uuid)"},{"line_number":2918,"context_line":"        with context.target_cell(ctxt, im.cell_mapping) as cctxt:"},{"line_number":2919,"context_line":"            try:"},{"line_number":2920,"context_line":"                instance \u003d objects.Instance.get_by_uuid(cctxt, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"be79462e_5fa7a1e2","line":2917,"updated":"2021-08-19 22:57:21.000000000","message":"If this raises, it will be an unhandled exception to the user. Feels like this (and other things not under a try-except below) should go in an outermost try-except that handles Exception and returns 1.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"26e2ea747e6ada593bbb0f2ea3e965e64887f4cd","unresolved":false,"context_lines":[{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        compute_api \u003d api.API()"},{"line_number":2916,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":2917,"context_line":"        im \u003d objects.InstanceMapping.get_by_instance_uuid(ctxt, instance_uuid)"},{"line_number":2918,"context_line":"        with context.target_cell(ctxt, im.cell_mapping) as cctxt:"},{"line_number":2919,"context_line":"            try:"},{"line_number":2920,"context_line":"                instance \u003d objects.Instance.get_by_uuid(cctxt, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fdf29b0a_1b0463b1","line":2917,"in_reply_to":"be79462e_5fa7a1e2","updated":"2021-08-23 12:36:47.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2934,"context_line":"                    f\u0027Instance {instance_uuid} is already locked, unlock \u0027"},{"line_number":2935,"context_line":"                    f\u0027before attempting again.\u0027"},{"line_number":2936,"context_line":"                )"},{"line_number":2937,"context_line":"                return 8"},{"line_number":2938,"context_line":""},{"line_number":2939,"context_line":"            try:"},{"line_number":2940,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"0daf47a7_5e400f6d","line":2937,"updated":"2021-08-19 22:57:21.000000000","message":"Curious why we need to fail here? If the instance is already locked and we need it to be locked, can we just go ahead?","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"c160b9bf80f8e737c4c22653c523dbe35f68a4c6","unresolved":true,"context_lines":[{"line_number":2934,"context_line":"                    f\u0027Instance {instance_uuid} is already locked, unlock \u0027"},{"line_number":2935,"context_line":"                    f\u0027before attempting again.\u0027"},{"line_number":2936,"context_line":"                )"},{"line_number":2937,"context_line":"                return 8"},{"line_number":2938,"context_line":""},{"line_number":2939,"context_line":"            try:"},{"line_number":2940,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"a17c6c39_9970b7e3","line":2937,"in_reply_to":"0daf47a7_5e400f6d","updated":"2021-08-20 11:10:05.000000000","message":"gibi raised this before and I think the assumption is that the owner or another admin could be doing something else with the instance at this time so it\u0027s safer to fail and get the caller to work that out.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"26e2ea747e6ada593bbb0f2ea3e965e64887f4cd","unresolved":false,"context_lines":[{"line_number":2934,"context_line":"                    f\u0027Instance {instance_uuid} is already locked, unlock \u0027"},{"line_number":2935,"context_line":"                    f\u0027before attempting again.\u0027"},{"line_number":2936,"context_line":"                )"},{"line_number":2937,"context_line":"                return 8"},{"line_number":2938,"context_line":""},{"line_number":2939,"context_line":"            try:"},{"line_number":2940,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"9b6f97cb_fbb57095","line":2937,"in_reply_to":"5e4b3116_952a00ee","updated":"2021-08-23 12:36:47.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3f7081c37cf514f154fb5bb38d615667f3c540fa","unresolved":false,"context_lines":[{"line_number":2934,"context_line":"                    f\u0027Instance {instance_uuid} is already locked, unlock \u0027"},{"line_number":2935,"context_line":"                    f\u0027before attempting again.\u0027"},{"line_number":2936,"context_line":"                )"},{"line_number":2937,"context_line":"                return 8"},{"line_number":2938,"context_line":""},{"line_number":2939,"context_line":"            try:"},{"line_number":2940,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"fbba3aa3_fa1c79c6","line":2937,"in_reply_to":"9b6f97cb_fbb57095","updated":"2021-08-25 02:56:26.000000000","message":"Ah, yeah I see your points. Especially unlocking an instance that was not initially in the unlocked state. Makes sense, thanks both.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e398661e73ed6d9242d10e417acd4308a666b3d3","unresolved":true,"context_lines":[{"line_number":2934,"context_line":"                    f\u0027Instance {instance_uuid} is already locked, unlock \u0027"},{"line_number":2935,"context_line":"                    f\u0027before attempting again.\u0027"},{"line_number":2936,"context_line":"                )"},{"line_number":2937,"context_line":"                return 8"},{"line_number":2938,"context_line":""},{"line_number":2939,"context_line":"            try:"},{"line_number":2940,"context_line":"                bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"5e4b3116_952a00ee","line":2937,"in_reply_to":"a17c6c39_9970b7e3","updated":"2021-08-23 07:35:31.000000000","message":"My original observation was that if the instance was already locked before the command was run, then the command unlocked it at the end which feels odd. But yes, I can accept what Lee just wrote, that if the instance is already locked then we might racing with other admin operations which could be unsafe.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2948,"context_line":""},{"line_number":2949,"context_line":"            try:"},{"line_number":2950,"context_line":"                # Lock the instance to stop users from restarting it during"},{"line_number":2951,"context_line":"                # this refresh, admins however are able to preform actions"},{"line_number":2952,"context_line":"                # against it still so care is still required."},{"line_number":2953,"context_line":"                compute_api.lock("},{"line_number":2954,"context_line":"                    cctxt, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"2413cf91_63d1c0a4","line":2951,"range":{"start_line":2951,"start_character":59,"end_line":2951,"end_character":66},"updated":"2021-08-19 22:57:21.000000000","message":"perform","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"26e2ea747e6ada593bbb0f2ea3e965e64887f4cd","unresolved":false,"context_lines":[{"line_number":2948,"context_line":""},{"line_number":2949,"context_line":"            try:"},{"line_number":2950,"context_line":"                # Lock the instance to stop users from restarting it during"},{"line_number":2951,"context_line":"                # this refresh, admins however are able to preform actions"},{"line_number":2952,"context_line":"                # against it still so care is still required."},{"line_number":2953,"context_line":"                compute_api.lock("},{"line_number":2954,"context_line":"                    cctxt, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"e475d68f_a70cfa9d","line":2951,"range":{"start_line":2951,"start_character":59,"end_line":2951,"end_character":66},"in_reply_to":"2413cf91_63d1c0a4","updated":"2021-08-23 12:36:47.000000000","message":"Done","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":2975,"context_line":"                # aware that this has happened."},{"line_number":2976,"context_line":"                instance_action \u003d objects.InstanceAction.action_start("},{"line_number":2977,"context_line":"                    cctxt, instance_uuid,"},{"line_number":2978,"context_line":"                    instance_actions.NOVA_MANAGE_REFRESH_VOLUME_ATTACHMENT)"},{"line_number":2979,"context_line":""},{"line_number":2980,"context_line":"                # Create a blank attachment to keep the volume reserved"},{"line_number":2981,"context_line":"                new_attachment_id \u003d volume_api.attachment_create("}],"source_content_type":"text/x-python","patch_set":9,"id":"72467962_4d696be6","line":2978,"updated":"2021-08-19 22:57:21.000000000","message":"I take it (and hope) that there is no usefulness in recording the previous connection_info in this action.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"26e2ea747e6ada593bbb0f2ea3e965e64887f4cd","unresolved":false,"context_lines":[{"line_number":2975,"context_line":"                # aware that this has happened."},{"line_number":2976,"context_line":"                instance_action \u003d objects.InstanceAction.action_start("},{"line_number":2977,"context_line":"                    cctxt, instance_uuid,"},{"line_number":2978,"context_line":"                    instance_actions.NOVA_MANAGE_REFRESH_VOLUME_ATTACHMENT)"},{"line_number":2979,"context_line":""},{"line_number":2980,"context_line":"                # Create a blank attachment to keep the volume reserved"},{"line_number":2981,"context_line":"                new_attachment_id \u003d volume_api.attachment_create("}],"source_content_type":"text/x-python","patch_set":9,"id":"fe92a06f_1717078b","line":2978,"in_reply_to":"72467962_4d696be6","updated":"2021-08-23 12:36:47.000000000","message":"Yeah I didn\u0027t want to save that in the action/event tbh.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3f7081c37cf514f154fb5bb38d615667f3c540fa","unresolved":true,"context_lines":[{"line_number":2907,"context_line":"        nova.virt.block_device.DriverVolumeBlockDevice.refresh_connection_info"},{"line_number":2908,"context_line":"        that simply GETs an existing volume attachment from cinder this method"},{"line_number":2909,"context_line":"        cleans up any existing volume connections from the host before creating"},{"line_number":2910,"context_line":"        a fresh attachment in cinder and populates the underlying bdm with"},{"line_number":2911,"context_line":"        connection_info from the new attachment."},{"line_number":2912,"context_line":""},{"line_number":2913,"context_line":"        We can do that here as the command requires that the instance is"}],"source_content_type":"text/x-python","patch_set":12,"id":"fadd4d3b_51e04e47","line":2910,"range":{"start_line":2910,"start_character":66,"end_line":2910,"end_character":69},"updated":"2021-08-25 02:56:26.000000000","message":"BDM","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"b7a5937bc4172cd7c867e46a2b22beaf12a6c319","unresolved":false,"context_lines":[{"line_number":2907,"context_line":"        nova.virt.block_device.DriverVolumeBlockDevice.refresh_connection_info"},{"line_number":2908,"context_line":"        that simply GETs an existing volume attachment from cinder this method"},{"line_number":2909,"context_line":"        cleans up any existing volume connections from the host before creating"},{"line_number":2910,"context_line":"        a fresh attachment in cinder and populates the underlying bdm with"},{"line_number":2911,"context_line":"        connection_info from the new attachment."},{"line_number":2912,"context_line":""},{"line_number":2913,"context_line":"        We can do that here as the command requires that the instance is"}],"source_content_type":"text/x-python","patch_set":12,"id":"082ca086_a30b33ac","line":2910,"range":{"start_line":2910,"start_character":66,"end_line":2910,"end_character":69},"in_reply_to":"fadd4d3b_51e04e47","updated":"2021-08-25 09:26:56.000000000","message":"Done","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"}],"nova/tests/fixtures/cinder.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":244,"context_line":"                    \u0027data\u0027: {"},{"line_number":245,"context_line":"                        \u0027foo\u0027: \u0027bar\u0027,"},{"line_number":246,"context_line":"                        \u0027target_lun\u0027: \u00271\u0027"},{"line_number":247,"context_line":"                    },"},{"line_number":248,"context_line":"                    \u0027connector\u0027: connector,"},{"line_number":249,"context_line":"                }"},{"line_number":250,"context_line":"            }"},{"line_number":251,"context_line":"            if attachment_id \u003d\u003d self.SWAP_ERR_ATTACH_ID:"}],"source_content_type":"text/x-python","patch_set":4,"id":"cc03a38c_c7d947b8","line":248,"range":{"start_line":247,"start_character":0,"end_line":248,"end_character":43},"updated":"2021-07-19 14:13:11.000000000","message":"Does c-api actually do this or is this just to assert things in our tests?\n\n*later* Ah right I see, why don\u0027t we just use the IP in the foo bar data returned above so it\u0027s more inline with what we get back from c-api?","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"130431672de4c1e0e9a9294660284053592e2a4e","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        # - id: the attachment id"},{"line_number":85,"context_line":"        # - instance_uuid: uuid of the instance attached to the volume"},{"line_number":86,"context_line":"        # - connector: host connector dict; None if not connected"},{"line_number":87,"context_line":"        # - connection_info: volume connection info dict; None if not connected"},{"line_number":88,"context_line":"        # Note that a volume can have multiple attachments even without"},{"line_number":89,"context_line":"        # multi-attach, as some flows create a blank \u0027reservation\u0027 attachment"},{"line_number":90,"context_line":"        # before deleting another attachment. However, a non-multiattach volume"}],"source_content_type":"text/x-python","patch_set":10,"id":"bf482707_6d20a248","line":87,"range":{"start_line":87,"start_character":0,"end_line":87,"end_character":79},"updated":"2021-08-20 16:27:41.000000000","message":"gah, this is left over from a previous hack I added to the fixture to track connection_info I\u0027ll remove it now.","commit_id":"96157509cd72b8d016ee3fe8f1cdd9e59a903410"}],"nova/tests/functional/test_nova_manage.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":273,"context_line":"            vol[\u0027id\u0027] for vol in server[\u0027os-extended-volumes:volumes_attached\u0027]"},{"line_number":274,"context_line":"        ]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        while volume_id not in attached_vols and timeout \u003c 10.0:"},{"line_number":277,"context_line":"            time.sleep(.1)"},{"line_number":278,"context_line":"            timeout +\u003d .1"},{"line_number":279,"context_line":"            server \u003d self.api.get_server(server_id)"},{"line_number":280,"context_line":"            attached_vols \u003d ["},{"line_number":281,"context_line":"                vol[\u0027id\u0027] for vol in"},{"line_number":282,"context_line":"                server[\u0027os-extended-volumes:volumes_attached\u0027]"},{"line_number":283,"context_line":"            ]"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        if volume_id not in attached_vols:"},{"line_number":286,"context_line":"            self.fail("},{"line_number":287,"context_line":"                \u0027Timed out waiting for volume %s to be attached to \u0027"},{"line_number":288,"context_line":"                \u0027server %s. Currently attached volumes: %s\u0027 %"},{"line_number":289,"context_line":"                (volume_id, server_id, attached_vols)"},{"line_number":290,"context_line":"            )"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_refresh(self):"},{"line_number":293,"context_line":"        self.flags(my_ip\u003d\u0027192.168.1.100\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ce62e058_97691bfd","line":290,"range":{"start_line":276,"start_character":1,"end_line":290,"end_character":13},"updated":"2021-07-19 14:13:11.000000000","message":"I thought we had a waiter somewhere for this against os-volume_attachments","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":365,"context_line":"        self.assertEqual("},{"line_number":366,"context_line":"            new_attachment_id, connection_info[\u0027data\u0027][\u0027attachment_id\u0027])"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"class TestNovaManagePlacementHealAllocations("},{"line_number":370,"context_line":"        integrated_helpers.ProviderUsageBaseTestCase):"},{"line_number":371,"context_line":"    \"\"\"Functional tests for nova-manage placement heal_allocations\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"6149f1cc_be34841f","line":368,"updated":"2021-08-19 22:57:21.000000000","message":"Looks like we are missing assertion(s) for the instance action for the refresh?","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"}],"nova/tests/unit/cmd/test_manage.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":3106,"context_line":"            cell_ctxt, uuidsentinel.volume, uuidsentinel.instance)"},{"line_number":3107,"context_line":"        mock_format_dict.assert_called_once_with(bdm)"},{"line_number":3108,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3109,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027format_dict\u0027 here"},{"line_number":3110,"context_line":""},{"line_number":3111,"context_line":"    @mock.patch(\u0027oslo_serialization.jsonutils.dumps\u0027, return_value\u003d\u0027foo\u0027)"},{"line_number":3112,"context_line":"    @mock.patch(\u0027nova.utils.get_root_helper\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"f2b4b07d_6836b73c","line":3109,"updated":"2021-08-19 22:57:21.000000000","message":"Shouldn\u0027t we assert the return code of 0 for this? Also need tests for return codes 1, 2, and 3.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"66fd1822338b452be2abf14b513abd4efa736d14","unresolved":true,"context_lines":[{"line_number":3126,"context_line":"            CONF.libvirt.volume_use_multipath, enforce_multipath\u003dTrue,"},{"line_number":3127,"context_line":"            host\u003dCONF.host)"},{"line_number":3128,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3129,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027dumps\u0027 here"},{"line_number":3130,"context_line":""},{"line_number":3131,"context_line":"    @mock.patch(\u0027os.path.exists\u0027)"},{"line_number":3132,"context_line":"    def test_refresh_missing_connector_path_file(self, mock_exists):"}],"source_content_type":"text/x-python","patch_set":9,"id":"8cc48549_1d7913c1","line":3129,"updated":"2021-08-19 22:57:21.000000000","message":"Shouldn\u0027t we assert the return code of 0 for this? Also need a test for return code 1.","commit_id":"84ae1d2d0304671188a086d9f4419f2909f456b7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3f7081c37cf514f154fb5bb38d615667f3c540fa","unresolved":true,"context_lines":[{"line_number":3109,"context_line":"            cell_ctxt, uuidsentinel.volume, uuidsentinel.instance)"},{"line_number":3110,"context_line":"        mock_format_dict.assert_called_once_with(bdm)"},{"line_number":3111,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3112,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027format_dict\u0027 here"},{"line_number":3113,"context_line":""},{"line_number":3114,"context_line":"    @mock.patch(\u0027oslo_serialization.jsonutils.dumps\u0027, return_value\u003d\u0027foo\u0027)"},{"line_number":3115,"context_line":"    @mock.patch(\u0027nova.utils.get_root_helper\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"420db91a_d9f02c8d","line":3112,"updated":"2021-08-25 02:56:26.000000000","message":"Shouldn\u0027t we assert the return code of 0 for this? Also need tests for return codes 1, 2, and 3.","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"b7a5937bc4172cd7c867e46a2b22beaf12a6c319","unresolved":false,"context_lines":[{"line_number":3109,"context_line":"            cell_ctxt, uuidsentinel.volume, uuidsentinel.instance)"},{"line_number":3110,"context_line":"        mock_format_dict.assert_called_once_with(bdm)"},{"line_number":3111,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3112,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027format_dict\u0027 here"},{"line_number":3113,"context_line":""},{"line_number":3114,"context_line":"    @mock.patch(\u0027oslo_serialization.jsonutils.dumps\u0027, return_value\u003d\u0027foo\u0027)"},{"line_number":3115,"context_line":"    @mock.patch(\u0027nova.utils.get_root_helper\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"a5975efd_606d4d2c","line":3112,"in_reply_to":"420db91a_d9f02c8d","updated":"2021-08-25 09:26:56.000000000","message":"Done","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3f7081c37cf514f154fb5bb38d615667f3c540fa","unresolved":true,"context_lines":[{"line_number":3129,"context_line":"            CONF.libvirt.volume_use_multipath, enforce_multipath\u003dTrue,"},{"line_number":3130,"context_line":"            host\u003dCONF.host)"},{"line_number":3131,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3132,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027dumps\u0027 here"},{"line_number":3133,"context_line":""},{"line_number":3134,"context_line":"    @mock.patch(\u0027os.path.exists\u0027)"},{"line_number":3135,"context_line":"    def test_refresh_missing_connector_path_file(self, mock_exists):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3e3e19a8_b419e495","line":3132,"updated":"2021-08-25 02:56:26.000000000","message":"Shouldn\u0027t we assert the return code of 0 for this? Also need a test for return code 1.","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"b7a5937bc4172cd7c867e46a2b22beaf12a6c319","unresolved":false,"context_lines":[{"line_number":3129,"context_line":"            CONF.libvirt.volume_use_multipath, enforce_multipath\u003dTrue,"},{"line_number":3130,"context_line":"            host\u003dCONF.host)"},{"line_number":3131,"context_line":"        output \u003d self.output.getvalue()"},{"line_number":3132,"context_line":"        self.assertEqual(\u0027foo\\n\u0027, output)  # we don\u0027t test \u0027dumps\u0027 here"},{"line_number":3133,"context_line":""},{"line_number":3134,"context_line":"    @mock.patch(\u0027os.path.exists\u0027)"},{"line_number":3135,"context_line":"    def test_refresh_missing_connector_path_file(self, mock_exists):"}],"source_content_type":"text/x-python","patch_set":12,"id":"8e2e8520_ade24211","line":3132,"in_reply_to":"3e3e19a8_b419e495","updated":"2021-08-25 09:26:56.000000000","message":"Done","commit_id":"be2bdd218f8275e57c9e133cf16f7320037e3265"}],"releasenotes/notes/add-nova-manage-bdm-commands-19f360dd85c1e81d.yaml":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A number of commands have been managed to ``nova-manage`` to help update"},{"line_number":5,"context_line":"    stale BDM connector info for instances. The ``nova-manage bdm show``"},{"line_number":6,"context_line":"    command can be used to show the current BDM information for a given"},{"line_number":7,"context_line":"    volume and instance. The ``nova-manage bdm get_connector`` command can"},{"line_number":8,"context_line":"    be used to get updated BDM connector information. Finally, the"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"48bd913f_356b4626","line":5,"range":{"start_line":5,"start_character":14,"end_line":5,"end_character":23},"updated":"2021-07-19 14:13:11.000000000","message":"connection","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4a2ef18d87a8fd3d292bfbaa6fa60a0e159bc9a5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A number of commands have been managed to ``nova-manage`` to help update"},{"line_number":5,"context_line":"    stale BDM connector info for instances. The ``nova-manage bdm show``"},{"line_number":6,"context_line":"    command can be used to show the current BDM information for a given"},{"line_number":7,"context_line":"    volume and instance. The ``nova-manage bdm get_connector`` command can"},{"line_number":8,"context_line":"    be used to get updated BDM connector information. Finally, the"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"969a5bd8_a36ce77c","line":5,"range":{"start_line":5,"start_character":10,"end_line":5,"end_character":13},"updated":"2021-07-19 14:13:11.000000000","message":"nit - Block Device Mapping (BDM)","commit_id":"932ac52f4175285ca58d1dd0f3b3f08fae1ce9e9"}]}
