)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"04f39bbf5df0e8cf9ba9441975081545c1528b7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"abcf0dc9_d930abdd","updated":"2024-04-03 14:24:21.000000000","message":"Thanks David for the submission.\n\nI believe the patch still needs some work:\n- It\u0027s missing release notes\n- Should update the RBD driver doc to indicate support for the feature\n- Calls to `copy` should also pass the `data_pool` parameter\n- I believe calls to `copy` also need the parameter.\n- Preferably the backup driver should also include support for this feature to keep both in sync\n\nI also have a couple of questions:\n- Should we check if the pool has the feature enabled or is the resulting error meaningful enough for a system admin to know that Cinder is misconfigured?\n- I know the data_pool parameter was added a very long time ago to the python library, but should we check if the python library version supports it before trying to use it?","commit_id":"c0b2f27cf048afd6f716b638a0156029000ecefe"},{"author":{"_account_id":7130,"name":"David Hill","email":"davidchill@hotmail.com","username":"dhill"},"change_message_id":"23b8cb9f0b120559fe24d3cf41e7b29edef5a607","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f20f411e_c6778c7a","in_reply_to":"abcf0dc9_d930abdd","updated":"2024-04-03 23:03:44.000000000","message":"With the patch we get:\n2024-04-03 13:32:44.951 11 ERROR cinder.volume.manager rbd.OperationNotSupported: [errno 95] RBD operation not supported (error creating image)\n2024-04-03 13:32:44.951 11 ERROR cinder.volume.manager \n\nbut customer forgot to set rbd_data_pool to the expected value... this means the rbd_data_pool\u003dNone doesn\u0027t appear to work like I expected it to work with librados.\n\n\nWithout the patch, customer\u0027s getting this error:\n     \u0027  File \"rbd.pyx\", line 630, in rbd.RBD.create\\n\u0027, \u0027rbd.InvalidArgument: [errno 22] RBD invalid argument (error creating image)\\n\u0027]","commit_id":"c0b2f27cf048afd6f716b638a0156029000ecefe"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e9bc7dbe0661359a7f7dd1f4d17725dcf0e019d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a60aaed1_b63c90b1","in_reply_to":"f20f411e_c6778c7a","updated":"2026-10-19 09:56:59.000000000","message":"current addressed/status\n- release note and updated the volume-driver documentation.\n- passed data_pool to the relevant copy and clone paths.\n- added unit-test coverage.\n\n\n- No explicit pool-feature check was added. As shown in Dave’s testing, librbd returns `Operation not supported` when an EC pool is incorrectly configured as rbd_pool without rbd_data_pool.\n\n- No runtime version check was added for the data_pool parameter. Cinder relies on its supported Ceph/librbd deployment version to provide this API\n\n\nalso, moved backup-driver support to a separate follow-up patch so this patch remains focused on the base volume-driver support. \nBackup support will be tested in that patch.","commit_id":"c0b2f27cf048afd6f716b638a0156029000ecefe"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fb9972432b9865c2f0b437d0f1f9608924909bd7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"91dda53c_251e7494","updated":"2025-05-14 15:05:55.000000000","message":"I\u0027m not really convinced with the IMPACT of the changes and the documentation we have currently.\na. this patch doesn\u0027t mention the use case currently, do we want to save space by keeping RBD images in a data pool (erasure coded) and metadata in volumes pool (replicated), what we will do about the legacy images and how do we migrate them?\nb. erasure coded pools require parity calculation which is CPU intensive so we also need to document the deployment impact on the ceph cluster side.\nIf a storage node hosting OSDs with data pools, we need to allocate more memory and CPUs to it for the parity calculation.\nc. There is no performance calculation i can find, are erasure coded pools really worth the performance drop compared to replicated pools?","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"341cd251be356b8059b3f855e83f00e5598ee2ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9d5a6f86_2d104ff4","updated":"2026-08-19 15:46:02.000000000","message":"Just to highlight from Glance’s perspective:\n\nFor the Cinder↔Glance RBD clone path this is not enough:\n\n- Volume → image via clone + add_location: dest is Glance’s images pool, so data_pool must be Glance’s rbd_store_data_pool (images_data), not rbd_data_pool.\n\nToday copy_volume_to_image still streams through Glance, so Glance EC already applies. A later clone+add_location shortcut would need Glance’s data pool on that clone.","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"1538db9cca185c8d8de773e52fb974b26c5714a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"a4b34b7b_a186227c","in_reply_to":"91dda53c_251e7494","updated":"2025-05-15 09:59:46.000000000","message":"a. The use case is straightforward, in Ceph RBD if you want to use an erasure-coded pool for an image you MUST specify that as the data pool for the image, if you try to specify it as the pool for the image you will get an ``Invalid Argument`` error back, the pool on an image MUST be a replicated pool.\n\nThe data pool ONLY holds data, no operations are performed against the pool when managing/doing operations on the image. The pool for the image (where metadata is stored if a data pool is specified) is where you list, retrieve info and perform *all* other operations against the image, so there is no change there.\n\nIn Cinder this is pretty small, pass ``data_pool`` as ``None`` or as the name of a pool when creating, copying, cloning or importing to an image, and some extra logic to save/retrieve the data pool in the location info for a volume.\n\nFor the Ceph backup driver the use case is more obvious, storing large amounts of cold data is better if we can set a data pool and thus use erasure coding to lower storage costs.\n\nb. That is true, using an erasure coded pool comes with more considerations on CPU utilization and also the block.db usage will increase on the Ceph OSD side, but I fail to see how that is relevant for Cinder as that is something the operator of the Ceph cluster should be planning/aware of.\n\nc. Same as above, I don\u0027t see the relevance to Cinder. Do we provide performance charts and recommendations for all drivers somewhere? I can be more clear with a warning/note in the documentation about erasure coding, but a data pool can also be used for other cases than erasure coding (even though I myself don\u0027t see why one would need that).\n\nThis simply bridges a cap in RBD drivers to support the RBD data pool concept that we do not support today, that we support erasure coding by adding that support is a plus.","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":35789,"name":"Yuta Kambe","email":"yuta.kambe@fujitsu.com","username":"yuta.kambe@fujitsu.com"},"change_message_id":"3b7cde4a91a109e5844d951df181d60686210d39","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"fcfde9bd_79220bd4","in_reply_to":"a4b34b7b_a186227c","updated":"2025-08-01 09:31:09.000000000","message":"@rajatdhasmana@gmail.com\nCould you please let me know if there are any remaining concerns regarding this patch?\n\nWith support for Erasure Coded Pools, users will be able to use a cluster as a backend for Cinder with lower costs, such as for cold storage.\nI believe this would be a positive development for users.\n\nThe Ceph cluster I built, it was initially operated with an Erasure Coded Pool, but due to issues I posted on the mailing list [1], I had to switch to a Replicated Pool.\n\nFor legacy images, if users want to change an existing Replicated Pool to an Erasure Coded Pool, a pool migration will be necessary.\nThe Ceph RBD driver supports Cinder\u0027s Volume migration feature [2], but is this not sufficient?\n\nI would like to move this patch forward.\n\n[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/CYA234ZWGXEX7HWIZ2YZMEWD64XNRL2R/#CYA234ZWGXEX7HWIZ2YZMEWD64XNRL2R\n[2] https://docs.openstack.org/cinder/latest/admin/volume-migration.html","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e9bc7dbe0661359a7f7dd1f4d17725dcf0e019d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"148f3c1e_e42385ce","in_reply_to":"fcfde9bd_79220bd4","updated":"2026-10-19 09:56:59.000000000","message":"I have resurrected this patch, and tested\n- EC-backed volume creation keeps RBD metadata in the replicated rbd_pool and stores object data in rbd_data_pool correctly\n- enabling rbd_data_pool do not convert existing volumes, it applies only to newly created volumes\n- updated docs with the use case, configuration, deployment considerations, EC limitations, and performance considerations.\n\nas the performance impact depends on the ceph deployment and workload, so no perf benchmark has been added\n\nretype/migration to change the data pool is planned as follow-up work.","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"bda0a7a65c6f6a57c4548350e3a5214d65a349f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8f826712_004cc086","updated":"2026-10-19 06:36:56.000000000","message":"recheck\n\n`tempest.scenario.test_volume_migrate_attached.TestVolumeMigrateRetypeAttached`\n\nunrelated tempest-slow-py3\n\n```\ntempest.lib.exceptions.SSHExecCommandFailed: Command \u0027set -eu -o pipefail; PATH\u003d$PATH:/sbin:/usr/sbin; sudo mount /dev/vdb /mnt/vdb\u0027, exit status: 255, stderr:\nmount: mounting /dev/vdb on /mnt/vdb failed: Device or resource busy\n\nstdout:\n\n\n```","commit_id":"72103031cec696f46644476d411c50801b456a10"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"df71a4ce218fcfe28209cb22facc44db4699ac5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"5d876bbf_5cfd717f","updated":"2026-10-07 10:57:00.000000000","message":"recheck\n\nunrelated timedout\n```\n2026-10-06 11:30:36.128023 | controller | {2} setUpClass (tempest.api.compute.images.test_images_oneserver_negative.ImagesOneServerNegativeTestJSON) [0.000000s] ... FAILED\n2026-10-06 11:30:36.583248 | controller | Early failure in job, matched regex \"\\{\\d+\\} (.*?) \\[[\\d\\.]+s\\] \\.\\.\\. FAILED\"\n2026-10-06 11:30:36.128066 | controller |\n2026-10-06 11:30:36.128122 | controller | Captured traceback:\n2026-10-06 11:30:36.128234 | controller | ~~~~~~~~~~~~~~~~~~~\n2026-10-06 11:30:36.128245 | controller |     Traceback (most recent call last):\n2026-10-06 11:30:36.128258 | controller |\n2026-10-06 11:30:36.128266 | controller |       File \"/opt/stack/tempest/.tox/tempest/lib/python3.13/site-packages/urllib3/connectionpool.py\", line 540, in _make_request\n2026-10-06 11:30:36.128274 | controller |     response \u003d conn.getresponse()\n2026-10-06 11:30:36.128282 | controller |\n2026-10-06 11:30:36.128289 | controller |       File \"/opt/stack/tempest/.tox/tempest/lib/python3.13/site-packages/urllib3/connection.py\", line 638, in getresponse\n2026-10-06 11:30:36.128297 | controller |     httplib_response \u003d super().getresponse()\n2026-10-06 11:30:36.128304 | controller |\n2026-10-06 11:30:36.128312 | controller |       File \"/usr/lib/python3.13/http/client.py\", line 1459, in getresponse\n2026-10-06 11:30:36.128320 | controller |     response.begin()\n2026-10-06 11:30:36.128327 | controller |     ~~~~~~~~~~~~~~^^\n2026-10-06 11:30:36.128335 | controller |\n2026-10-06 11:30:36.128342 | controller |       File \"/usr/lib/python3.13/http/client.py\", line 336, in begin\n2026-10-06 11:30:36.128350 | controller |     version, status, reason \u003d self._read_status()\n2026-10-06 11:30:36.128379 | controller |                               ~~~~~~~~~~~~~~~~~^^\n2026-10-06 11:30:36.128389 | controller |\n2026-10-06 11:30:36.128396 | controller |       File \"/usr/lib/python3.13/http/client.py\", line 297, in _read_status\n2026-10-06 11:30:36.128404 | controller |     line \u003d str(self.fp.readline(_MAXLINE + 1), \"iso-8859-1\")\n2026-10-06 11:30:36.128411 | controller |                ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^\n2026-10-06 11:30:36.128418 | controller |\n2026-10-06 11:30:36.128426 | controller |       File \"/usr/lib/python3.13/socket.py\", line 719, in readinto\n2026-10-06 11:30:36.128433 | controller |     return self._sock.recv_into(b)\n2026-10-06 11:30:36.128440 | controller |            ~~~~~~~~~~~~~~~~~~~~^^^\n2026-10-06 11:30:36.128447 | controller |\n2026-10-06 11:30:36.128455 | controller |       File \"/usr/lib/python3.13/ssl.py\", line 1304, in recv_into\n2026-10-06 11:30:36.128462 | controller |     return self.read(nbytes, buffer)\n2026-10-06 11:30:36.128469 | controller |            ~~~~~~~~~^^^^^^^^^^^^^^^^\n2026-10-06 11:30:36.128476 | controller |\n2026-10-06 11:30:36.128484 | controller |       File \"/usr/lib/python3.13/ssl.py\", line 1138, in read\n2026-10-06 11:30:36.128491 | controller |     return self._sslobj.read(len, buffer)\n2026-10-06 11:30:36.128505 | controller |            ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^\n2026-10-06 11:30:36.128513 | controller |\n2026-10-06 11:30:36.128521 | controller |     TimeoutError: The read operation timed out\n2026-10-06 11:30:36.128528 | controller |\n```","commit_id":"72103031cec696f46644476d411c50801b456a10"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"b71ce6806d2eef1f1f817fee40deb3e18a75edf1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ca918075_314d1bcd","updated":"2026-10-20 06:56:37.000000000","message":"The general data-pool plumbing looks good, but the same-metadata-pool migration shortcut can incorrectly skip migration when the destination uses a different data pool. That needs to be handled before this is safe to merge","commit_id":"e5b7a96040df2d78ff8c437e24e80939b551d2a6"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"a3b3dfb2de8f027c4942805d632a4ef6d3ec921c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"f4c4def6_955adfe9","updated":"2026-10-19 13:37:33.000000000","message":"recheck","commit_id":"e5b7a96040df2d78ff8c437e24e80939b551d2a6"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1e9d11f7e73e96dad1b52b00a5481ddd0c25310a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8c1ddd08_c75e707a","updated":"2026-10-20 05:53:11.000000000","message":"recheck \n`cinder-plugin-ceph-tempest-datapool` timedout","commit_id":"e5b7a96040df2d78ff8c437e24e80939b551d2a6"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"31a5ec5a47e382d73d4a3c638b509fd7cb827fcf","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"37ed9f38_70a61a00","in_reply_to":"ca918075_314d1bcd","updated":"2026-10-21 11:14:21.000000000","message":"ack thanks\nunresolving - so I can track it. properly","commit_id":"e5b7a96040df2d78ff8c437e24e80939b551d2a6"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eb0670f749ab5749335d6505cba3b9dfd200caff","unresolved":true,"context_lines":[{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"        return volume_update"},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    def _get_default_stripe_unit(self) -\u003e int:"},{"line_number":1170,"context_line":"        \"\"\"Get the default stripe unit.\"\"\""},{"line_number":1171,"context_line":"        return self.configuration.rbd_store_chunk_size * units.Mi"},{"line_number":1172,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"8cb2e516_bf255703","line":1169,"updated":"2026-09-10 14:57:55.000000000","message":"I\u0027m not sure if this needs to be a method, but it may as well be a @property if so.","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e9bc7dbe0661359a7f7dd1f4d17725dcf0e019d","unresolved":false,"context_lines":[{"line_number":1166,"context_line":""},{"line_number":1167,"context_line":"        return volume_update"},{"line_number":1168,"context_line":""},{"line_number":1169,"context_line":"    def _get_default_stripe_unit(self) -\u003e int:"},{"line_number":1170,"context_line":"        \"\"\"Get the default stripe unit.\"\"\""},{"line_number":1171,"context_line":"        return self.configuration.rbd_store_chunk_size * units.Mi"},{"line_number":1172,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"d151499c_78a30511","line":1169,"in_reply_to":"8cb2e516_bf255703","updated":"2026-10-19 09:56:59.000000000","message":"Done","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eb0670f749ab5749335d6505cba3b9dfd200caff","unresolved":true,"context_lines":[{"line_number":1170,"context_line":"        \"\"\"Get the default stripe unit.\"\"\""},{"line_number":1171,"context_line":"        return self.configuration.rbd_store_chunk_size * units.Mi"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    def _get_order_from_stripe_unit(self, stripe_unit: int) -\u003e int:"},{"line_number":1174,"context_line":"        \"\"\"Get the order from stripe unit.\"\"\""},{"line_number":1175,"context_line":"        return int(math.log(stripe_unit, 2))"},{"line_number":1176,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"8ef6eb40_d612563c","line":1173,"updated":"2026-09-10 14:57:55.000000000","message":"Same re: @property","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"4e9bc7dbe0661359a7f7dd1f4d17725dcf0e019d","unresolved":true,"context_lines":[{"line_number":1170,"context_line":"        \"\"\"Get the default stripe unit.\"\"\""},{"line_number":1171,"context_line":"        return self.configuration.rbd_store_chunk_size * units.Mi"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    def _get_order_from_stripe_unit(self, stripe_unit: int) -\u003e int:"},{"line_number":1174,"context_line":"        \"\"\"Get the order from stripe unit.\"\"\""},{"line_number":1175,"context_line":"        return int(math.log(stripe_unit, 2))"},{"line_number":1176,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"8b51907a_c2516b5e","line":1173,"in_reply_to":"8ef6eb40_d612563c","updated":"2026-10-19 09:56:59.000000000","message":"`_get_order_from_stripe_unit` takes stripe_unit as arg, so it should remain method.\n_default_stripe_unit has no required input- so there changed to property.","commit_id":"13fe212476c0f93f4b0e92719e69fc42a8ad5fbf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":296,"context_line":"    fsid: str"},{"line_number":297,"context_line":"    user: str"},{"line_number":298,"context_line":"    pool: str"},{"line_number":299,"context_line":"    data_pool: typing.Optional[str] \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    @staticmethod"},{"line_number":302,"context_line":"    def from_str(location_info: str) -\u003e \u0027RBDLocationInfo\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"8e87f9ac_e332598c","line":299,"range":{"start_line":299,"start_character":15,"end_line":299,"end_character":30},"updated":"2026-10-28 11:57:18.000000000","message":"```suggestion\n    data_pool: Optional[str] \u003d None\n```","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5f8165b361173cfdd63bdeee3b67c7342b0a3127","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    fsid: str"},{"line_number":297,"context_line":"    user: str"},{"line_number":298,"context_line":"    pool: str"},{"line_number":299,"context_line":"    data_pool: typing.Optional[str] \u003d None"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    @staticmethod"},{"line_number":302,"context_line":"    def from_str(location_info: str) -\u003e \u0027RBDLocationInfo\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"b0015fb7_783e97a8","line":299,"range":{"start_line":299,"start_character":15,"end_line":299,"end_character":30},"in_reply_to":"8e87f9ac_e332598c","updated":"2026-10-30 04:11:14.000000000","message":"Done","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":306,"context_line":"            \u003ccluster\u003e:\u003cconfig\u003e:\u003cfsid\u003e:\u003cuser\u003e:\u003cpool\u003e[:\u003cdata_pool\u003e]"},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        parts \u003d str(location_info).split(\":\")"},{"line_number":309,"context_line":"        if len(parts) not in [5, 6]:"},{"line_number":310,"context_line":"            raise ValueError(\u0027Invalid location_info\u0027)"},{"line_number":311,"context_line":"        return RBDLocationInfo(*parts)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"c8af716e_efa16e92","line":309,"range":{"start_line":309,"start_character":29,"end_line":309,"end_character":35},"updated":"2026-10-28 11:57:18.000000000","message":"```suggestion\n        if len(parts) not in (5, 6):\n```","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5f8165b361173cfdd63bdeee3b67c7342b0a3127","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            \u003ccluster\u003e:\u003cconfig\u003e:\u003cfsid\u003e:\u003cuser\u003e:\u003cpool\u003e[:\u003cdata_pool\u003e]"},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        parts \u003d str(location_info).split(\":\")"},{"line_number":309,"context_line":"        if len(parts) not in [5, 6]:"},{"line_number":310,"context_line":"            raise ValueError(\u0027Invalid location_info\u0027)"},{"line_number":311,"context_line":"        return RBDLocationInfo(*parts)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"8e08d128_bbd9dd81","line":309,"range":{"start_line":309,"start_character":29,"end_line":309,"end_character":35},"in_reply_to":"c8af716e_efa16e92","updated":"2026-10-30 04:11:14.000000000","message":"Done","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":897,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def _get_rbd_data_pool("},{"line_number":900,"context_line":"            self, client: RADOSClient, volume: str) -\u003e typing.Optional[str]:"},{"line_number":901,"context_line":"        \"\"\"Get the data pool name of a RBD image."},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        Return the data pool name if the image has RBD_FEATURE_DATA_POOL;"}],"source_content_type":"text/x-python","patch_set":22,"id":"788b0a96_fbc60938","line":900,"range":{"start_line":900,"start_character":55,"end_line":900,"end_character":62},"updated":"2026-10-28 11:57:18.000000000","message":"```suggestion\n            self, client: RADOSClient, volume: str) -\u003e Optional[str]:\n```","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5f8165b361173cfdd63bdeee3b67c7342b0a3127","unresolved":false,"context_lines":[{"line_number":897,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"    def _get_rbd_data_pool("},{"line_number":900,"context_line":"            self, client: RADOSClient, volume: str) -\u003e typing.Optional[str]:"},{"line_number":901,"context_line":"        \"\"\"Get the data pool name of a RBD image."},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        Return the data pool name if the image has RBD_FEATURE_DATA_POOL;"}],"source_content_type":"text/x-python","patch_set":22,"id":"9434eec6_50d965fb","line":900,"range":{"start_line":900,"start_character":55,"end_line":900,"end_character":62},"in_reply_to":"788b0a96_fbc60938","updated":"2026-10-30 04:11:14.000000000","message":"Done","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":1243,"context_line":"            size \u003d int(volume.size) * units.Gi"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"            self.RBDProxy().create("},{"line_number":1246,"context_line":"                client.ioctx, volume.name, size,"},{"line_number":1247,"context_line":"                order, old_format\u003dFalse, features\u003dclient.features,"},{"line_number":1248,"context_line":"                data_pool\u003dself.configuration.rbd_data_pool)"},{"line_number":1249,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9b20abfe_2353c585","line":1246,"range":{"start_line":1246,"start_character":16,"end_line":1246,"end_character":48},"updated":"2026-10-28 11:57:18.000000000","message":"This reduces readability","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5f8165b361173cfdd63bdeee3b67c7342b0a3127","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"            size \u003d int(volume.size) * units.Gi"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"            self.RBDProxy().create("},{"line_number":1246,"context_line":"                client.ioctx, volume.name, size,"},{"line_number":1247,"context_line":"                order, old_format\u003dFalse, features\u003dclient.features,"},{"line_number":1248,"context_line":"                data_pool\u003dself.configuration.rbd_data_pool)"},{"line_number":1249,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"773ca050_5b020c35","line":1246,"range":{"start_line":1246,"start_character":16,"end_line":1246,"end_character":48},"in_reply_to":"9b20abfe_2353c585","updated":"2026-10-30 04:11:14.000000000","message":"Done","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":1308,"context_line":"                self._get_stripe_unit(src_client.ioctx, src_image))"},{"line_number":1309,"context_line":"            with RADOSClient(self) as dest_client:"},{"line_number":1310,"context_line":"                self.RBDProxy().clone("},{"line_number":1311,"context_line":"                    src_client.ioctx, src_image, src_snap,"},{"line_number":1312,"context_line":"                    dest_client.ioctx, vol_name,"},{"line_number":1313,"context_line":"                    features\u003dsrc_client.features, order\u003dorder,"},{"line_number":1314,"context_line":"                    data_pool\u003dself.configuration.rbd_data_pool)"}],"source_content_type":"text/x-python","patch_set":22,"id":"971a4043_05a401e8","line":1311,"range":{"start_line":1311,"start_character":20,"end_line":1311,"end_character":57},"updated":"2026-10-28 11:57:18.000000000","message":"This reduces readability","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5f8165b361173cfdd63bdeee3b67c7342b0a3127","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"                self._get_stripe_unit(src_client.ioctx, src_image))"},{"line_number":1309,"context_line":"            with RADOSClient(self) as dest_client:"},{"line_number":1310,"context_line":"                self.RBDProxy().clone("},{"line_number":1311,"context_line":"                    src_client.ioctx, src_image, src_snap,"},{"line_number":1312,"context_line":"                    dest_client.ioctx, vol_name,"},{"line_number":1313,"context_line":"                    features\u003dsrc_client.features, order\u003dorder,"},{"line_number":1314,"context_line":"                    data_pool\u003dself.configuration.rbd_data_pool)"}],"source_content_type":"text/x-python","patch_set":22,"id":"9bd72857_1ace36fa","line":1311,"range":{"start_line":1311,"start_character":20,"end_line":1311,"end_character":57},"in_reply_to":"971a4043_05a401e8","updated":"2026-10-30 04:11:14.000000000","message":"Done","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3403263569ec1cd978b2bcccfa6e4e1044615ca9","unresolved":true,"context_lines":[{"line_number":2248,"context_line":"            msg \u003d _(\u0027Replication and Multiattach are mutually exclusive.\u0027)"},{"line_number":2249,"context_line":"            raise exception.ManageExistingVolumeTypeMismatch(reason\u003dmsg)"},{"line_number":2250,"context_line":"        # Raise an exception if we didn\u0027t find a suitable rbd image."},{"line_number":2251,"context_line":"        with RADOSClient(self) as client:"},{"line_number":2252,"context_line":"            rbd_name \u003d existing_ref[\u0027source-name\u0027]"},{"line_number":2253,"context_line":"            self.RBDProxy().rename(client.ioctx,"},{"line_number":2254,"context_line":"                                   utils.convert_str(rbd_name),"},{"line_number":2255,"context_line":"                                   volume.name)"},{"line_number":2256,"context_line":"        return self._setup_volume(volume)"},{"line_number":2257,"context_line":""},{"line_number":2258,"context_line":"    def manage_existing_get_size(self,"},{"line_number":2259,"context_line":"                                 volume: Volume,"}],"source_content_type":"text/x-python","patch_set":22,"id":"b1bb65e2_da90e4ef","line":2256,"range":{"start_line":2251,"start_character":0,"end_line":2256,"end_character":41},"updated":"2026-10-28 11:57:18.000000000","message":"Have you tested manage_existing with EC pools? I\u0027m not sure whether this works without modification.","commit_id":"a156483bfddc5edfd5fad804c2d7f8961f0dc840"}]}
