)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"cbc51ec83cdedddfdb65ab9eb0da6c59da04351f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fd6ad7bb_275183c1","updated":"2022-03-03 17:41:00.000000000","message":"Retarget for Zed if you want to continue","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"c1ef27f6d4488ae653e2e51fa9d5aa74a9e3deaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"35034a20_38843630","updated":"2021-12-07 15:47:46.000000000","message":"This needs to be revised and re-targeted for Yoga if you\u0027re still interested in pursuing it.","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"}],"specs/wallaby/replicated_volume_migration.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e0d6b4aefa0e266f726fb4d860f00e454b5b6148","unresolved":true,"context_lines":[{"line_number":20,"context_line":"FYI : https://review.opendev.org/#/c/747425/11"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"So, API should have a better mechanism to check if the given backend has a"},{"line_number":23,"context_line":"capability to allow migartion of replicated-volumes and driver should"},{"line_number":24,"context_line":"have the control for proposed feature(migration of replicated volumes)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"8e3cc0f0_b9045cb0","line":23,"range":{"start_line":23,"start_character":20,"end_line":23,"end_character":29},"updated":"2020-12-16 23:33:49.000000000","message":"migration","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"ea81ae95919e6b1439809ed546397279e5bea3c2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"FYI : https://review.opendev.org/#/c/747425/11"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"So, API should have a better mechanism to check if the given backend has a"},{"line_number":23,"context_line":"capability to allow migartion of replicated-volumes and driver should"},{"line_number":24,"context_line":"have the control for proposed feature(migration of replicated volumes)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bbee64d8_15c565e4","line":23,"range":{"start_line":23,"start_character":20,"end_line":23,"end_character":29},"in_reply_to":"8e3cc0f0_b9045cb0","updated":"2021-06-07 11:30:41.000000000","message":"Ack","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e0d6b4aefa0e266f726fb4d860f00e454b5b6148","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"So, API should have a better mechanism to check if the given backend has a"},{"line_number":23,"context_line":"capability to allow migartion of replicated-volumes and driver should"},{"line_number":24,"context_line":"have the control for proposed feature(migration of replicated volumes)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ad354090_f1198a58","line":24,"range":{"start_line":24,"start_character":36,"end_line":24,"end_character":38},"updated":"2020-12-16 23:33:49.000000000","message":"need a space before the parenthesis","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"ea81ae95919e6b1439809ed546397279e5bea3c2","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"So, API should have a better mechanism to check if the given backend has a"},{"line_number":23,"context_line":"capability to allow migartion of replicated-volumes and driver should"},{"line_number":24,"context_line":"have the control for proposed feature(migration of replicated volumes)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":2,"id":"2170da5a_4c184b3c","line":24,"range":{"start_line":24,"start_character":36,"end_line":24,"end_character":38},"in_reply_to":"ad354090_f1198a58","updated":"2021-06-07 11:30:41.000000000","message":"Ack","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e0d6b4aefa0e266f726fb4d860f00e454b5b6148","unresolved":true,"context_lines":[{"line_number":40,"context_line":"a volume type that is replicated, then it\u0027s the operator\u0027s responsibility"},{"line_number":41,"context_line":"to make sure that volume type is mapped to a backend that is set up to"},{"line_number":42,"context_line":"do replication."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"2.If we could come up with a way to report the backend info(which includes"},{"line_number":45,"context_line":"replication capability)back to cinder-API(cinder/volume/api.py)."},{"line_number":46,"context_line":"We could then migrate the volume safely basing on the capability check info"},{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."}],"source_content_type":"text/x-rst","patch_set":2,"id":"300fe0be_6315c968","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":25},"updated":"2020-12-16 23:33:49.000000000","message":"This roughly what needs to happen, but you haven\u0027t described a way to do this.  At the midcycle, Gorka pointed out that a good way to do this would be to model something on the way snapshots are currently handled, namely, they go through the scheduler to find out if the operation will be allowed.  \n\nThese patches may give you some ideas:\n\nCreate snapshot: https://review.opendev.org/c/openstack/cinder/+/509011\nManage snapshot: https://review.opendev.org/c/openstack/cinder/+/538413","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e690990a2ddf8c2aac21d42755d595a7a1cef47a","unresolved":true,"context_lines":[{"line_number":40,"context_line":"a volume type that is replicated, then it\u0027s the operator\u0027s responsibility"},{"line_number":41,"context_line":"to make sure that volume type is mapped to a backend that is set up to"},{"line_number":42,"context_line":"do replication."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"2.If we could come up with a way to report the backend info(which includes"},{"line_number":45,"context_line":"replication capability)back to cinder-API(cinder/volume/api.py)."},{"line_number":46,"context_line":"We could then migrate the volume safely basing on the capability check info"},{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5ab9a7c5_439e44c5","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":25},"in_reply_to":"0bc77cbb_57f7565e","updated":"2021-06-04 13:11:36.000000000","message":"I don\u0027t understand your comment.  The REST API makes a call out to the volume api, where the check is currently being done.  The patches referenced above change code that is called by the REST API (you can tell because they have to add mocks to the REST API unit tests).  They change the code in the volume_api so that instead of calling the volume_rpcapi to do the manage existing snapshot, the code now calls the scheduler_rpcapi to handle it (see https://review.opendev.org/c/openstack/cinder/+/538413/3/cinder/volume/api.py).  What the scheduler manager does is check the backend to see if the operation can be satisfied; if not, it raises an execption; otherwise it calls the volume_rpcapi to manage the existing snapshot (see https://review.opendev.org/c/openstack/cinder/+/538413/3/cinder/scheduler/manager.py).\n\nGorka\u0027s suggestion is that you use a similar flow to determine whether it\u0027s OK to migrate a replicated volume or not.","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"41d5c87a65ecfd5752d3684f474866fbbff092cc","unresolved":true,"context_lines":[{"line_number":40,"context_line":"a volume type that is replicated, then it\u0027s the operator\u0027s responsibility"},{"line_number":41,"context_line":"to make sure that volume type is mapped to a backend that is set up to"},{"line_number":42,"context_line":"do replication."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"2.If we could come up with a way to report the backend info(which includes"},{"line_number":45,"context_line":"replication capability)back to cinder-API(cinder/volume/api.py)."},{"line_number":46,"context_line":"We could then migrate the volume safely basing on the capability check info"},{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."}],"source_content_type":"text/x-rst","patch_set":2,"id":"0bc77cbb_57f7565e","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":25},"in_reply_to":"300fe0be_6315c968","updated":"2021-02-09 17:59:44.000000000","message":"Above snapshot related implementations are done at scheduler-level, where as in our case the call isn\u0027t coming out from API level itself because there is a proper check to restrict(replicated_Status : ENABLED) this operation.","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"ea81ae95919e6b1439809ed546397279e5bea3c2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"a volume type that is replicated, then it\u0027s the operator\u0027s responsibility"},{"line_number":41,"context_line":"to make sure that volume type is mapped to a backend that is set up to"},{"line_number":42,"context_line":"do replication."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"2.If we could come up with a way to report the backend info(which includes"},{"line_number":45,"context_line":"replication capability)back to cinder-API(cinder/volume/api.py)."},{"line_number":46,"context_line":"We could then migrate the volume safely basing on the capability check info"},{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."}],"source_content_type":"text/x-rst","patch_set":2,"id":"f80bb6d3_89c8efac","line":47,"range":{"start_line":43,"start_character":0,"end_line":47,"end_character":25},"in_reply_to":"5ab9a7c5_439e44c5","updated":"2021-06-07 11:30:41.000000000","message":"Hi Brian, thanks for the comments. With reference to the (https://review.opendev.org/c/openstack/cinder/+/538413/3/cinder/volume/api.py) of manage snapshots, sharing my approach in the new patch where the decision to migrate a replicated-volume is taken basing upon the \"replication_status\" that we get exclusively from host service details(svc) in volume/api.py.","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e0d6b4aefa0e266f726fb4d860f00e454b5b6148","unresolved":true,"context_lines":[{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Alternatives"},{"line_number":53,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"73e34113_6ee6c5bb","line":50,"range":{"start_line":50,"start_character":26,"end_line":50,"end_character":31},"updated":"2020-12-16 23:33:49.000000000","message":"their","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"ea81ae95919e6b1439809ed546397279e5bea3c2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"that we got from backend."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"3.At the driver side, we need to have a control to allow or not to allow"},{"line_number":50,"context_line":"the proposed feature from thier respective driver-configuration."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Alternatives"},{"line_number":53,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fcfea7da_fe1a97c7","line":50,"range":{"start_line":50,"start_character":26,"end_line":50,"end_character":31},"in_reply_to":"73e34113_6ee6c5bb","updated":"2021-06-07 11:30:41.000000000","message":"Ack","commit_id":"78726141a0a1d41d4b228d0ba052908e241d1eba"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"693d52a49c7e12880c3ca008129697425d0a4a2b","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"We need to implement a mechanism to check, if the given backend has a"},{"line_number":23,"context_line":"capability to allow migration of replicated-volumes."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"44781c46_28f4d8e8","line":24,"updated":"2021-06-07 16:01:11.000000000","message":"-1: Sorry, but based on the contents of this spec and the proposed patch I believe a lot more detail will be necessary here because:\n\nThe feature cannot be dependent on the operator setting things right in a volume type, support for this feature should be automatically detected by Cinder based on the drivers reported information, and this mechanism must be explained here, even if it\u0027s at a high level.\n\nCinder supports different types of replication, asynchronous and synchronous, and some drivers support only one of them, but other drivers support both depending on how the storage array has been configured and a cinder volume type can allow scheduling volumes to multiple cinder backends.\n\nThis means that if we have something like:\n - cinder with 2 backends (HPE\u0027s 3PAR and IBM Storwize) and both with replication enabled, but one synchronous and the other asynchronous\n\n - a volume type with a single extra spec: `replication_enabled` set to `\u003cis\u003e True`.\n\nThen if we create a volume with this type it may land on any of these 2 backends, but let\u0027s assume it lands on the backend doing synchronous replication. Now if we request it to migrate to the other backend (which is acceptable since it\u0027s the same volume type), which is doing asynchronous replication, then when the operation complete there will be a period of time where the volume is not actually replicated and the operator may not be aware of this.\n\nThis is one of the reasons why it is currently disabled.\n\nWe also have to take into account that two pools from the same storage array may be configured as two different cinder backends, so it\u0027s not so straightforward to tell when it\u0027s the same backend.  This can probably be an acceptable limitation of the implementation (only work for multi-pool backends), but this must be spelled out in the spec and described how we are going to make sure that\u0027s the case.\n\nThis change will affect how the REST API behaves, so it will also require a new API microversion, which is not mentioned in this document.\n\nThat\u0027s why I believe this feature requires to carefully consider the different backends and detail how it\u0027s going to behave.","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"},{"author":{"_account_id":32075,"name":"Amar","display_name":"Amar Rajeev Singuluri","email":"amar.rajeev.singuluri@ibm.com","username":"amar7ibm"},"change_message_id":"02dd71bce6c74041bf17cab15000915ac101e9ea","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"We need to implement a mechanism to check, if the given backend has a"},{"line_number":23,"context_line":"capability to allow migration of replicated-volumes."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f5c98b25_c5db49d8","line":24,"in_reply_to":"44781c46_28f4d8e8","updated":"2021-06-08 13:42:27.000000000","message":"- With new approach we are not using the Extra-spec to decide whether the backend is capable of migrating replicated-volumes.\n\n- In this approach we are making use of Backend Service details , which are updated during Initialization of backend driver.\n- In service details we have the \"replication_status\" attribute of the backend.\n\nBelow are the details of volume service for one backend :-\n\nsvc - \nService(active_backend_id\u003dNone,availability_zone\u003d\u0027nova\u0027,binary\u003d\u0027cinder-volume\u0027,cluster\u003c?\u003e,cluster_name\u003dNone,created_at\u003d2021-06-07T07:23:58Z,deleted\u003dFalse,deleted_at\u003dNone,disabled\u003dFalse,disabled_reason\u003dNone,frozen\u003dFalse,host\u003d\u0027devstack@os2076-pool3\u0027,id\u003d7,modified_at\u003dNone,object_current_version\u003d\u00271.38\u0027,replication_status\u003d\u0027enabled\u0027,report_count\u003d51,rpc_current_version\u003d\u00273.16\u0027,topic\u003d\u0027cinder-volume\u0027,updated_at\u003d2021-06-07T07:33:44Z,uuid\u003d\u00272ab67fef-f7ca-4b54-af16-889dae5c811e\u0027)\n\nBelow is the sample code in \"volume/api.py\" with new approach:-\n\n        replication_status \u003d svc.get(\u0027replication_status\u0027, None)\n        if replication_status \u003d\u003d fields.ReplicationStatus.ENABLED:\n            expected[\u0027replication_status\u0027] \u003d (\n                None,\n                fields.ReplicationStatus.DISABLED,\n                fields.ReplicationStatus.NOT_CAPABLE,\n                fields.ReplicationStatus.ENABLED)","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"53424d6e48cc70afc9e1ecd301ec8b9b5e5ab153","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"We need to implement a mechanism to check, if the given backend has a"},{"line_number":23,"context_line":"capability to allow migration of replicated-volumes."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":"Use Cases"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"00a4f2fe_2b431a66","line":24,"in_reply_to":"f5c98b25_c5db49d8","updated":"2021-06-09 15:57:47.000000000","message":"I fail to see how that resolves the issues I pointed out in my comment, as all it does is allow  the migration to be called, doesn\u0027t mean that there won\u0027t be a period of time when the volume is not fully replicated when changing from sync to async replication.\n\nIn any case, Active-Active deployments would need to be taken into consideration, as they would use the Cluster versioned object instead of the Service one.","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"693d52a49c7e12880c3ca008129697425d0a4a2b","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"none"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"REST API impact"},{"line_number":65,"context_line":"---------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"none"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Security impact"},{"line_number":70,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ee2bf6ec_20edac7d","line":67,"range":{"start_line":64,"start_character":0,"end_line":67,"end_character":4},"updated":"2021-06-07 16:01:11.000000000","message":"Definitely impact, since we are currently rejecting it now.","commit_id":"b9d4456bcec6c05bed466f4ae53e7339dbd4eb65"}]}
