)]}'
{"specs/pike/approved/volume-migrate-action.rst":[{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"761ecad60fa62ffcc7dc7a1abb1b0edea6a35367","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec adds storage migrate action."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"The shema is like the following::"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_19ef1eb1","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":9},"updated":"2017-05-31 10:49:02.000000000","message":"s/shema/schema","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec adds storage migrate action."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"The shema is like the following::"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_57c07e2a","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":9},"in_reply_to":"df140735_19ef1eb1","updated":"2017-06-02 05:09:13.000000000","message":"Done","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"cdfa18d928d8bddd3d1e8c42dd5a5f3349c29a03","unresolved":false,"context_lines":[{"line_number":45,"context_line":"and has no snapshots, then migrates detached volume of resource_id."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"If destination_node is added, first check if volume type of source node"},{"line_number":48,"context_line":"and destination node are the same. If true, this action migrates detached"},{"line_number":49,"context_line":"volume of resource_id to destination_node by calling Cinder migration API."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"If destination_type is added, first check if volume type of source node"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_8bff2f33","line":48,"range":{"start_line":48,"start_character":35,"end_line":48,"end_character":42},"updated":"2017-06-01 09:35:36.000000000","message":"If false, how to do?","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"and has no snapshots, then migrates detached volume of resource_id."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"If destination_node is added, first check if volume type of source node"},{"line_number":48,"context_line":"and destination node are the same. If true, this action migrates detached"},{"line_number":49,"context_line":"volume of resource_id to destination_node by calling Cinder migration API."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"If destination_type is added, first check if volume type of source node"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_b7d23aff","line":48,"range":{"start_line":48,"start_character":35,"end_line":48,"end_character":42},"in_reply_to":"df140735_8bff2f33","updated":"2017-06-02 05:09:13.000000000","message":"If false, WatcherException.Invalid exception will be raised.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"cdfa18d928d8bddd3d1e8c42dd5a5f3349c29a03","unresolved":false,"context_lines":[{"line_number":49,"context_line":"volume of resource_id to destination_node by calling Cinder migration API."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":52,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_4bf9174b","line":52,"range":{"start_line":52,"start_character":36,"end_line":52,"end_character":43},"updated":"2017-06-01 09:35:36.000000000","message":"ditto","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"volume of resource_id to destination_node by calling Cinder migration API."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":52,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_97f8567b","line":52,"range":{"start_line":52,"start_character":36,"end_line":52,"end_character":43},"in_reply_to":"df140735_4bf9174b","updated":"2017-06-02 05:09:13.000000000","message":"If false, WatcherException.Invalid exception will be raised.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"761ecad60fa62ffcc7dc7a1abb1b0edea6a35367","unresolved":false,"context_lines":[{"line_number":52,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_54aafdd1","line":55,"range":{"start_line":55,"start_character":22,"end_line":55,"end_character":26},"updated":"2017-05-31 10:49:02.000000000","message":"I think, this can have a limitation, only compute libvirt driver supports it??","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_37162aaa","line":55,"range":{"start_line":55,"start_character":22,"end_line":55,"end_character":26},"in_reply_to":"df140735_54aafdd1","updated":"2017-06-02 05:09:13.000000000","message":"As discussed in IRC, only compute libvirt driver supports swap volume.  I added Other deployer impact section.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"761ecad60fa62ffcc7dc7a1abb1b0edea6a35367","unresolved":false,"context_lines":[{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_3922e201","line":56,"range":{"start_line":56,"start_character":4,"end_line":56,"end_character":12},"updated":"2017-05-31 10:49:02.000000000","message":"instance status is active, paused or resized.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":19457,"name":"aditi sharma","email":"adi.sky17@gmail.com","username":"aditi"},"change_message_id":"761ecad60fa62ffcc7dc7a1abb1b0edea6a35367","unresolved":false,"context_lines":[{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_9911eeaf","line":56,"range":{"start_line":56,"start_character":63,"end_line":56,"end_character":70},"updated":"2017-05-31 10:49:02.000000000","message":"s/atached/attached","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"cdfa18d928d8bddd3d1e8c42dd5a5f3349c29a03","unresolved":false,"context_lines":[{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_8badef32","line":56,"range":{"start_line":56,"start_character":43,"end_line":56,"end_character":51},"updated":"2017-06-01 09:35:36.000000000","message":"status?","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":53,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":56,"context_line":"and instance is active, paused, or resized statuses, then swap atached"},{"line_number":57,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_171b26d0","line":56,"range":{"start_line":56,"start_character":43,"end_line":56,"end_character":51},"in_reply_to":"df140735_8badef32","updated":"2017-06-02 05:09:13.000000000","message":"Done","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"cdfa18d928d8bddd3d1e8c42dd5a5f3349c29a03","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":61,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":62,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":63,"context_line":"  Update a volume attachment API"},{"line_number":64,"context_line":"- delete source volume"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_eea59905","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":27},"updated":"2017-06-01 09:35:36.000000000","message":"How to decide the destination storage node?","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This action proceeds the following steps:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":61,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":62,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":63,"context_line":"  Update a volume attachment API"},{"line_number":64,"context_line":"- delete source volume"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_176a06ed","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":27},"in_reply_to":"df140735_eea59905","updated":"2017-06-02 05:09:13.000000000","message":"destination is scheduled by cinder-scheduler.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"cdfa18d928d8bddd3d1e8c42dd5a5f3349c29a03","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   [entry_points]"},{"line_number":114,"context_line":"   watcher_actions \u003d"},{"line_number":115,"context_line":"       migrate \u003d watcher.applier.actions.storage_migration:Migrate"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Developer impact"},{"line_number":118,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_6ee74942","line":115,"range":{"start_line":115,"start_character":7,"end_line":115,"end_character":14},"updated":"2017-06-01 09:35:36.000000000","message":"volume-migrate?","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"6f626c1a4e7abccdfa0ed244fee7e284c08c62cf","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"   [entry_points]"},{"line_number":114,"context_line":"   watcher_actions \u003d"},{"line_number":115,"context_line":"       migrate \u003d watcher.applier.actions.storage_migration:Migrate"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Developer impact"},{"line_number":118,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"df140735_9775f6cd","line":115,"range":{"start_line":115,"start_character":7,"end_line":115,"end_character":14},"in_reply_to":"df140735_6ee74942","updated":"2017-06-02 05:09:13.000000000","message":"Thanks, I updated.","commit_id":"e407987822911af3ff978d71d8ddeabe940434b1"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"abfc3724821f92f2ade9375151feb896cc4d8c06","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"},{"line_number":37,"context_line":"        \u0027migration_type\u0027: str,  # choices -\u003e \"swap\", \"cold\""},{"line_number":38,"context_line":"        \u0027destination_node\u0027: str,"},{"line_number":39,"context_line":"        \u0027destination_type\u0027: str,"},{"line_number":40,"context_line":"    })"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_09501ed4","line":37,"range":{"start_line":37,"start_character":45,"end_line":37,"end_character":59},"updated":"2017-06-07 09:52:08.000000000","message":"do you have a default value for this?","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bbc553847aa521a6b344c52b636cc041c443d7e3","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"},{"line_number":37,"context_line":"        \u0027migration_type\u0027: str,  # choices -\u003e \"swap\", \"cold\""},{"line_number":38,"context_line":"        \u0027destination_node\u0027: str,"},{"line_number":39,"context_line":"        \u0027destination_type\u0027: str,"},{"line_number":40,"context_line":"    })"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_10bf2afc","line":37,"range":{"start_line":37,"start_character":45,"end_line":37,"end_character":59},"in_reply_to":"df140735_09501ed4","updated":"2017-06-08 07:16:57.000000000","message":"swap is default value.","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"f275dcf0aaf81a28f6ef5c8dbf0fddde14738941","unresolved":false,"context_lines":[{"line_number":54,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":55,"context_line":"If false, WatcherException.Invalid exception will be raised."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":58,"context_line":"and instance status is active, paused, or resized, then swap attached"},{"line_number":59,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":60,"context_line":"This action proceeds the following steps:"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_796c1108","line":58,"range":{"start_line":57,"start_character":29,"end_line":58,"end_character":29},"updated":"2017-06-08 09:13:20.000000000","message":"As the example in https://docs.openstack.org/admin-guide/blockstorage-volume-migration.html\n\u0027cinder migrate\u0027 can migrate an attached volume from one to the other.\nwhy do you use \u0027cinder migrate\u0027 only for the detached volume?","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"8a1233e69f674c2064ddc2f5dc432eeb9ecd7da2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":55,"context_line":"If false, WatcherException.Invalid exception will be raised."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":58,"context_line":"and instance status is active, paused, or resized, then swap attached"},{"line_number":59,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":60,"context_line":"This action proceeds the following steps:"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_55c7b013","line":58,"range":{"start_line":57,"start_character":29,"end_line":58,"end_character":29},"in_reply_to":"bf091321_1f3df5ba","updated":"2017-06-09 02:54:52.000000000","message":"I got it, thanks","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"095ed9cb36372d35946dcf0bfb22936aad0c2ac2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":55,"context_line":"If false, WatcherException.Invalid exception will be raised."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":58,"context_line":"and instance status is active, paused, or resized, then swap attached"},{"line_number":59,"context_line":"volume of resource_id. In this case, destination_type is mandatory."},{"line_number":60,"context_line":"This action proceeds the following steps:"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf091321_1f3df5ba","line":58,"range":{"start_line":57,"start_character":29,"end_line":58,"end_character":29},"in_reply_to":"bf091321_796c1108","updated":"2017-06-08 09:43:20.000000000","message":"\"the migration of ‘in-use’ volumes is driver dependent. It depends on different drivers involved in the operation. It may fail depending on the source or destination driver of the volume.For example, from RBD to LVM, the migration of ‘in-use’ volume will succeed, but from LVM to RBD, it will fail.\"\nin https://docs.openstack.org/developer/cinder/devref/migration.html#introduction-to-volume-migration\n\nI want to use different drivers for migrating volumes.","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"fd09c4b7dc063bb289ab217f424a50f2f20f53d5","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":63,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":64,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":65,"context_line":"  Update a volume attachment API"},{"line_number":66,"context_line":"- delete source volume"},{"line_number":67,"context_line":"- delete the temporary user"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_c7d1fc31","line":65,"range":{"start_line":64,"start_character":2,"end_line":65,"end_character":32},"updated":"2017-06-07 03:01:10.000000000","message":"question:\nDoes the Nova Update Volume API copy the data from source volume to destination?\nI can\u0027t find any info about this in https://developer.openstack.org/api-ref/compute/?expanded\u003dupdate-a-volume-attachment-detail#update-a-volume-attachment","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"3b56d0bc6d03b882962f66f8fe19c324824609a8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":63,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":64,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":65,"context_line":"  Update a volume attachment API"},{"line_number":66,"context_line":"- delete source volume"},{"line_number":67,"context_line":"- delete the temporary user"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_fb6139d5","line":65,"range":{"start_line":64,"start_character":2,"end_line":65,"end_character":32},"in_reply_to":"df140735_c7d1fc31","updated":"2017-06-07 06:14:51.000000000","message":"Yes, the API copies the data. The API is actually calling virDomainBlockRebase with VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT flag:\nhttps://libvirt.org/html/libvirt-libvirt-domain.html#virDomainBlockRebase","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"db2bf16c2683680c1a7d991fc91fad85858cee8c","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":63,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":64,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":65,"context_line":"  Update a volume attachment API"},{"line_number":66,"context_line":"- delete source volume"},{"line_number":67,"context_line":"- delete the temporary user"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"df140735_81e52cdf","line":65,"range":{"start_line":64,"start_character":2,"end_line":65,"end_character":32},"in_reply_to":"df140735_fb6139d5","updated":"2017-06-07 07:46:32.000000000","message":"Thanks Hidekazu!","commit_id":"cd7954da0b13ae6e812e8637c2e7f9dfdfb403db"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"6a603fbf6aab149e3411b97397f38be4c11151c0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"* As a developer, I want to develop zone migration strategy which migrates"},{"line_number":26,"context_line":"  cinder volume."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Proposed change"},{"line_number":29,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec adds storage migrate action."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f201791_edb924e9","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":15},"updated":"2017-06-23 09:56:14.000000000","message":"I drew a simple picture when I was trying to understand the spec. Hope it can help others to understand.\n\n                               no                                           no\nif \"cold\"?----------------------------------------------------\u003e if \"swap\"?---------\u003eERROR\n   |                                                               |\n   |yes                                                            |yes\n   |                                                               |\nif \"destination_node\"      no     if \"destination_type\"      5 steps described\ngiven ?-------------------------\u003e given?\n   |                                 |\n   |yes                              |yes\n   |                                 |\ncheck if volume_type              check if volume_type \nthe same?----------------         different?--------------\n   |                    |            |                   |\n   |yes                 |no          |yes                |no\n   |                    |            |                   |\ncall cinder migrate    ERROR      call cinder retype    ERROR","commit_id":"444038767fee08d183fd32db2afa1f35e833d8fa"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"3b5a64d1e46fd571f6ea3e2bb4b5646a32550b0e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"* As a developer, I want to develop zone migration strategy which migrates"},{"line_number":26,"context_line":"  cinder volume."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Proposed change"},{"line_number":29,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This spec adds storage migrate action."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f201791_3c65e71e","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":15},"in_reply_to":"5f201791_edb924e9","updated":"2017-06-26 08:43:06.000000000","message":"Thanks nice picture!\nI borrowed and updated your picture in patch set 4.","commit_id":"444038767fee08d183fd32db2afa1f35e833d8fa"},{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"6a603fbf6aab149e3411b97397f38be4c11151c0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":54,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":55,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":56,"context_line":"If false, WatcherException.Invalid exception will be raised."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":59,"context_line":"and instance status is active, paused, or resized, then swap attached"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f201791_964be6ae","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":44},"updated":"2017-06-23 09:56:14.000000000","message":"Hi Hidekazu, can you please add more descriptions about this exception, just like \"destination_type should be different from that of source node, otherwise destination_node should be provided\"?   This may help others understand your spec.  I was a bit confused before discussion with @licanwei.","commit_id":"444038767fee08d183fd32db2afa1f35e833d8fa"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"3b5a64d1e46fd571f6ea3e2bb4b5646a32550b0e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":54,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":55,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":56,"context_line":"If false, WatcherException.Invalid exception will be raised."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"If migration_type is \"swap\", This action verifies that volume is attached"},{"line_number":59,"context_line":"and instance status is active, paused, or resized, then swap attached"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5f201791_9c5e3b42","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":44},"in_reply_to":"5f201791_964be6ae","updated":"2017-06-26 08:43:06.000000000","message":"Done","commit_id":"444038767fee08d183fd32db2afa1f35e833d8fa"},{"author":{"_account_id":7038,"name":"Akihito INOH","email":"akihito-inou@nec.com","username":"akihito-inoh"},"change_message_id":"440a93ed454621b87b0e1b4a3002fce750dcc680","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +       no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_2de9a119","line":85,"range":{"start_line":85,"start_character":58,"end_line":85,"end_character":64},"updated":"2017-06-30 04:12:57.000000000","message":"should adjust indent at \"ERROR\" below.","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bf1f1f00c03a0d596cd6e82984639dfdcdcb1a50","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +       no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_f575ab99","line":85,"range":{"start_line":85,"start_character":58,"end_line":85,"end_character":64},"in_reply_to":"3f1d235d_2de9a119","updated":"2017-06-30 06:29:37.000000000","message":"Done","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":7038,"name":"Akihito INOH","email":"akihito-inou@nec.com","username":"akihito-inoh"},"change_message_id":"440a93ed454621b87b0e1b4a3002fce750dcc680","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        |                                   v"},{"line_number":90,"context_line":"        v                            if volume attached"},{"line_number":91,"context_line":"  if volume detached                 and instance is active"},{"line_number":92,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":93,"context_line":"        +            no                     +"},{"line_number":94,"context_line":"        |                                   | yes"},{"line_number":95,"context_line":"        | yes                               v"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_2d9be1c9","line":92,"range":{"start_line":92,"start_character":61,"end_line":92,"end_character":64},"updated":"2017-06-30 04:12:57.000000000","message":"should describe \"no\" at left of \"ERROR\", and adjust indent at \"ERROR\" below.","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bf1f1f00c03a0d596cd6e82984639dfdcdcb1a50","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        |                                   v"},{"line_number":90,"context_line":"        v                            if volume attached"},{"line_number":91,"context_line":"  if volume detached                 and instance is active"},{"line_number":92,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":93,"context_line":"        +            no                     +"},{"line_number":94,"context_line":"        |                                   | yes"},{"line_number":95,"context_line":"        | yes                               v"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_b56f33c4","line":92,"range":{"start_line":92,"start_character":61,"end_line":92,"end_character":64},"in_reply_to":"3f1d235d_2d9be1c9","updated":"2017-06-30 06:29:37.000000000","message":"Done","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":7038,"name":"Akihito INOH","email":"akihito-inou@nec.com","username":"akihito-inoh"},"change_message_id":"440a93ed454621b87b0e1b4a3002fce750dcc680","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                            5 steps described above"},{"line_number":97,"context_line":"        |"},{"line_number":98,"context_line":"        v"},{"line_number":99,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\"_type\" +-\u003eERROR"},{"line_number":100,"context_line":"  given ?                  no        given?"},{"line_number":101,"context_line":"        +                                   +"},{"line_number":102,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_928570b0","line":99,"range":{"start_line":99,"start_character":40,"end_line":99,"end_character":64},"updated":"2017-06-30 04:12:57.000000000","message":"Is this typo?\n\"destination_type\" right?\nNot \"destination_type\"_type\"","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":7038,"name":"Akihito INOH","email":"akihito-inou@nec.com","username":"akihito-inoh"},"change_message_id":"440a93ed454621b87b0e1b4a3002fce750dcc680","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                            5 steps described above"},{"line_number":97,"context_line":"        |"},{"line_number":98,"context_line":"        v"},{"line_number":99,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\"_type\" +-\u003eERROR"},{"line_number":100,"context_line":"  given ?                  no        given?"},{"line_number":101,"context_line":"        +                                   +"},{"line_number":102,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_8d6675ed","line":99,"range":{"start_line":99,"start_character":66,"end_line":99,"end_character":68},"updated":"2017-06-30 04:12:57.000000000","message":"should describe \"no\" at left of \"ERROR\"","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bf1f1f00c03a0d596cd6e82984639dfdcdcb1a50","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                            5 steps described above"},{"line_number":97,"context_line":"        |"},{"line_number":98,"context_line":"        v"},{"line_number":99,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\"_type\" +-\u003eERROR"},{"line_number":100,"context_line":"  given ?                  no        given?"},{"line_number":101,"context_line":"        +                                   +"},{"line_number":102,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_75699bbc","line":99,"range":{"start_line":99,"start_character":66,"end_line":99,"end_character":68},"in_reply_to":"3f1d235d_8d6675ed","updated":"2017-06-30 06:29:37.000000000","message":"Done","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bf1f1f00c03a0d596cd6e82984639dfdcdcb1a50","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                            5 steps described above"},{"line_number":97,"context_line":"        |"},{"line_number":98,"context_line":"        v"},{"line_number":99,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\"_type\" +-\u003eERROR"},{"line_number":100,"context_line":"  given ?                  no        given?"},{"line_number":101,"context_line":"        +                                   +"},{"line_number":102,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_55669fef","line":99,"range":{"start_line":99,"start_character":40,"end_line":99,"end_character":64},"in_reply_to":"3f1d235d_928570b0","updated":"2017-06-30 06:29:37.000000000","message":"Done","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":7038,"name":"Akihito INOH","email":"akihito-inou@nec.com","username":"akihito-inoh"},"change_message_id":"440a93ed454621b87b0e1b4a3002fce750dcc680","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        | yes                               | yes"},{"line_number":103,"context_line":"        |                                   |"},{"line_number":104,"context_line":"        v                                   v"},{"line_number":105,"context_line":"  check if volume_type               if \"destination_type\""},{"line_number":106,"context_line":"  the same?                          given?"},{"line_number":107,"context_line":"        +---------------+                   +------------------+"},{"line_number":108,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_d2bc086b","line":105,"range":{"start_line":105,"start_character":37,"end_line":105,"end_character":58},"updated":"2017-06-30 04:12:57.000000000","message":"Referring above specs, we should check if volume type of source node\nand destination node are different, in this step.","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"bf1f1f00c03a0d596cd6e82984639dfdcdcb1a50","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        | yes                               | yes"},{"line_number":103,"context_line":"        |                                   |"},{"line_number":104,"context_line":"        v                                   v"},{"line_number":105,"context_line":"  check if volume_type               if \"destination_type\""},{"line_number":106,"context_line":"  the same?                          given?"},{"line_number":107,"context_line":"        +---------------+                   +------------------+"},{"line_number":108,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f1d235d_356323df","line":105,"range":{"start_line":105,"start_character":37,"end_line":105,"end_character":58},"in_reply_to":"3f1d235d_d2bc086b","updated":"2017-06-30 06:29:37.000000000","message":"Done","commit_id":"cb8373d0206bdb04b906e61722b62918db1541bb"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"75b3db9e72a0687fbfd2c1d576b842c30f602ab2","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +                no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_13ff1f02","line":85,"range":{"start_line":85,"start_character":2,"end_line":85,"end_character":11},"updated":"2017-06-30 08:37:58.000000000","message":"if type is \u0027cold\u0027","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"75b3db9e72a0687fbfd2c1d576b842c30f602ab2","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +                no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_f303830c","line":85,"range":{"start_line":85,"start_character":37,"end_line":85,"end_character":46},"updated":"2017-06-30 08:37:58.000000000","message":"if type is swap","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"c9bde35663fbceea37c9a039a3d64b959655f3a1","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +                no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_098a521a","line":85,"range":{"start_line":85,"start_character":2,"end_line":85,"end_character":11},"in_reply_to":"3f1d235d_13ff1f02","updated":"2017-06-30 09:01:53.000000000","message":"Done","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"c9bde35663fbceea37c9a039a3d64b959655f3a1","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"::"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  if \"cold\"?+-----------------------\u003eif \"swap\"?+----------------\u003eERROR"},{"line_number":86,"context_line":"        +            no                     +                no"},{"line_number":87,"context_line":"        |                                   |"},{"line_number":88,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_e98ef62c","line":85,"range":{"start_line":85,"start_character":37,"end_line":85,"end_character":46},"in_reply_to":"3f1d235d_f303830c","updated":"2017-06-30 09:01:53.000000000","message":"Done","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"75b3db9e72a0687fbfd2c1d576b842c30f602ab2","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"   [entry_points]"},{"line_number":160,"context_line":"   watcher_actions \u003d"},{"line_number":161,"context_line":"       volume_migrate \u003d watcher.applier.actions.storage_migration:Migrate"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Developer impact"},{"line_number":164,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_33bc5b04","line":161,"range":{"start_line":161,"start_character":66,"end_line":161,"end_character":73},"updated":"2017-06-30 08:37:58.000000000","message":"VolumeMigrate is better","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"c9bde35663fbceea37c9a039a3d64b959655f3a1","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"   [entry_points]"},{"line_number":160,"context_line":"   watcher_actions \u003d"},{"line_number":161,"context_line":"       volume_migrate \u003d watcher.applier.actions.storage_migration:Migrate"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Developer impact"},{"line_number":164,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f1d235d_897d421e","line":161,"range":{"start_line":161,"start_character":66,"end_line":161,"end_character":73},"in_reply_to":"3f1d235d_33bc5b04","updated":"2017-06-30 09:01:53.000000000","message":"Done","commit_id":"adcf372507a594f2b458be7746d654b37b3278f9"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"},{"line_number":37,"context_line":"        \u0027migration_type\u0027: str,  # choices -\u003e \"swap\", \"cold\""},{"line_number":38,"context_line":"        \u0027destination_node\u0027: str,"},{"line_number":39,"context_line":"        \u0027destination_type\u0027: str,"},{"line_number":40,"context_line":"    })"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Resource_id and migration_type are mandatory parameters."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_2e87cdb7","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":32},"updated":"2017-07-05 18:20:14.000000000","message":"I understand the requirement that a user can specify the destination of the migration. At very high level, user should be able to specify the destination node and let watcher do the work. But in reality, watcher should do minimum work that related to the action. IMHO, I think the destination should be a existing volume for the following reasons:\n1. provide more flexibility;\n2. better programmatic interface, e.g. create volume on a particular node can be offloaded to high-level application;\n3. better error handling. The action will only take care of the migration errors. Errors in Create volumes is out of the scope of migration.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    schema \u003d Schema({"},{"line_number":36,"context_line":"        \u0027resource_id\u0027: str,  # should be a UUID"},{"line_number":37,"context_line":"        \u0027migration_type\u0027: str,  # choices -\u003e \"swap\", \"cold\""},{"line_number":38,"context_line":"        \u0027destination_node\u0027: str,"},{"line_number":39,"context_line":"        \u0027destination_type\u0027: str,"},{"line_number":40,"context_line":"    })"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Resource_id and migration_type are mandatory parameters."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_abeaa40b","line":39,"range":{"start_line":38,"start_character":0,"end_line":39,"end_character":32},"in_reply_to":"3f1d235d_2e87cdb7","updated":"2017-07-05 23:51:36.000000000","message":"We develop actions used by strategies not by user.\nTypically strategy choose appropriate destination for OpenStack environment, which is main job of most current strategy.\nThe action should do maximum migration work for strategies.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"FAILED state. if true, the action swaps attached volume of resource id."},{"line_number":69,"context_line":"This action proceeds the following steps:"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":72,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_89a25bfb","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":69},"updated":"2017-07-05 18:20:14.000000000","message":"I think it can be offloaded to other high-level management application. User can also do it manually. A couple of issue for the proposed approach:\n1. complicated with user management;\n2. What if the volume is shared and the project is deleted.\n3. complicated to handle the errors and rollback.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":68,"context_line":"FAILED state. if true, the action swaps attached volume of resource id."},{"line_number":69,"context_line":"This action proceeds the following steps:"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"- create a temporary user in the project which created source volume"},{"line_number":72,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_4bf550ec","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":69},"in_reply_to":"3f1d235d_89a25bfb","updated":"2017-07-05 23:51:36.000000000","message":"As mentioned above, the action is used by strategy not by user.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"},{"line_number":76,"context_line":"- delete the temporary user"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Temporary user password is determined randomly for each user to reduce"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_29db477c","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":22},"updated":"2017-07-05 18:20:14.000000000","message":"I think it is purely user decision. it should be out of the scope of the migration. If user think it is necessary, it can be done as a following up action of migration.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":72,"context_line":"- create destination volume of destination_type by the temporary user"},{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"},{"line_number":76,"context_line":"- delete the temporary user"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Temporary user password is determined randomly for each user to reduce"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_ebe3fc32","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":22},"in_reply_to":"3f1d235d_29db477c","updated":"2017-07-05 23:51:36.000000000","message":"As mentioned above, the action is used by strategy not by user.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"},{"line_number":76,"context_line":"- delete the temporary user"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Temporary user password is determined randomly for each user to reduce"},{"line_number":79,"context_line":"security risk as much as possible."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_09e40b3b","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":27},"updated":"2017-07-05 18:20:14.000000000","message":"offload, same reason as above.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":73,"context_line":"- swap volume from source volume to destination volume by using Nova"},{"line_number":74,"context_line":"  Update a volume attachment API"},{"line_number":75,"context_line":"- delete source volume"},{"line_number":76,"context_line":"- delete the temporary user"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Temporary user password is determined randomly for each user to reduce"},{"line_number":79,"context_line":"security risk as much as possible."}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_6bc92caa","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":27},"in_reply_to":"3f1d235d_09e40b3b","updated":"2017-07-05 23:51:36.000000000","message":"should be included as above reason.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        +             no                    +                no"},{"line_number":95,"context_line":"        |                                   | yes"},{"line_number":96,"context_line":"        | yes                               v"},{"line_number":97,"context_line":"        |                            5 steps described above"},{"line_number":98,"context_line":"        |"},{"line_number":99,"context_line":"        v"},{"line_number":100,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_69cedfb4","line":97,"range":{"start_line":97,"start_character":37,"end_line":97,"end_character":60},"updated":"2017-07-05 18:20:14.000000000","message":"hopefully it is 1 step, e.g. migrate volume","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        +             no                    +                no"},{"line_number":95,"context_line":"        |                                   | yes"},{"line_number":96,"context_line":"        | yes                               v"},{"line_number":97,"context_line":"        |                            5 steps described above"},{"line_number":98,"context_line":"        |"},{"line_number":99,"context_line":"        v"},{"line_number":100,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_ab38649f","line":97,"range":{"start_line":97,"start_character":37,"end_line":97,"end_character":60},"in_reply_to":"3f1d235d_69cedfb4","updated":"2017-07-05 23:51:36.000000000","message":"I hope too.\nBut we do not have the cinder API interface for attached volume.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":25026,"name":"Bin Zhou","email":"lakerzhou@gmail.com","username":"lakerzhou"},"change_message_id":"b45ae5e47b272446d03c79577cbe80500224ba4d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Security impact"},{"line_number":131,"context_line":"---------------"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"If migration_type is swap, temporary user password can be security risk."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Notifications impact"},{"line_number":136,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_69437f14","line":133,"range":{"start_line":133,"start_character":0,"end_line":133,"end_character":72},"updated":"2017-07-05 18:20:14.000000000","message":"another reason of not creating the volume on the fly","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"481b38981cbcabbdc9848393d2ec5febff6c4e09","unresolved":false,"context_lines":[{"line_number":130,"context_line":"Security impact"},{"line_number":131,"context_line":"---------------"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"If migration_type is swap, temporary user password can be security risk."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Notifications impact"},{"line_number":136,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3f1d235d_6b57eccb","line":133,"range":{"start_line":133,"start_character":0,"end_line":133,"end_character":72},"in_reply_to":"3f1d235d_69437f14","updated":"2017-07-05 23:51:36.000000000","message":"Creating temporary user is inevitable for migrating attached volume.\nIf we do not create such user who creates new volume to be migrated, owner of new volume will be admin user.","commit_id":"f9ba96ef41e043ad8a49751eda665c2231eec296"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"\"Volume type must be same for migrating\" is raised and the action ends"},{"line_number":55,"context_line":"with FAILED state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":58,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":59,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":60,"context_line":"If false, WatcherException.Invalid exception with the message"},{"line_number":61,"context_line":"\"Volume type must be different for retyping\" is raised and the action"},{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_8569a5bf","line":62,"range":{"start_line":57,"start_character":0,"end_line":62,"end_character":23},"updated":"2017-07-13 10:05:37.000000000","message":"seems that you need to remove this one.","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":54,"context_line":"\"Volume type must be same for migrating\" is raised and the action ends"},{"line_number":55,"context_line":"with FAILED state."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"If destination_type is added, first check if volume type of source node"},{"line_number":58,"context_line":"and destination node are different. If true, this action migrates detached"},{"line_number":59,"context_line":"volume of resource_id to destination_type by calling Cinder retype API."},{"line_number":60,"context_line":"If false, WatcherException.Invalid exception with the message"},{"line_number":61,"context_line":"\"Volume type must be different for retyping\" is raised and the action"},{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_cc910555","line":62,"range":{"start_line":57,"start_character":0,"end_line":62,"end_character":23},"in_reply_to":"1f1a1f67_8569a5bf","updated":"2017-07-13 10:37:36.000000000","message":"We need this feature because of migrating volume to different volume type storage pool.","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"},{"line_number":66,"context_line":"with the message \"destination type is required when migration type is swap\""},{"line_number":67,"context_line":"is raised."},{"line_number":68,"context_line":"Moreover, the action verifies that volume is attached and instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_05d2355d","line":65,"range":{"start_line":65,"start_character":27,"end_line":65,"end_character":35},"updated":"2017-07-13 10:05:37.000000000","message":"If destination_type hasn\u0027t been provided,","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\"Volume type must be different for retyping\" is raised and the action"},{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"},{"line_number":66,"context_line":"with the message \"destination type is required when migration type is swap\""},{"line_number":67,"context_line":"is raised."},{"line_number":68,"context_line":"Moreover, the action verifies that volume is attached and instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_6594498c","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":26},"updated":"2017-07-13 10:05:37.000000000","message":"If migration_type is \"swap\" then destination_type is required.","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"},{"line_number":66,"context_line":"with the message \"destination type is required when migration type is swap\""},{"line_number":67,"context_line":"is raised."},{"line_number":68,"context_line":"Moreover, the action verifies that volume is attached and instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_6c8af11b","line":65,"range":{"start_line":65,"start_character":27,"end_line":65,"end_character":35},"in_reply_to":"1f1a1f67_05d2355d","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\"Volume type must be different for retyping\" is raised and the action"},{"line_number":62,"context_line":"ends with FAILED state."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"If migration_type is \"swap\", destination_type is mandatory and check if"},{"line_number":65,"context_line":"destination_type is given. If false, WatcherException.Invalid exception"},{"line_number":66,"context_line":"with the message \"destination type is required when migration type is swap\""},{"line_number":67,"context_line":"is raised."},{"line_number":68,"context_line":"Moreover, the action verifies that volume is attached and instance"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_4c8f352a","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":26},"in_reply_to":"1f1a1f67_6594498c","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        +                                   +"},{"line_number":91,"context_line":"        | yes                               | yes"},{"line_number":92,"context_line":"        |                                   v"},{"line_number":93,"context_line":"        |                            if \"destination_type\" +----\u003eERROR"},{"line_number":94,"context_line":"        |                            given?                  no"},{"line_number":95,"context_line":"        |                                   +"},{"line_number":96,"context_line":"        |                                   |yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_095c8f23","line":93,"range":{"start_line":93,"start_character":37,"end_line":93,"end_character":39},"updated":"2017-07-13 10:05:37.000000000","message":"s/if/is","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        +                                   +"},{"line_number":91,"context_line":"        | yes                               | yes"},{"line_number":92,"context_line":"        |                                   v"},{"line_number":93,"context_line":"        |                            if \"destination_type\" +----\u003eERROR"},{"line_number":94,"context_line":"        |                            given?                  no"},{"line_number":95,"context_line":"        |                                   +"},{"line_number":96,"context_line":"        |                                   |yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_2c84f90b","line":93,"range":{"start_line":93,"start_character":37,"end_line":93,"end_character":39},"in_reply_to":"1f1a1f67_095c8f23","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        |                                   +"},{"line_number":96,"context_line":"        |                                   |yes"},{"line_number":97,"context_line":"        |                                   v"},{"line_number":98,"context_line":"        v                            if volume attached"},{"line_number":99,"context_line":"  if volume detached                 and instance is active"},{"line_number":100,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":101,"context_line":"        +             no                    +                no"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_e9403338","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":39},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        |                                   +"},{"line_number":96,"context_line":"        |                                   |yes"},{"line_number":97,"context_line":"        |                                   v"},{"line_number":98,"context_line":"        v                            if volume attached"},{"line_number":99,"context_line":"  if volume detached                 and instance is active"},{"line_number":100,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":101,"context_line":"        +             no                    +                no"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_ec7de11c","line":98,"range":{"start_line":98,"start_character":37,"end_line":98,"end_character":39},"in_reply_to":"1f1a1f67_e9403338","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                                   |yes"},{"line_number":97,"context_line":"        |                                   v"},{"line_number":98,"context_line":"        v                            if volume attached"},{"line_number":99,"context_line":"  if volume detached                 and instance is active"},{"line_number":100,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":101,"context_line":"        +             no                    +                no"},{"line_number":102,"context_line":"        |                                   | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_a94a3b52","line":99,"range":{"start_line":99,"start_character":2,"end_line":99,"end_character":4},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        |                                   |yes"},{"line_number":97,"context_line":"        |                                   v"},{"line_number":98,"context_line":"        v                            if volume attached"},{"line_number":99,"context_line":"  if volume detached                 and instance is active"},{"line_number":100,"context_line":"  and no snapshots? +----\u003e ERROR     paused, or resized?    +---\u003eERROR"},{"line_number":101,"context_line":"        +             no                    +                no"},{"line_number":102,"context_line":"        |                                   | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_8c742d37","line":99,"range":{"start_line":99,"start_character":2,"end_line":99,"end_character":4},"in_reply_to":"1f1a1f67_a94a3b52","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        |                            5 steps described above"},{"line_number":105,"context_line":"        |"},{"line_number":106,"context_line":"        v"},{"line_number":107,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"},{"line_number":108,"context_line":"  given ?                  no        given?                  no"},{"line_number":109,"context_line":"        +                                   +"},{"line_number":110,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_497ba78b","line":107,"range":{"start_line":107,"start_character":2,"end_line":107,"end_character":4},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        |                            5 steps described above"},{"line_number":105,"context_line":"        |"},{"line_number":106,"context_line":"        v"},{"line_number":107,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"},{"line_number":108,"context_line":"  given ?                  no        given?                  no"},{"line_number":109,"context_line":"        +                                   +"},{"line_number":110,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_697663a7","line":107,"range":{"start_line":107,"start_character":37,"end_line":107,"end_character":39},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        |                            5 steps described above"},{"line_number":105,"context_line":"        |"},{"line_number":106,"context_line":"        v"},{"line_number":107,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"},{"line_number":108,"context_line":"  given ?                  no        given?                  no"},{"line_number":109,"context_line":"        +                                   +"},{"line_number":110,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_4c94d537","line":107,"range":{"start_line":107,"start_character":2,"end_line":107,"end_character":4},"in_reply_to":"1f1a1f67_497ba78b","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        |                            5 steps described above"},{"line_number":105,"context_line":"        |"},{"line_number":106,"context_line":"        v"},{"line_number":107,"context_line":"  if \"destination_node\"+------------\u003eif \"destination_type\" +----\u003eERROR"},{"line_number":108,"context_line":"  given ?                  no        given?                  no"},{"line_number":109,"context_line":"        +                                   +"},{"line_number":110,"context_line":"        | yes                               | yes"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_0c9edd55","line":107,"range":{"start_line":107,"start_character":37,"end_line":107,"end_character":39},"in_reply_to":"1f1a1f67_697663a7","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        | yes                               | yes"},{"line_number":111,"context_line":"        |                                   |"},{"line_number":112,"context_line":"        v                                   v"},{"line_number":113,"context_line":"  if volume type                     if volume type"},{"line_number":114,"context_line":"  the same?                          different?"},{"line_number":115,"context_line":"        +---------------+                   +------------------+"},{"line_number":116,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_a9635bdc","line":113,"range":{"start_line":113,"start_character":37,"end_line":113,"end_character":39},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":19055,"name":"Alexander Chadin","email":"joker946@gmail.com","username":"joker946"},"change_message_id":"119bd040b6dbc507a81a6f12d3d6ebf4f17c2dd5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        | yes                               | yes"},{"line_number":111,"context_line":"        |                                   |"},{"line_number":112,"context_line":"        v                                   v"},{"line_number":113,"context_line":"  if volume type                     if volume type"},{"line_number":114,"context_line":"  the same?                          different?"},{"line_number":115,"context_line":"        +---------------+                   +------------------+"},{"line_number":116,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_e96953be","line":113,"range":{"start_line":113,"start_character":2,"end_line":113,"end_character":4},"updated":"2017-07-13 10:05:37.000000000","message":"ditto","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        | yes                               | yes"},{"line_number":111,"context_line":"        |                                   |"},{"line_number":112,"context_line":"        v                                   v"},{"line_number":113,"context_line":"  if volume type                     if volume type"},{"line_number":114,"context_line":"  the same?                          different?"},{"line_number":115,"context_line":"        +---------------+                   +------------------+"},{"line_number":116,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_eca2819a","line":113,"range":{"start_line":113,"start_character":37,"end_line":113,"end_character":39},"in_reply_to":"1f1a1f67_a9635bdc","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"7f5013681e2d19898e0eb3dc2cc377ba54ee5887","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        | yes                               | yes"},{"line_number":111,"context_line":"        |                                   |"},{"line_number":112,"context_line":"        v                                   v"},{"line_number":113,"context_line":"  if volume type                     if volume type"},{"line_number":114,"context_line":"  the same?                          different?"},{"line_number":115,"context_line":"        +---------------+                   +------------------+"},{"line_number":116,"context_line":"        |               |                   |                  |"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f1a1f67_cc9fc54e","line":113,"range":{"start_line":113,"start_character":2,"end_line":113,"end_character":4},"in_reply_to":"1f1a1f67_e96953be","updated":"2017-07-13 10:37:36.000000000","message":"Done","commit_id":"c7edd4226db10b97f3069efa5237d1dbb909e7fc"}]}
