)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5c4a5275761909914c17548f9ccc3ee1ed935576","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7fea781d_1f8408b8","updated":"2026-08-26 12:05:27.000000000","message":"Changes looks good but incorporate the review comments provided by Carloss","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"d3565c11f95536df27523b906c261adbe82effa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9dc70b8f_a32d142a","updated":"2026-06-16 09:49:18.000000000","message":"Thanks Volodymyr, I tested this functionality and was able to use it as specified.","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"abe75503_0effc45f","updated":"2026-07-08 19:30:51.000000000","message":"Thanks for working on this change and I apologize for the time I took to review. Please take a look at the comments inline","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8b8763b7_c9f0507d","in_reply_to":"7fea781d_1f8408b8","updated":"2026-09-16 00:21:58.000000000","message":"Done","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"36024dcb8f8a72ccec5e20effcc1bc5e553faaf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"740139a3_5cd40a80","updated":"2026-09-16 18:30:32.000000000","message":"Thank you for addressing the comments - please take a look at the comments inline","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ec4faad3392261f0fdb77c61a2f3b544c8add047","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0955461a_1847c244","updated":"2026-09-22 14:22:19.000000000","message":"LGTM, thank you!","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4b7e6e36a6e33bb38a5f94a04420d5b6d08e9843","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"c1169be9_7a392659","updated":"2026-10-02 17:08:31.000000000","message":"Thanks for clarifying. I am good with the questions I had. LGTM. Also starting the workflow since Carlos already has a +2 on this.","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"474b9cc605bb6c473a67004690223b773fb7066f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"903e2744_f54fb5f1","updated":"2026-10-02 15:40:16.000000000","message":"Thanks for the contribution. The overall code looks good and polished to me. I may not understand the pool strategy on VAST but have some questions around how ensure_shares would work with tenant IDs. Please take a look at my comments.","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bec6e227eac4e9eb02527b61ec62f513f34b60bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"5e2cda43_50fe5c37","updated":"2026-10-03 05:38:24.000000000","message":"recheck\n\nstalled in the gate","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"}],"doc/source/configuration/shared-file-systems/drivers/vastdata_driver.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"542dab08de9cf932298f41242aca4bd877668aeb","unresolved":true,"context_lines":[{"line_number":104,"context_line":"    openstack share create NFS ${size} --name ${share_name} --share-type ${share_type_name}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Multitenancy support via Share Types"},{"line_number":107,"context_line":"--------------------------------------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"The VAST Share Driver supports multitenancy by allowing different share types"},{"line_number":110,"context_line":"to use different VIP pools. This enables tenant isolation and provides"}],"source_content_type":"text/x-rst","patch_set":8,"id":"29914443_07186c85","line":107,"range":{"start_line":107,"start_character":36,"end_line":107,"end_character":50},"updated":"2025-11-03 21:21:09.000000000","message":"nit: limit underline to text","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"84225bb41e9b2c27aa4c2e9c1e3c0c01cf27e66e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    openstack share create NFS ${size} --name ${share_name} --share-type ${share_type_name}"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Multitenancy support via Share Types"},{"line_number":107,"context_line":"--------------------------------------------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"The VAST Share Driver supports multitenancy by allowing different share types"},{"line_number":110,"context_line":"to use different VIP pools. This enables tenant isolation and provides"}],"source_content_type":"text/x-rst","patch_set":8,"id":"6d873696_26b3988b","line":107,"range":{"start_line":107,"start_character":36,"end_line":107,"end_character":50},"in_reply_to":"29914443_07186c85","updated":"2026-02-02 02:54:28.000000000","message":"Done","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"}],"manila/share/drivers/vastdata/driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"542dab08de9cf932298f41242aca4bd877668aeb","unresolved":true,"context_lines":[{"line_number":172,"context_line":"            \"Capacity,physical_space_in_use\","},{"line_number":173,"context_line":"        ]"},{"line_number":174,"context_line":"        metrics \u003d self.rest.capacity_metrics.get(metrics_list)"},{"line_number":175,"context_line":"        data \u003d dict("},{"line_number":176,"context_line":"            share_backend_name\u003dself._backend_name,"},{"line_number":177,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":178,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":179,"context_line":"            storage_protocol\u003d\"NFS\","},{"line_number":180,"context_line":"            data_reduction\u003dmetrics.drr,"},{"line_number":181,"context_line":"            total_capacity_gb\u003dfloat(metrics.logical_space) / units.Gi,"},{"line_number":182,"context_line":"            free_capacity_gb\u003dfloat("},{"line_number":183,"context_line":"                metrics.logical_space - metrics.logical_space_in_use"},{"line_number":184,"context_line":"            )"},{"line_number":185,"context_line":"            / units.Gi,"},{"line_number":186,"context_line":"            provisioned_capacity_gb\u003dfloat("},{"line_number":187,"context_line":"                metrics.logical_space_in_use) / units.Gi,"},{"line_number":188,"context_line":"            snapshot_support\u003dTrue,"},{"line_number":189,"context_line":"            create_share_from_snapshot_support\u003dFalse,"},{"line_number":190,"context_line":"            mount_snapshot_support\u003dFalse,"},{"line_number":191,"context_line":"            revert_to_snapshot_support\u003dFalse,"},{"line_number":192,"context_line":"        )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        super()._update_share_stats(data)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"87824c08_dc04bc6d","line":192,"range":{"start_line":175,"start_character":8,"end_line":192,"end_character":9},"updated":"2025-11-03 21:21:09.000000000","message":"Other drivers here report each pool to the Manila Scheduler, and include a \"pool_name\" that share type extra-specs can match. You\u0027re choosing to implement a scoped extra-spec to specify pools. Have you identified any advantages to doing this?\n\nBy reporting the pool information to the Scheduler, you enable cloud administrators to discover the pool names that can then be mapped to specific share types if necessary.","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"84225bb41e9b2c27aa4c2e9c1e3c0c01cf27e66e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            \"Capacity,physical_space_in_use\","},{"line_number":173,"context_line":"        ]"},{"line_number":174,"context_line":"        metrics \u003d self.rest.capacity_metrics.get(metrics_list)"},{"line_number":175,"context_line":"        data \u003d dict("},{"line_number":176,"context_line":"            share_backend_name\u003dself._backend_name,"},{"line_number":177,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":178,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":179,"context_line":"            storage_protocol\u003d\"NFS\","},{"line_number":180,"context_line":"            data_reduction\u003dmetrics.drr,"},{"line_number":181,"context_line":"            total_capacity_gb\u003dfloat(metrics.logical_space) / units.Gi,"},{"line_number":182,"context_line":"            free_capacity_gb\u003dfloat("},{"line_number":183,"context_line":"                metrics.logical_space - metrics.logical_space_in_use"},{"line_number":184,"context_line":"            )"},{"line_number":185,"context_line":"            / units.Gi,"},{"line_number":186,"context_line":"            provisioned_capacity_gb\u003dfloat("},{"line_number":187,"context_line":"                metrics.logical_space_in_use) / units.Gi,"},{"line_number":188,"context_line":"            snapshot_support\u003dTrue,"},{"line_number":189,"context_line":"            create_share_from_snapshot_support\u003dFalse,"},{"line_number":190,"context_line":"            mount_snapshot_support\u003dFalse,"},{"line_number":191,"context_line":"            revert_to_snapshot_support\u003dFalse,"},{"line_number":192,"context_line":"        )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        super()._update_share_stats(data)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"8282e761_800921de","line":192,"range":{"start_line":175,"start_character":8,"end_line":192,"end_character":9},"in_reply_to":"42163834_dc3b441e","updated":"2026-02-02 02:54:28.000000000","message":"I clarified if we have option of logical separation that we can represent as \"pool\" and we don\u0027t. \nSo for now better to stick to one \"default\" pool.","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"4ad46bfa1fd6c393829ccf745dcaee461617189a","unresolved":true,"context_lines":[{"line_number":172,"context_line":"            \"Capacity,physical_space_in_use\","},{"line_number":173,"context_line":"        ]"},{"line_number":174,"context_line":"        metrics \u003d self.rest.capacity_metrics.get(metrics_list)"},{"line_number":175,"context_line":"        data \u003d dict("},{"line_number":176,"context_line":"            share_backend_name\u003dself._backend_name,"},{"line_number":177,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":178,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":179,"context_line":"            storage_protocol\u003d\"NFS\","},{"line_number":180,"context_line":"            data_reduction\u003dmetrics.drr,"},{"line_number":181,"context_line":"            total_capacity_gb\u003dfloat(metrics.logical_space) / units.Gi,"},{"line_number":182,"context_line":"            free_capacity_gb\u003dfloat("},{"line_number":183,"context_line":"                metrics.logical_space - metrics.logical_space_in_use"},{"line_number":184,"context_line":"            )"},{"line_number":185,"context_line":"            / units.Gi,"},{"line_number":186,"context_line":"            provisioned_capacity_gb\u003dfloat("},{"line_number":187,"context_line":"                metrics.logical_space_in_use) / units.Gi,"},{"line_number":188,"context_line":"            snapshot_support\u003dTrue,"},{"line_number":189,"context_line":"            create_share_from_snapshot_support\u003dFalse,"},{"line_number":190,"context_line":"            mount_snapshot_support\u003dFalse,"},{"line_number":191,"context_line":"            revert_to_snapshot_support\u003dFalse,"},{"line_number":192,"context_line":"        )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        super()._update_share_stats(data)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f5724c48_5b0d8b33","line":192,"range":{"start_line":175,"start_character":8,"end_line":192,"end_character":9},"in_reply_to":"87824c08_dc04bc6d","updated":"2026-01-16 01:10:29.000000000","message":"Thanks Goutham. \nCould you explain what is a benefit of separated pools?\nVAST doesn\u0027 have option to report usage by pools. It is one total_capacity_gb per whole cluster.","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8e68c63259a72b6c7fe6b3e26ff9d37babdfd8a5","unresolved":true,"context_lines":[{"line_number":172,"context_line":"            \"Capacity,physical_space_in_use\","},{"line_number":173,"context_line":"        ]"},{"line_number":174,"context_line":"        metrics \u003d self.rest.capacity_metrics.get(metrics_list)"},{"line_number":175,"context_line":"        data \u003d dict("},{"line_number":176,"context_line":"            share_backend_name\u003dself._backend_name,"},{"line_number":177,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":178,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":179,"context_line":"            storage_protocol\u003d\"NFS\","},{"line_number":180,"context_line":"            data_reduction\u003dmetrics.drr,"},{"line_number":181,"context_line":"            total_capacity_gb\u003dfloat(metrics.logical_space) / units.Gi,"},{"line_number":182,"context_line":"            free_capacity_gb\u003dfloat("},{"line_number":183,"context_line":"                metrics.logical_space - metrics.logical_space_in_use"},{"line_number":184,"context_line":"            )"},{"line_number":185,"context_line":"            / units.Gi,"},{"line_number":186,"context_line":"            provisioned_capacity_gb\u003dfloat("},{"line_number":187,"context_line":"                metrics.logical_space_in_use) / units.Gi,"},{"line_number":188,"context_line":"            snapshot_support\u003dTrue,"},{"line_number":189,"context_line":"            create_share_from_snapshot_support\u003dFalse,"},{"line_number":190,"context_line":"            mount_snapshot_support\u003dFalse,"},{"line_number":191,"context_line":"            revert_to_snapshot_support\u003dFalse,"},{"line_number":192,"context_line":"        )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        super()._update_share_stats(data)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"42163834_dc3b441e","line":192,"range":{"start_line":175,"start_character":8,"end_line":192,"end_character":9},"in_reply_to":"f5724c48_5b0d8b33","updated":"2026-01-16 19:09:02.000000000","message":"I see the same concern with CephFS. Space accounting is across the storage cluster rather than specific pools - but reporting pools individually with cluster capacity stats isn\u0027t really going to break anything. \n\nThe biggest benefit I\u0027m thinking of is cloud administrators knowing what vippool names exist. If the driver reports these to manila, they\u0027ll see it when they use: \"openstack share pool list --detail\".","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"474b9cc605bb6c473a67004690223b773fb7066f","unresolved":true,"context_lines":[{"line_number":358,"context_line":"    def _get_tenant_id_for_share(self, share):"},{"line_number":359,"context_line":"        return self._get_vip_pool_for_share(share).tenant_id"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _ensure_share(self, share):"},{"line_number":362,"context_line":"        share_proto \u003d share[\"share_proto\"]"},{"line_number":363,"context_line":"        if share_proto !\u003d \"NFS\":"},{"line_number":364,"context_line":"            raise exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":25,"id":"ac9fd7cd_8e56279a","line":361,"updated":"2026-10-02 15:40:16.000000000","message":"Should ensure_share also verify that the existing VAST view belongs to the persisted tenant? If it does not, return an error update for that share?","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4b7e6e36a6e33bb38a5f94a04420d5b6d08e9843","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    def _get_tenant_id_for_share(self, share):"},{"line_number":359,"context_line":"        return self._get_vip_pool_for_share(share).tenant_id"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _ensure_share(self, share):"},{"line_number":362,"context_line":"        share_proto \u003d share[\"share_proto\"]"},{"line_number":363,"context_line":"        if share_proto !\u003d \"NFS\":"},{"line_number":364,"context_line":"            raise exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":25,"id":"2d292cd8_aa688a64","line":361,"in_reply_to":"496edee3_06c3c2a1","updated":"2026-10-02 17:08:31.000000000","message":"I see. Acknowledged.","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"903c64e604b697b79a5e1730c3fa637d4953038b","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    def _get_tenant_id_for_share(self, share):"},{"line_number":359,"context_line":"        return self._get_vip_pool_for_share(share).tenant_id"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _ensure_share(self, share):"},{"line_number":362,"context_line":"        share_proto \u003d share[\"share_proto\"]"},{"line_number":363,"context_line":"        if share_proto !\u003d \"NFS\":"},{"line_number":364,"context_line":"            raise exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":25,"id":"496edee3_06c3c2a1","line":361,"in_reply_to":"ac9fd7cd_8e56279a","updated":"2026-10-02 16:12:50.000000000","message":"Thanks for the review.\n\nIn practice a tenant mismatch should not occur here: each Manila share maps to a VAST view named by the unique share UUID (name\u003dshare_id), so we do not reuse views across shares.\n\nTenant is selected implicitly from the VIP pool used for that share (tenant_id\u003dvippool.tenant_id) when creating the view/policy/quota. VAST can allow same-named views under different tenants, but with UUID-based names we do not expect collisions, and ensure is keyed on that unique name.","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"}],"manila/share/drivers/vastdata/rest.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class NoCookiesJar(cookies.RequestsCookieJar):"},{"line_number":35,"context_line":"    def set(self, name, value, **kwargs):"},{"line_number":36,"context_line":"        return None"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def set_cookie(self, cookie, *args, **kwargs):"},{"line_number":39,"context_line":"        return"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class Session(requests.Session):"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"099ff80b_2f539ada","line":40,"range":{"start_line":34,"start_character":0,"end_line":40,"end_character":0},"updated":"2026-07-08 19:30:51.000000000","message":"is this an integral part of this change? if not, can we keep this as a separate enhancement?","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class NoCookiesJar(cookies.RequestsCookieJar):"},{"line_number":35,"context_line":"    def set(self, name, value, **kwargs):"},{"line_number":36,"context_line":"        return None"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def set_cookie(self, cookie, *args, **kwargs):"},{"line_number":39,"context_line":"        return"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class Session(requests.Session):"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3feb7c4b_fe8afb0f","line":40,"range":{"start_line":34,"start_character":0,"end_line":40,"end_character":0},"in_reply_to":"099ff80b_2f539ada","updated":"2026-09-16 00:21:58.000000000","message":"Yes, it’s required. Newer VAST versions send cookies that interfere with our token-based auth and break the REST client. Without NoCookiesJar the driver doesn’t work on those versions, so multitenancy couldn’t be tested or used. I’ll add a short comment explaining why.","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":85,"context_line":"                \"POST\","},{"line_number":86,"context_line":"                f\"{self.base_url}/token/\","},{"line_number":87,"context_line":"                verify\u003dself.ssl_verify,"},{"line_number":88,"context_line":"                timeout\u003d30,"},{"line_number":89,"context_line":"                json\u003d{\"username\": self.username, \"password\": self.password},"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"            resp.raise_for_status()"}],"source_content_type":"text/x-python","patch_set":13,"id":"a30a8ea1_0c183a59","line":88,"range":{"start_line":88,"start_character":0,"end_line":88,"end_character":27},"updated":"2026-07-08 19:30:51.000000000","message":"same question about being an integral part of this change","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                \"POST\","},{"line_number":86,"context_line":"                f\"{self.base_url}/token/\","},{"line_number":87,"context_line":"                verify\u003dself.ssl_verify,"},{"line_number":88,"context_line":"                timeout\u003d30,"},{"line_number":89,"context_line":"                json\u003d{\"username\": self.username, \"password\": self.password},"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"            resp.raise_for_status()"}],"source_content_type":"text/x-python","patch_set":13,"id":"834e5d32_98b80753","line":88,"range":{"start_line":88,"start_character":0,"end_line":88,"end_character":27},"in_reply_to":"a30a8ea1_0c183a59","updated":"2026-09-16 00:21:58.000000000","message":"removed","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":142,"context_line":"        # non-paginated responses from the API"},{"line_number":143,"context_line":"        if isinstance(ret, dict) and \"results\" in ret and \"count\" in ret:"},{"line_number":144,"context_line":"            # This is a paginated response, extract the results array"},{"line_number":145,"context_line":"            ret \u003d ret[\"results\"]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if ret and log_result:"},{"line_number":148,"context_line":"            formatted_response \u003d textwrap.indent("}],"source_content_type":"text/x-python","patch_set":13,"id":"03263b8b_aa353381","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":32},"updated":"2026-07-08 19:30:51.000000000","message":"wouldn\u0027t there be any other data you\u0027d need from ret other than results?","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        # non-paginated responses from the API"},{"line_number":143,"context_line":"        if isinstance(ret, dict) and \"results\" in ret and \"count\" in ret:"},{"line_number":144,"context_line":"            # This is a paginated response, extract the results array"},{"line_number":145,"context_line":"            ret \u003d ret[\"results\"]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if ret and log_result:"},{"line_number":148,"context_line":"            formatted_response \u003d textwrap.indent("}],"source_content_type":"text/x-python","patch_set":13,"id":"98e1ed4d_ee8ccc99","line":145,"range":{"start_line":145,"start_character":13,"end_line":145,"end_character":32},"in_reply_to":"03263b8b_aa353381","updated":"2026-09-16 00:21:58.000000000","message":"No. Only results. But I implemted it other way via \"iterator\". Please check","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":209,"context_line":"        self.session \u003d rest.session"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list(self, **params):"},{"line_number":212,"context_line":"        \"\"\"Get a list of entries with optional filtering params\"\"\""},{"line_number":213,"context_line":"        return self.session.get(self.resource_name, params\u003dparams)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create(self, **params):"}],"source_content_type":"text/x-python","patch_set":13,"id":"c429338a_1cd2d67f","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":66},"updated":"2026-07-08 19:30:51.000000000","message":"I appreciate looking out for spelling issues but I\u0027d discourage making this change a part of this patch, as it will impact the history and can throw people off while checking the commit history. So could you please change this and fix it in a follow-up? Same applies to the change below","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.session \u003d rest.session"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def list(self, **params):"},{"line_number":212,"context_line":"        \"\"\"Get a list of entries with optional filtering params\"\"\""},{"line_number":213,"context_line":"        return self.session.get(self.resource_name, params\u003dparams)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create(self, **params):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7111f9a2_29983f40","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":66},"in_reply_to":"c429338a_1cd2d67f","updated":"2026-09-16 00:21:58.000000000","message":"It is implicitly part of change that I expalined in release note which is related to iterators","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def delete(self, **params):"},{"line_number":226,"context_line":"        \"\"\"Delete entry by provided params. Skip if entry not found.\"\"\""},{"line_number":227,"context_line":"        entry \u003d self.one(**params)"},{"line_number":228,"context_line":"        if not entry:"},{"line_number":229,"context_line":"            resource \u003d self.__class__.__name__.lower()"},{"line_number":230,"context_line":"            serialized_params \u003d json.dumps(params, separators\u003d(\",\", \":\"))"}],"source_content_type":"text/x-python","patch_set":13,"id":"a25241d0_08ec9247","line":227,"updated":"2026-07-08 19:30:51.000000000","message":"create and other methods switched to using the tenant_id - would we need it here too?","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def delete(self, **params):"},{"line_number":226,"context_line":"        \"\"\"Delete entry by provided params. Skip if entry not found.\"\"\""},{"line_number":227,"context_line":"        entry \u003d self.one(**params)"},{"line_number":228,"context_line":"        if not entry:"},{"line_number":229,"context_line":"            resource \u003d self.__class__.__name__.lower()"},{"line_number":230,"context_line":"            serialized_params \u003d json.dumps(params, separators\u003d(\",\", \":\"))"}],"source_content_type":"text/x-python","patch_set":13,"id":"3e743d38_fb9e3ba1","line":227,"in_reply_to":"a25241d0_08ec9247","updated":"2026-09-16 00:21:58.000000000","message":"No. This is artibrary params","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":242,"context_line":"            **params,"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def one(self, *, fail_if_missing\u003dFalse, **params):"},{"line_number":246,"context_line":"        \"\"\"Retrieve a single entry by provided filter parameters."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":13,"id":"242007b4_ab532c01","line":245,"range":{"start_line":245,"start_character":17,"end_line":245,"end_character":20},"updated":"2026-07-08 19:30:51.000000000","message":"uhm, a bit complicated - any other way we can keep parameters more visible here?","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            **params,"},{"line_number":243,"context_line":"        )"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def one(self, *, fail_if_missing\u003dFalse, **params):"},{"line_number":246,"context_line":"        \"\"\"Retrieve a single entry by provided filter parameters."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":13,"id":"965199e6_a3973adf","line":245,"range":{"start_line":245,"start_character":17,"end_line":245,"end_character":20},"in_reply_to":"242007b4_ab532c01","updated":"2026-09-16 00:21:58.000000000","message":"fail_if_missing - is meta argument which govers behavior. \nOther params are arbitrary key/values which will be passed to API","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f9cbdb1c6bf20f11d764a7350b834375e86c23b6","unresolved":true,"context_lines":[{"line_number":406,"context_line":"        self.snapshots \u003d Snapshots(self)"},{"line_number":407,"context_line":"        self.folders \u003d Folders(self)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        if not api_token:"},{"line_number":410,"context_line":"            # Refresh auth token to avoid initial \"forbidden\" status error."},{"line_number":411,"context_line":"            self.session.refresh_auth_token()"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"cab4d014_638b0a75","line":409,"range":{"start_line":409,"start_character":0,"end_line":409,"end_character":25},"updated":"2026-07-08 19:30:51.000000000","message":"also not sure if this is an important piece of the multitenancy change","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cf66d89019b802fbdc6716c4a8d04dc26e74d24c","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        self.snapshots \u003d Snapshots(self)"},{"line_number":407,"context_line":"        self.folders \u003d Folders(self)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        if not api_token:"},{"line_number":410,"context_line":"            # Refresh auth token to avoid initial \"forbidden\" status error."},{"line_number":411,"context_line":"            self.session.refresh_auth_token()"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3615cfd6_4dca9581","line":409,"range":{"start_line":409,"start_character":0,"end_line":409,"end_character":25},"in_reply_to":"cab4d014_638b0a75","updated":"2026-09-16 00:21:58.000000000","message":"For multitenancy it is not allowed to refresh with empty params","commit_id":"2b02b0f0084dfa3c464654f4c705ac5f3a4c9fec"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"474b9cc605bb6c473a67004690223b773fb7066f","unresolved":true,"context_lines":[{"line_number":324,"context_line":"class VipPool(VastResource):"},{"line_number":325,"context_line":"    resource_name \u003d \"vippools\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @cachetools.cached(cache\u003dcachetools.TTLCache(ttl\u003d60 * 30, maxsize\u003d128))"},{"line_number":328,"context_line":"    def one(self, **params):"},{"line_number":329,"context_line":"        # Cache results to avoid repeated REST API calls for the same pool."},{"line_number":330,"context_line":"        # The vippool is frequently accessed (e.g., to resolve tenant IDs"}],"source_content_type":"text/x-python","patch_set":25,"id":"2e3e36f0_a2b1bb20","line":327,"updated":"2026-10-02 15:40:16.000000000","message":"Why do we need a cache of 30 mins? Isnt that too long for an operation like ensure_shares to rely on? What would happen if the pool is resized? Any down side to that? Also, this is hardcoded, what if it doesnt work and needs to be configured?","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"903c64e604b697b79a5e1730c3fa637d4953038b","unresolved":false,"context_lines":[{"line_number":324,"context_line":"class VipPool(VastResource):"},{"line_number":325,"context_line":"    resource_name \u003d \"vippools\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @cachetools.cached(cache\u003dcachetools.TTLCache(ttl\u003d60 * 30, maxsize\u003d128))"},{"line_number":328,"context_line":"    def one(self, **params):"},{"line_number":329,"context_line":"        # Cache results to avoid repeated REST API calls for the same pool."},{"line_number":330,"context_line":"        # The vippool is frequently accessed (e.g., to resolve tenant IDs"}],"source_content_type":"text/x-python","patch_set":25,"id":"a3046adb_51f80edf","line":327,"in_reply_to":"2e3e36f0_a2b1bb20","updated":"2026-10-02 16:12:50.000000000","message":"The cache avoids repeated REST calls to resolve VIP pool → IPs, which ensure_shares and other paths hit often.\n\n30 minutes is intentional and hardcoded on purpose: VIP pools are not expected to grow/shrink in place on VAST (changing membership while shares are already exported is risky). We use the same caching approach in other VAST products (e.g. CSI).","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4b7e6e36a6e33bb38a5f94a04420d5b6d08e9843","unresolved":false,"context_lines":[{"line_number":324,"context_line":"class VipPool(VastResource):"},{"line_number":325,"context_line":"    resource_name \u003d \"vippools\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    @cachetools.cached(cache\u003dcachetools.TTLCache(ttl\u003d60 * 30, maxsize\u003d128))"},{"line_number":328,"context_line":"    def one(self, **params):"},{"line_number":329,"context_line":"        # Cache results to avoid repeated REST API calls for the same pool."},{"line_number":330,"context_line":"        # The vippool is frequently accessed (e.g., to resolve tenant IDs"}],"source_content_type":"text/x-python","patch_set":25,"id":"4901536e_50c43dce","line":327,"in_reply_to":"a3046adb_51f80edf","updated":"2026-10-02 17:08:31.000000000","message":"Ack.","commit_id":"d0281ae99095617c0a810b0739a440bf5af7aa85"}],"manila/share/drivers/vastdata/rest_iterator.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"36024dcb8f8a72ccec5e20effcc1bc5e553faaf0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":24,"id":"091c8485_a4749bf7","updated":"2026-09-16 18:30:32.000000000","message":"can you please add unit tests to this file?","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"bf67de8fdf1077bb03fdd35f74111f74d05c8e44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"059c8445_852d690a","in_reply_to":"091c8485_a4749bf7","updated":"2026-09-19 08:10:54.000000000","message":"Done. 100% coverage now for this file","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"36024dcb8f8a72ccec5e20effcc1bc5e553faaf0","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 VAST Data Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"0f921241_d3290b0a","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2026-09-16 18:30:32.000000000","message":"nit: 2026","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"bf67de8fdf1077bb03fdd35f74111f74d05c8e44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 VAST Data Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":24,"id":"41dde268_2365fd6d","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"0f921241_d3290b0a","updated":"2026-09-19 08:10:54.000000000","message":"Done","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"}],"releasenotes/notes/vastdata-multitenancly-6936c95f94213548.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7b63ebafc7b178d1b6d5b425b215242e16c2a769","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4e9fab89_c371da67","updated":"2025-11-03 21:23:42.000000000","message":"typo in the file name: multitenancy","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"e5532c9ab3906698f18269ea87f8faa512673f3e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c29928ab_f1521297","in_reply_to":"4e9fab89_c371da67","updated":"2026-03-02 09:24:19.000000000","message":"Done","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"542dab08de9cf932298f41242aca4bd877668aeb","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The VAST Manila driver now supports multitenancy via share types using"},{"line_number":5,"context_line":"    namespaced extra specs. Administrators can specify different VIP pools"},{"line_number":6,"context_line":"    per share type using the ``vast:vippool_name`` extra spec, enabling"},{"line_number":7,"context_line":"    network isolation between different tenants or projects. This allows"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"fd598c32_f3780920","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":39},"updated":"2025-11-03 21:21:09.000000000","message":"enhances?\n\nMultitenancy was always supported, i.e., all OpenStack Manila resources are namespace isolated; however, by dedicating pools to tenants, you\u0027re enabling a different level of data isolation. \n\nI presume this can be done today by setting up multiple VAST backend sections, each specifying a different vast_vippool_name","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8e68c63259a72b6c7fe6b3e26ff9d37babdfd8a5","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The VAST Manila driver now supports multitenancy via share types using"},{"line_number":5,"context_line":"    namespaced extra specs. Administrators can specify different VIP pools"},{"line_number":6,"context_line":"    per share type using the ``vast:vippool_name`` extra spec, enabling"},{"line_number":7,"context_line":"    network isolation between different tenants or projects. This allows"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"f607c47c_cfbb20ca","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":39},"in_reply_to":"6f3d11ca_a91b16b4","updated":"2026-01-16 19:09:02.000000000","message":"yes, i meant replacing \"supports\" with \"enhances\" in the text will be better because right now it sounds as though multitenancy wasn\u0027t supported at all.","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"84225bb41e9b2c27aa4c2e9c1e3c0c01cf27e66e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The VAST Manila driver now supports multitenancy via share types using"},{"line_number":5,"context_line":"    namespaced extra specs. Administrators can specify different VIP pools"},{"line_number":6,"context_line":"    per share type using the ``vast:vippool_name`` extra spec, enabling"},{"line_number":7,"context_line":"    network isolation between different tenants or projects. This allows"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"061c7749_03d00f6f","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":39},"in_reply_to":"f607c47c_cfbb20ca","updated":"2026-02-02 02:54:28.000000000","message":"Done","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"4ad46bfa1fd6c393829ccf745dcaee461617189a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The VAST Manila driver now supports multitenancy via share types using"},{"line_number":5,"context_line":"    namespaced extra specs. Administrators can specify different VIP pools"},{"line_number":6,"context_line":"    per share type using the ``vast:vippool_name`` extra spec, enabling"},{"line_number":7,"context_line":"    network isolation between different tenants or projects. This allows"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"6f3d11ca_a91b16b4","line":4,"range":{"start_line":4,"start_character":31,"end_line":4,"end_character":39},"in_reply_to":"fd598c32_f3780920","updated":"2026-01-16 01:10:29.000000000","message":"Probably there is misunderstanding. \nMy change has nothing to do with Openstack tenants as wwell as Multitenancy is not related to Openstack.\n\nAll these terms are also used in Vast and here I\u0027d like to be able to specify different vast vip pools for connection (vast vip pool is list of ip addresses assigned to specific vast tenant)\n\nNamely we have manila.conf where I can specify vastdata_vip_pool as one of required arguments. So far only this vip pool ( all ips of vip pool is all available export locations of manila share) was used for connections.\n\nBut we have request from customer who wants to use different vip pools thus different tenants for different shares.\n\nOne way to provide \"extra\" vip pools besides one that is specified in manila.conf is to use extra specs where you can actually provide arbitrary, driver related key value pairs. I saw this approach in some cinder drivers.","commit_id":"9a94f280470b587eabec64e00c2830db7f6caee3"}],"releasenotes/notes/vastdata-vippool-extra-specs-and-pagination-6936c95f94213548.yaml":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"36024dcb8f8a72ccec5e20effcc1bc5e553faaf0","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    Manila backend. The configuration parameter ``vast_vippool_name`` in"},{"line_number":10,"context_line":"    ``manila.conf`` now serves as a default fallback and is no longer"},{"line_number":11,"context_line":"    strictly required when VIP pools are specified via share type extra specs."},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    The VAST Manila driver now supports paginated list responses from the"},{"line_number":14,"context_line":"    VMS REST API. List operations follow ``next`` page links until all"},{"line_number":15,"context_line":"    results are retrieved, and continue to accept non-paginated (bare list)"},{"line_number":16,"context_line":"    responses for compatibility with older VMS versions. This prevents"},{"line_number":17,"context_line":"    truncated results when VMS returns multi-page listings."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"94f4ebf7_813dc2ce","line":17,"range":{"start_line":12,"start_character":2,"end_line":17,"end_character":59},"updated":"2026-09-16 18:30:32.000000000","message":"from what I understood from the code (and read here), the end result should be transparent to the end users and administrators. Our release notes target both of those and the pagination is more of an implementation detail, so I think we\u0027re fine if we don\u0027t call this out.","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"bf67de8fdf1077bb03fdd35f74111f74d05c8e44","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Manila backend. The configuration parameter ``vast_vippool_name`` in"},{"line_number":10,"context_line":"    ``manila.conf`` now serves as a default fallback and is no longer"},{"line_number":11,"context_line":"    strictly required when VIP pools are specified via share type extra specs."},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    The VAST Manila driver now supports paginated list responses from the"},{"line_number":14,"context_line":"    VMS REST API. List operations follow ``next`` page links until all"},{"line_number":15,"context_line":"    results are retrieved, and continue to accept non-paginated (bare list)"},{"line_number":16,"context_line":"    responses for compatibility with older VMS versions. This prevents"},{"line_number":17,"context_line":"    truncated results when VMS returns multi-page listings."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"a801dde4_5b287d55","line":17,"range":{"start_line":12,"start_character":2,"end_line":17,"end_character":59},"in_reply_to":"94f4ebf7_813dc2ce","updated":"2026-09-19 08:10:54.000000000","message":"Removed","commit_id":"ca047d71abe8e5e84ea5d9ac83841d5a712d72c5"}]}
