)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also adds WEKAFS to SUPPORTED_SHARE_PROTOCOLS in constants.py, RST"},{"line_number":23,"context_line":"admin documentation, and updates the share backends feature support"},{"line_number":24,"context_line":"mapping."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implements: blueprint weka-share-driver"},{"line_number":27,"context_line":"Change-Id: Ic3f85449009b3a15a1219a01b8b4217132b41899"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fb38e19b_eacb4be1","line":24,"updated":"2026-06-17 23:14:17.000000000","message":"Could you please add a release note: https://docs.openstack.org/manila/latest/contributor/adding_release_notes.html","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also adds WEKAFS to SUPPORTED_SHARE_PROTOCOLS in constants.py, RST"},{"line_number":23,"context_line":"admin documentation, and updates the share backends feature support"},{"line_number":24,"context_line":"mapping."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implements: blueprint weka-share-driver"},{"line_number":27,"context_line":"Change-Id: Ic3f85449009b3a15a1219a01b8b4217132b41899"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"77772bf4_d3231f8e","line":24,"in_reply_to":"fb38e19b_eacb4be1","updated":"2026-06-22 11:44:28.000000000","message":"Added a release note in PS8 (releasenotes/notes/add-weka-share-driver-*.yaml).","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Yaron Bar \u003cyaron.bar@weka.io\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-27 17:07:18 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Weka share driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a Manila share driver for Weka storage, supporting two protocols:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"- WEKAFS: the WekaFS POSIX kernel client (sub-250 µs latency, full POSIX"},{"line_number":12,"context_line":"  semantics, native quota enforcement). Requires the WekaFS kernel module"},{"line_number":13,"context_line":"  on the Manila host."},{"line_number":14,"context_line":"- NFS: standard NFS v3 exports via Weka\u0027s built-in NFS gateway. Works on"},{"line_number":15,"context_line":"  all kernel versions with no additional client software."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The driver operates in DHSS\u003dfalse mode. Weka filesystems are mapped"},{"line_number":18,"context_line":"directly to Manila shares. Supported operations include create/delete,"},{"line_number":19,"context_line":"extend/shrink, ensure, snapshots, revert-to-snapshot,"},{"line_number":20,"context_line":"create-from-snapshot, manage/unmanage, and capacity reporting."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"WEKAFS shares are isolated per tenant. Each Manila project is mapped to"},{"line_number":23,"context_line":"its own Weka organization, and WEKAFS filesystems are created with"},{"line_number":24,"context_line":"authentication required inside that organization, so a mount token"},{"line_number":25,"context_line":"scoped to one project cannot mount another project\u0027s shares -- access is"},{"line_number":26,"context_line":"enforced at the Weka organization boundary. This requires a multi-tenant"},{"line_number":27,"context_line":"Weka cluster and the weka_org_admin_secret option, from which the"},{"line_number":28,"context_line":"per-organization credentials are derived; the driver refuses to start if"},{"line_number":29,"context_line":"it is unset. The per-project mount credential is returned to the tenant"},{"line_number":30,"context_line":"as each WEKAFS access rule\u0027s access_key for self-service, with no"},{"line_number":31,"context_line":"operator hand-off."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Within an organization, WEKAFS ip access rules are additionally enforced"},{"line_number":34,"context_line":"per share by the Weka cluster: each rule maps to a per-filesystem Weka"},{"line_number":35,"context_line":"security policy that admits only the client source IPs it names, denying"},{"line_number":36,"context_line":"all others at native mount time. --access-level is honored (ro installs"},{"line_number":37,"context_line":"a read-only policy). ip rules are IPv4-only: the driver reports"},{"line_number":38,"context_line":"ipv6_implemented \u003d False, and an IPv6 rule that reaches it anyway is"},{"line_number":39,"context_line":"logged and ignored."},{"line_number":40,"context_line":"Alternatively, a share type may reference a shared, reusable group"},{"line_number":41,"context_line":"policy via the weka:security_policy_group extra spec, defined by the"},{"line_number":42,"context_line":"weka_security_policy_group option."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"NFS shares use IP-based access rules."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"update_access honors both modes of the driver contract. In incremental"},{"line_number":47,"context_line":"mode the driver applies add_rules, delete_rules and update_rules. When"},{"line_number":48,"context_line":"add_rules and delete_rules are both empty -- as they are when the access"},{"line_number":49,"context_line":"level changes for every rule on a share -- the driver instead reconciles"},{"line_number":50,"context_line":"the backend down to access_rules, removing the export permissions,"},{"line_number":51,"context_line":"client groups and security-policy addresses that no longer correspond to"},{"line_number":52,"context_line":"a rule, so a revoked rule cannot leave working access behind on the"},{"line_number":53,"context_line":"cluster. Shares whose type sets weka:security_policy_group are exempt:"},{"line_number":54,"context_line":"those policies are shared between shares, so reconciling one share\u0027s"},{"line_number":55,"context_line":"rules against them would revoke the others."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Also adds WEKAFS to SUPPORTED_SHARE_PROTOCOLS in constants.py, registers"},{"line_number":58,"context_line":"the driver\u0027s options in manila/opts.py so they reach the sample"},{"line_number":59,"context_line":"manila.conf and the configuration reference, adds RST admin"},{"line_number":60,"context_line":"documentation, and updates the share backends feature support mapping."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Implements: blueprint weka-share-driver"},{"line_number":63,"context_line":"Depends-On: https://review.opendev.org/c/openstack/manila-tempest-plugin/+/999687"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"c6015811_02a0e34d","line":60,"range":{"start_line":7,"start_character":0,"end_line":60,"end_character":70},"updated":"2026-08-28 06:36:41.000000000","message":"What was done is always obvious by inspecting the commit. Why it was done is probably the only reason to write out a commit message. \n\n\nI\u0027d re-write this for human consumption - just too long atm","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":36686,"name":"Inyong Hong","display_name":"hongp","email":"inyong.hong@samsung.com","username":"hong-p"},"change_message_id":"a36c42e0b3cab890184971ad85e65af2f3a4c0e5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"79d3924f_735004c7","updated":"2026-05-31 21:37:18.000000000","message":"Hi, We are very excited to see a Weka driver being contributed to Manila. We had actually reached out to Weka via email previously, and in the meantime we implemented our own Weka driver on a hard fork of Manila which we are currently running in production. We have a few questions and would appreciate your feedback.\n\nThe driver uses a single globally-configured weka_organization (defaulting to Root) for all share operations, which means there is no per-project organizational isolation at the Weka level.\n\nIn our experience implementing a Weka driver internally, we found this to be a serious security concern: \nsince all filesystems across all OpenStack projects live in the same Weka organization, all clients must use the same mount account and password regardless of which project they belong to. This means there is no organizational boundary between projects at the Weka level a client from project A and a client from project B are indistinguishable from Weka\u0027s perspective.\n\nWe addressed this by implementing share server support, mapping each Manila share server to a dedicated Weka organization — so each OpenStack project gets its own org context and mount account, and access is scoped accordingly.\n\nIs this single-org approach intentional, and do you consider it secure for multi-tenant deployments? We would appreciate your thoughts on whether our per-project org isolation approach would be a better direction.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"608e1ee25a95ec98251ffb74c87e6e1fd5d970a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9f6dcab4_be30fb67","updated":"2026-06-02 14:20:12.000000000","message":"Just started the review. Will incrementally review it. Had some initial comments below. Please take a look.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5cfd70406b1f8bada666dc197d0d315002190dfc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a053d8dc_04181e00","in_reply_to":"79d3924f_735004c7","updated":"2026-06-16 09:42:04.000000000","message":"Thanks for the detailed feedback, and for sharing your production experience — this is really useful. You\u0027re right: the driver uses a single configured weka_organization (default: Root) with driver_handles_share_servers\u003dFalse, so there\u0027s no per-project org boundary at the Weka level. \nThat\u0027s an intentional scope choice for this initial driver. We agree per-project Weka-org isolation via share-server support (DHSS\u003dTrue — one org + mount account per share server) is the stronger multi-tenant model, and it\u0027s a natural follow-up.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"0a4a63fd07da6b7de1ed48ee0f6834de028da52c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e12e2bc1_06f87de4","in_reply_to":"a053d8dc_04181e00","updated":"2026-06-22 11:44:26.000000000","message":"Following up: the single-org / DHSS\u003dfalse model is the intended initial scope. Per-project Weka-org isolation via share-server support is planned as a follow-up change. Thanks again for the production input.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f446506a7ed699cc3a04d935c02373db6eb2a4a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e3061231_f6ccdbe8","in_reply_to":"e12e2bc1_06f87de4","updated":"2026-07-03 13:26:25.000000000","message":"Marking resolved — tracked as a roadmap follow-up (per-project Weka-org isolation / DHSS\u003dtrue).","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"dedf297e3ff6d3f76ce67277a0e044e4f042c9d9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7e1becb4_5788e611","updated":"2026-06-16 13:30:00.000000000","message":"Thank you Anoop and hongp for the review feedback. PS6 addresses the code-level items:\n\npool_connections and pool_maxsize are now configurable\nAdded inline comment in client.py linking _DEFAULT_TIMEOUT/_DEFAULT_RETRIES to the weka_api_timeout/weka_max_api_retries config options\nWEKAFS access control: IP-based security policies are on the roadmap as a follow-up patch\n\nHappy to answer any follow-up questions.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"b025247ab626712c8f03d67ebc87e33fb1959def","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e67825d1_5385a804","updated":"2026-06-16 13:31:02.000000000","message":"run-weka-ci","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"b9a625be2009025277cabfcbd634280fcf0ee697","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fc045000_a018bc9b","in_reply_to":"7e1becb4_5788e611","updated":"2026-07-03 13:26:36.000000000","message":"Marking resolved — superseded by the later patchset summaries.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"b9a625be2009025277cabfcbd634280fcf0ee697","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1326cfd1_0503ff4f","in_reply_to":"e67825d1_5385a804","updated":"2026-07-03 13:26:36.000000000","message":"Marking resolved — CI trigger comment, no longer needed.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b7d13106_889f482d","updated":"2026-06-17 23:14:17.000000000","message":"Thanks for working on this. The CI results must be accessible to the community, please ensure that they\u0027re uploaded to a publicly accessible location. I\u0027ve several comments inline","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b1e12030_d5a0c1b9","in_reply_to":"b7d13106_889f482d","updated":"2026-06-22 11:44:28.000000000","message":"The Weka third-party CI is now live (comment-triggered via \"run-weka-ci\"); results post to the review.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"272d86688d3d8c1af0196fca7b23f94b78173575","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bddbac05_6d932206","updated":"2026-06-25 08:18:32.000000000","message":"Am still reviewing; found a couple of issues. The eventlet usage is a hard blocker unfortunately.. let me know if you\u0027d like any clarifications..","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"796eed918198d58e70382152982a577b4511af43","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"30978b24_c127b40c","updated":"2026-06-23 05:16:16.000000000","message":"Hi Goutham, PS11 addresses all the feedback from your Code-Review -1. In summary:\n\nAdded a release note\nReplaced ensure_share with ensure_shares + get_backend_info\nReplaced root_helper\u003d\u0027sudo\u0027 with rootwrap-compatible run_as_root\u003dTrue\ncreate_share_from_snapshot now returns creating_from_snapshot status for async completion\ncreate_share returns proper dict format with status and export_locations\nRemoved dead code from client.py\nFixed install docs, index.rst placement, IPv6 rejection, reserved_percentage from config, manage_existing NFS cleanup, tempfile.mkdtemp(), and all the other items\nCI is green (Verified +1)\n\nThe 5 remaining open threads all have responses from us. Could you please take another look when you get a chance?","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"f253a1291b94050df9f9306cf4e51a57ef5cbbe9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a8ea454d_eb3879c7","updated":"2026-06-24 20:03:25.000000000","message":"Improved multi-tenancy support could perhaps be achievable with this relatively minor modification.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"882edb779e0beae1b061c6e98aa7b03e8cb9dd5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"adeefa55_ab0f842d","in_reply_to":"30978b24_c127b40c","updated":"2026-07-03 13:26:43.000000000","message":"Marking resolved — superseded by the PS12 summary.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"882edb779e0beae1b061c6e98aa7b03e8cb9dd5c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b97d158a_19e44a6a","in_reply_to":"41e62df8_bf068752","updated":"2026-07-03 13:26:43.000000000","message":"Marking resolved — tracked as a roadmap follow-up (multi-tenancy via share-type extra_specs override).","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"41e62df8_bf068752","in_reply_to":"a8ea454d_eb3879c7","updated":"2026-07-03 07:04:54.000000000","message":"Agreed the extra_specs-override approach is a relatively contained way to enable multi-tenancy; planned as a follow-up. Keeping this initial change scoped to single-org / DHSS\u003dfalse.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"58cfb7ed884513e58e974e9a9fe8bc6dfab6532a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"201e88ac_564ef824","updated":"2026-07-22 08:17:44.000000000","message":"Friendly reminder: the July 30 new-driver deadline is 8 days away. PS12 is ready for review — all PS11 feedback addressed, Weka CI green, 0 unresolved comments. Pinging gouthamr and carloss for a re-review.","commit_id":"4138f8ce7cc6bf17270c3c0d6883707fbd1594c1"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"49e77d53d87c162f06bea0359cd3b091cb564d8f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"bbc8db29_dad2af85","updated":"2026-07-03 08:12:53.000000000","message":"PS12 is up addressing all PS11 feedback:\n\nReplaced import eventlet with native Python threads (following change 973519 as suggested by gouthamr in the Jun 25 meeting)\nFixed import order in manila/privsep/weka.py\nFixed alphabetical ordering in doc/source/admin/index.rst\ncreate_share_from_snapshot now returns \u0027error\u0027 if status is lost mid-copy\nAll remaining open comments left for reviewers to resolve (no code change needed)\n\nWeka CI is green on PS12 (903 tests, 0 failures). Would appreciate a re-review from gouthamr and Stig when you get a chance. We\u0027re tracking toward the July 30 new-driver deadline.","commit_id":"4138f8ce7cc6bf17270c3c0d6883707fbd1594c1"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"3c370ebabe7aca7172a0c65b4291667d8171ff5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"302ec3fe_8b0815ce","in_reply_to":"bbc8db29_dad2af85","updated":"2026-07-03 13:26:48.000000000","message":"Marking resolved — all review items through PS12 are addressed.","commit_id":"4138f8ce7cc6bf17270c3c0d6883707fbd1594c1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8a9e2d835dc36e43c60c1a7c3d7c615f222ed1e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"84162eab_8e4ef003","updated":"2026-08-04 04:56:20.000000000","message":"\u003e @gouthamr when you get a chance, I\u0027d appreciate your steer on the two questions above (keeping test_list_access_rules green while returning access_key for ip/user rules, and per-project vs per-rule credential mapping) so I can rework the delivery. Thanks!\n\nDon\u0027t you need a patch to the manila-tempest-plugin to include WEKAFS as a protocol? \n\nI\u0027m doing that for LUSTRE here: https://review.opendev.org/c/openstack/manila-tempest-plugin/+/996908\n\nWith such a patch, you can make sure that the test recognizes that \"access_key\" is set for both CEPHFS and WEKAFS","commit_id":"246f8e920b4d3494237e55a2dec3e08ebb3f25da"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c213c39b21716396b4de745ce06f3c93d7b83533","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1b950999_627ccc97","updated":"2026-08-02 23:18:54.000000000","message":"I haven\u0027t read through changes yet, but this caught my attention:\n\n\u003e Idiomatic mount-credential delivery: WEKAFS access rules now return no\n  access_key (upstream reserves access_key for cephx). The per-project\n  mount credential is surfaced in the share’s export-location metadata as\n  weka_mount_password (self-service, no operator hand-off).\n\n\nManila doesn\u0027t set \"access_key\" only for CephX access type. This field can be set for any access type. I find access secrets in share export location metadata problematic - this information is readily available to all OpenStack users that can enumerate share export locations. That would be inappropriate for a secret?\n\nWith \"access_key\", we have a feature where the visibility of this field can be controlled by the user creating the access rule.","commit_id":"246f8e920b4d3494237e55a2dec3e08ebb3f25da"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e8746ace3092d6d056f30db5975446a474bb236e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ccee094f_51e750b5","updated":"2026-08-13 03:07:08.000000000","message":"@assaf@weka.io @itai.weisman@weka.io: Can you reduce the LLM bloat in this change?","commit_id":"e87c9b40104583f1bc444a3d502c8b19d1001528"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ea80646ef9da3bdc6947e70499568649d112d729","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ced6d2e7_aa08e112","updated":"2026-08-19 22:58:02.000000000","message":"Thank you for working on this change. I have only a few questions inline. Also, I agree with Goutham: docstrings and comments are likely more verbose than what they need to be. It\u0027s somewhat unusual for a new driver to be around 10 thousand lines. Could you please revisit the docstrings and try working on optimizing them?","commit_id":"e87c9b40104583f1bc444a3d502c8b19d1001528"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"3b5bcdad_1cda926a","updated":"2026-08-26 22:37:56.000000000","message":"Hey @itai.weisman@weka.io @assaf@weka.io @yaron.bar@weka.io\n\nI\u0027ve combed through the driver change and found several issues. PTAL. Yes, the deadline is tomorrow (Aug 27th). However, many of the issues that i\u0027ve highlighted are patterns that can be trivially fixed by your LLM perhaps. Please do join the manila meeting at 1500 UTC and discuss if you have any concerns.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"bfa5c3dbac238b58d5c3cc8b5a3385f442731554","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"b8f9cbfb_b53281fc","updated":"2026-08-26 12:31:55.000000000","message":"Hi carloss, gouthamr — PS19 is back to Verified +1 after the rebase (resolved conflicts with the Lustre driver and manila-tempest-plugin). All previous review feedback has been addressed and Weka CI is green on both protocols.\n\nWith feature freeze tomorrow (Aug 27), we\u0027d really appreciate a re-review today. Happy to jump on a call or answer anything in real time if that helps speed things up.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":39155,"name":"Itai Weisman","display_name":"Itai Weisman","email":"itai.weisman@weka.io","username":"itaiweismanweka"},"change_message_id":"5404ce103d28043a6993fbf3448d69c9cbdc00af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"64b0d81d_30b319e3","updated":"2026-08-26 19:01:07.000000000","message":"Hi gouthamr — carloss just gave +2 on PS18 and Zuul is green. With feature freeze tomorrow, could you take a look today? One more +2 and Workflow would get us in.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"af13325840ccfcd1241d418f028ba82b04249af1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"deca23ac_b212d463","updated":"2026-08-26 17:26:25.000000000","message":"LGTM, thank you for addressing the comments. Please mark done comments as done.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"5e85a0051132bcca019513f68fceba848ed83418","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a3c1badb_faa4c12d","updated":"2026-08-28 12:35:06.000000000","message":"I don\u0027t have anything else in terms of issues to point out on this change at this point. I\u0027d like to see these being addressed in a follow-up change if possible. Let\u0027s get the driver in.","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"243886126b6c8d4c9c7ccac337fbfc4641134063","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"637816c5_c4219446","updated":"2026-08-28 06:38:41.000000000","message":"LGTM, thanks for addressing my comments. I\u0027ve some more, please consider these if you need to make another patch","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"da76ec8d_d4bcacb9","updated":"2026-08-28 06:36:41.000000000","message":"Resolving my own comments, \n\n@itai.weisman@weka.io @yaron.bar@weka.io - you should be able to do this too - it\u0027ll clean up the slate for other reviewers, and inline responses are always good review hygiene.","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"}],"doc/source/admin/index.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":64,"context_line":"   shared-file-systems-share-server-migration.rst"},{"line_number":65,"context_line":"   share_mount_point_name.rst"},{"line_number":66,"context_line":"   share_back_ends_feature_support_mapping"},{"line_number":67,"context_line":"   weka_share_driver"},{"line_number":68,"context_line":"   capabilities_and_extra_specs"},{"line_number":69,"context_line":"   group_capabilities_and_extra_specs"},{"line_number":70,"context_line":"   export_location_metadata"}],"source_content_type":"text/x-rst","patch_set":7,"id":"9a93787a_be84b886","line":67,"range":{"start_line":67,"start_character":0,"end_line":67,"end_character":20},"updated":"2026-06-17 23:14:17.000000000","message":"this should go into the \"Supported share back ends\" list below","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":64,"context_line":"   shared-file-systems-share-server-migration.rst"},{"line_number":65,"context_line":"   share_mount_point_name.rst"},{"line_number":66,"context_line":"   share_back_ends_feature_support_mapping"},{"line_number":67,"context_line":"   weka_share_driver"},{"line_number":68,"context_line":"   capabilities_and_extra_specs"},{"line_number":69,"context_line":"   group_capabilities_and_extra_specs"},{"line_number":70,"context_line":"   export_location_metadata"}],"source_content_type":"text/x-rst","patch_set":7,"id":"89e8c210_7b7fe6ba","line":67,"in_reply_to":"9a93787a_be84b886","updated":"2026-06-22 11:44:28.000000000","message":"Done in PS8 — moved into the \"Supported share back ends\" toctree.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"272d86688d3d8c1af0196fca7b23f94b78173575","unresolved":true,"context_lines":[{"line_number":112,"context_line":"   ../configuration/shared-file-systems/drivers/windows-smb-driver"},{"line_number":113,"context_line":"   zadara_driver"},{"line_number":114,"context_line":"   ../configuration/shared-file-systems/drivers/vastdata_driver"},{"line_number":115,"context_line":"   weka_share_driver"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"88298d7b_f8c278c4","line":115,"updated":"2026-06-25 08:18:32.000000000","message":"alphabetical order please","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"   ../configuration/shared-file-systems/drivers/windows-smb-driver"},{"line_number":113,"context_line":"   zadara_driver"},{"line_number":114,"context_line":"   ../configuration/shared-file-systems/drivers/vastdata_driver"},{"line_number":115,"context_line":"   weka_share_driver"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"ac396c7f_55d6d93d","line":115,"in_reply_to":"88298d7b_f8c278c4","updated":"2026-07-03 07:04:54.000000000","message":"Fixed in PS12: weka_share_driver moved to its alphabetical position in the toctree.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"}],"doc/source/admin/share_back_ends_feature_support_mapping.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e8746ace3092d6d056f30db5975446a474bb236e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+"},{"line_number":108,"context_line":"|              Vastdata                  |           D           |          \\-           |             D            |             D            |            D           |                \\-                 |            \\-            |           \\-       |          \\-        |"},{"line_number":109,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+"},{"line_number":110,"context_line":"|                  Weka                  |        2026.2         |        2026.2         |          2026.2          |          2026.2          |         2026.2         |              2026.2               |            \\-            |       2026.2       |          \\-        |"},{"line_number":111,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Mapping of share drivers and share access rules support"}],"source_content_type":"text/x-rst","patch_set":15,"id":"e57a3c17_6af6a90c","line":110,"range":{"start_line":110,"start_character":100,"end_line":110,"end_character":106},"updated":"2026-08-13 03:07:08.000000000","message":"this is inconsistent... we\u0027ve been using release lettering. But, I don\u0027t think that\u0027s going well either. I think we can just convert these into tick marks; and drop noting when something was introduced. Since this is in the admin guide that\u0027s versioned, people won\u0027t have trouble finding out.\n\nNothing for you to change, imo; something for me/manila maintainers to fix up","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"}],"doc/source/admin/weka_share_driver.rst":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"608e1ee25a95ec98251ffb74c87e6e1fd5d970a8","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Supported Operations"},{"line_number":56,"context_line":"--------------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Create and delete shares"},{"line_number":59,"context_line":"* Extend and shrink shares"},{"line_number":60,"context_line":"* Ensure shares (re-mount on service restart)"},{"line_number":61,"context_line":"* Create, delete, and revert-to snapshots"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d2be49a0_26671723","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":26},"updated":"2026-06-02 14:20:12.000000000","message":"I did not see some additional properties of shares mentioned in the spec or the code changes - eg. thick vs thin (space allocated), quality of service etc. Are these defaulted by the file system and do not require to be mentioned?","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"0a4a63fd07da6b7de1ed48ee0f6834de028da52c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"Supported Operations"},{"line_number":56,"context_line":"--------------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Create and delete shares"},{"line_number":59,"context_line":"* Extend and shrink shares"},{"line_number":60,"context_line":"* Ensure shares (re-mount on service restart)"},{"line_number":61,"context_line":"* Create, delete, and revert-to snapshots"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b38993ac_a711c5a2","line":58,"in_reply_to":"6f338009_fc06fbc0","updated":"2026-06-22 11:44:26.000000000","message":"PS8: added a provisioning note to weka_share_driver.rst — shares are thick-provisioned today; thin provisioning and QoS are planned via share-type extra specs.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5cfd70406b1f8bada666dc197d0d315002190dfc","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Supported Operations"},{"line_number":56,"context_line":"--------------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Create and delete shares"},{"line_number":59,"context_line":"* Extend and shrink shares"},{"line_number":60,"context_line":"* Ensure shares (re-mount on service restart)"},{"line_number":61,"context_line":"* Create, delete, and revert-to snapshots"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e3b9bb7c_a7d6516a","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":26},"in_reply_to":"d2be49a0_26671723","updated":"2026-06-16 09:42:04.000000000","message":"Currently the driver creates a standard (thick) filesystems, we plan to support later also thin provisioning via share type extra spec.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"faebba3115c42e55f17f7d58fa4630142a4527a5","unresolved":true,"context_lines":[{"line_number":55,"context_line":"Supported Operations"},{"line_number":56,"context_line":"--------------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"* Create and delete shares"},{"line_number":59,"context_line":"* Extend and shrink shares"},{"line_number":60,"context_line":"* Ensure shares (re-mount on service restart)"},{"line_number":61,"context_line":"* Create, delete, and revert-to snapshots"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6f338009_fc06fbc0","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":26},"in_reply_to":"e3b9bb7c_a7d6516a","updated":"2026-06-19 05:15:38.000000000","message":"Do we want to mention this in the doc?","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":41,"context_line":"-------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* **Weka cluster** version 5.0 or later (tested against 5.1.x)."},{"line_number":44,"context_line":"* **OpenStack Manila** 2023.1 (Antelope) or later."},{"line_number":45,"context_line":"* Network connectivity from the Manila host to the Weka cluster on TCP"},{"line_number":46,"context_line":"  port **14000** (REST API)."},{"line_number":47,"context_line":"* For WEKAFS protocol shares only: the WekaFS client package must be"}],"source_content_type":"text/x-rst","patch_set":6,"id":"958907af_734eb108","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":50},"updated":"2026-06-17 23:14:17.000000000","message":"You\u0027ll need to clarify if this was an out of tree driver prior to Hibiscus, or just drop this note. It\u0027s usually read in current context.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":41,"context_line":"-------------"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"* **Weka cluster** version 5.0 or later (tested against 5.1.x)."},{"line_number":44,"context_line":"* **OpenStack Manila** 2023.1 (Antelope) or later."},{"line_number":45,"context_line":"* Network connectivity from the Manila host to the Weka cluster on TCP"},{"line_number":46,"context_line":"  port **14000** (REST API)."},{"line_number":47,"context_line":"* For WEKAFS protocol shares only: the WekaFS client package must be"}],"source_content_type":"text/x-rst","patch_set":6,"id":"b3434829_e63601f8","line":44,"in_reply_to":"958907af_734eb108","updated":"2026-06-22 11:44:27.000000000","message":"PS8: removed the out-of-tree install/symlink section and the GitHub link; the doc now reads in in-tree context.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":91,"context_line":"Configuration"},{"line_number":92,"context_line":"-------------"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Install Driver"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Clone the driver repository and symlink it into Manila\u0027s source tree:"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":".. code-block:: console"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"   $ git clone https://github.com/weka/manila-weka-driver.git \\"},{"line_number":102,"context_line":"         /opt/manila-weka-driver"},{"line_number":103,"context_line":"   $ ln -s /opt/manila-weka-driver/manila/share/drivers/weka \\"},{"line_number":104,"context_line":"         /path/to/manila/manila/share/drivers/weka"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Install WekaFS Kernel Module (WEKAFS protocol only)"},{"line_number":107,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"c527d4d4_52a2566a","line":104,"range":{"start_line":94,"start_character":0,"end_line":104,"end_character":50},"updated":"2026-06-17 23:14:17.000000000","message":"not accurate for this intree driver.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":101,"context_line":"   $ git clone https://github.com/weka/manila-weka-driver.git \\"},{"line_number":102,"context_line":"         /opt/manila-weka-driver"},{"line_number":103,"context_line":"   $ ln -s /opt/manila-weka-driver/manila/share/drivers/weka \\"},{"line_number":104,"context_line":"         /path/to/manila/manila/share/drivers/weka"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Install WekaFS Kernel Module (WEKAFS protocol only)"},{"line_number":107,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"28740fa1_f3df99a8","line":104,"in_reply_to":"c527d4d4_52a2566a","updated":"2026-06-22 11:44:27.000000000","message":"PS8: removed the clone/symlink \"Install Driver\" section — the driver ships with Manila in-tree.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":132,"context_line":"   share_driver \u003d manila.share.drivers.weka.driver.WekaShareDriver"},{"line_number":133,"context_line":"   share_backend_name \u003d weka"},{"line_number":134,"context_line":"   driver_handles_share_servers \u003d false"},{"line_number":135,"context_line":"   snapshot_support \u003d true"},{"line_number":136,"context_line":"   create_share_from_snapshot_support \u003d true"},{"line_number":137,"context_line":"   revert_to_snapshot_support \u003d true"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"   # Connection"},{"line_number":140,"context_line":"   weka_api_server      \u003d weka-cluster.example.com"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2e4e5463_deb542b4","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":36},"updated":"2026-06-17 23:14:17.000000000","message":"These are config opts? Why would you allow administrators to control these via configuration? These are already optional features via share type extra specs, defauting to False.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":134,"context_line":"   driver_handles_share_servers \u003d false"},{"line_number":135,"context_line":"   snapshot_support \u003d true"},{"line_number":136,"context_line":"   create_share_from_snapshot_support \u003d true"},{"line_number":137,"context_line":"   revert_to_snapshot_support \u003d true"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"   # Connection"},{"line_number":140,"context_line":"   weka_api_server      \u003d weka-cluster.example.com"}],"source_content_type":"text/x-rst","patch_set":6,"id":"79616c1c_9c8a4fee","line":137,"in_reply_to":"2e4e5463_deb542b4","updated":"2026-06-22 11:44:27.000000000","message":"PS8: removed snapshot_support/create_share_from_snapshot_support/revert_to_snapshot_support from the manila.conf example — they are reported capabilities, not operator config opts.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"* WEKAFS shares do not support Manila access rules.  All"},{"line_number":235,"context_line":"  ``share access create`` operations on WEKAFS shares return ``error``"},{"line_number":236,"context_line":"  state.  Manage access at the network layer or via Weka cluster user"},{"line_number":237,"context_line":"  management."},{"line_number":238,"context_line":"* ``create_share_from_snapshot`` copies data via an NFS-based ``rsync``."},{"line_number":239,"context_line":"  Copy time scales linearly with snapshot size."},{"line_number":240,"context_line":"* The WekaFS kernel module is incompatible with Linux kernel 6.17 or"}],"source_content_type":"text/x-rst","patch_set":6,"id":"61f54ac6_b9d0800e","line":237,"range":{"start_line":236,"start_character":52,"end_line":237,"end_character":13},"updated":"2026-06-17 23:14:17.000000000","message":"Is this not something that can be controlled via the driver?","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":true,"context_lines":[{"line_number":234,"context_line":"* WEKAFS shares do not support Manila access rules.  All"},{"line_number":235,"context_line":"  ``share access create`` operations on WEKAFS shares return ``error``"},{"line_number":236,"context_line":"  state.  Manage access at the network layer or via Weka cluster user"},{"line_number":237,"context_line":"  management."},{"line_number":238,"context_line":"* ``create_share_from_snapshot`` copies data via an NFS-based ``rsync``."},{"line_number":239,"context_line":"  Copy time scales linearly with snapshot size."},{"line_number":240,"context_line":"* The WekaFS kernel module is incompatible with Linux kernel 6.17 or"}],"source_content_type":"text/x-rst","patch_set":6,"id":"66d1d827_2cc89140","line":237,"in_reply_to":"61f54ac6_b9d0800e","updated":"2026-06-22 11:44:27.000000000","message":"WEKAFS access enforcement via IP-based security policies is planned as a follow-up; the doc now states rules are accepted as a no-op. Tracking separately.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"b9a625be2009025277cabfcbd634280fcf0ee697","unresolved":false,"context_lines":[{"line_number":234,"context_line":"* WEKAFS shares do not support Manila access rules.  All"},{"line_number":235,"context_line":"  ``share access create`` operations on WEKAFS shares return ``error``"},{"line_number":236,"context_line":"  state.  Manage access at the network layer or via Weka cluster user"},{"line_number":237,"context_line":"  management."},{"line_number":238,"context_line":"* ``create_share_from_snapshot`` copies data via an NFS-based ``rsync``."},{"line_number":239,"context_line":"  Copy time scales linearly with snapshot size."},{"line_number":240,"context_line":"* The WekaFS kernel module is incompatible with Linux kernel 6.17 or"}],"source_content_type":"text/x-rst","patch_set":6,"id":"6783fcc0_57cecd99","line":237,"in_reply_to":"66d1d827_2cc89140","updated":"2026-07-03 13:26:36.000000000","message":"Marking resolved — tracked as a roadmap follow-up (WEKAFS IP-based access enforcement).","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":10910,"name":"Stig Telfer","email":"stig.openstack@telfer.org","username":"stigtelfer"},"change_message_id":"f253a1291b94050df9f9306cf4e51a57ef5cbbe9","unresolved":true,"context_lines":[{"line_number":122,"context_line":"   driver_handles_share_servers \u003d false"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"   # Connection"},{"line_number":125,"context_line":"   weka_api_server      \u003d weka-cluster.example.com"},{"line_number":126,"context_line":"   weka_api_port        \u003d 14000"},{"line_number":127,"context_line":"   weka_ssl_verify      \u003d true"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"a59f220a_ce54372f","line":125,"updated":"2026-06-24 20:03:25.000000000","message":"Multi-tenancy would be enabled if we could treat `weka_api_server` in the same way as `vast_vippool_name` in this review: https://review.opendev.org/c/openstack/manila/+/963494 - if a share type could be created with an extra_specs override value for weka_api_server, that could be mapped to a Weka network space (and associated tenancy) on Weka.  Creation of the Weka tenancy and network space would be out of scope for this driver.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":true,"context_lines":[{"line_number":122,"context_line":"   driver_handles_share_servers \u003d false"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"   # Connection"},{"line_number":125,"context_line":"   weka_api_server      \u003d weka-cluster.example.com"},{"line_number":126,"context_line":"   weka_api_port        \u003d 14000"},{"line_number":127,"context_line":"   weka_ssl_verify      \u003d true"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"fcb996e2_4df9927e","line":125,"in_reply_to":"a59f220a_ce54372f","updated":"2026-07-03 07:04:54.000000000","message":"Thanks Stig — treating weka_api_server as a share-type extra_specs override (mapping to a Weka network space / tenancy, like vast_vippool_name in 963494) is a good direction. This is planned as a follow-up change; the initial scope here is the single-org / DHSS\u003dfalse model. Tracking separately.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"882edb779e0beae1b061c6e98aa7b03e8cb9dd5c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"   driver_handles_share_servers \u003d false"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"   # Connection"},{"line_number":125,"context_line":"   weka_api_server      \u003d weka-cluster.example.com"},{"line_number":126,"context_line":"   weka_api_port        \u003d 14000"},{"line_number":127,"context_line":"   weka_ssl_verify      \u003d true"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"2a5df200_9da8bb74","line":125,"in_reply_to":"fcb996e2_4df9927e","updated":"2026-07-03 13:26:43.000000000","message":"Marking resolved — tracked as a roadmap follow-up (weka_api_server as a share-type extra_specs override).","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"* **Weka cluster** version 5.0 or later (tested against 5.1.x), configured"},{"line_number":98,"context_line":"  for multi-tenancy (required for WEKAFS shares)."},{"line_number":99,"context_line":"* **OpenStack Manila** 2023.1 (Antelope) or later."},{"line_number":100,"context_line":"* Network connectivity from the Manila host to the Weka cluster on TCP"},{"line_number":101,"context_line":"  port **14000** (REST API)."},{"line_number":102,"context_line":"* For WEKAFS protocol shares only: the WekaFS client package must be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"3972b243_64cf1915","line":99,"range":{"start_line":99,"start_character":23,"end_line":99,"end_character":50},"updated":"2026-08-26 22:37:56.000000000","message":"The driver is being introduced in the Hibiscus release.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"* **Weka cluster** version 5.0 or later (tested against 5.1.x), configured"},{"line_number":98,"context_line":"  for multi-tenancy (required for WEKAFS shares)."},{"line_number":99,"context_line":"* **OpenStack Manila** 2023.1 (Antelope) or later."},{"line_number":100,"context_line":"* Network connectivity from the Manila host to the Weka cluster on TCP"},{"line_number":101,"context_line":"  port **14000** (REST API)."},{"line_number":102,"context_line":"* For WEKAFS protocol shares only: the WekaFS client package must be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"1bba038f_00e1f3cd","line":99,"range":{"start_line":99,"start_character":23,"end_line":99,"end_character":50},"in_reply_to":"3972b243_64cf1915","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":121,"context_line":"Access Rules"},{"line_number":122,"context_line":"~~~~~~~~~~~~"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. list-table::"},{"line_number":125,"context_line":"   :header-rows: 1"},{"line_number":126,"context_line":"   :widths: 20 40 40"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"   * - Access Type"},{"line_number":129,"context_line":"     - WEKAFS"},{"line_number":130,"context_line":"     - NFS"},{"line_number":131,"context_line":"   * - ``ip``"},{"line_number":132,"context_line":"     - Enforced per share by a Weka security policy (IPv4 only)"},{"line_number":133,"context_line":"     - Full enforcement (IPv4 only)"},{"line_number":134,"context_line":"   * - ``user``"},{"line_number":135,"context_line":"     - Not supported"},{"line_number":136,"context_line":"     - Not supported"},{"line_number":137,"context_line":"   * - ``cert``"},{"line_number":138,"context_line":"     - Not supported"},{"line_number":139,"context_line":"     - Not supported"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"For WEKAFS shares, each ``ip`` rule is mapped to a per-filesystem Weka"},{"line_number":142,"context_line":"security policy that admits only the client source addresses it names and"}],"source_content_type":"text/x-rst","patch_set":18,"id":"a873525a_f3434f6b","line":139,"range":{"start_line":124,"start_character":0,"end_line":139,"end_character":20},"updated":"2026-08-26 22:37:56.000000000","message":"this table duplicates content elsewhere. Maybe drop it?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"Access Rules"},{"line_number":122,"context_line":"~~~~~~~~~~~~"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. list-table::"},{"line_number":125,"context_line":"   :header-rows: 1"},{"line_number":126,"context_line":"   :widths: 20 40 40"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"   * - Access Type"},{"line_number":129,"context_line":"     - WEKAFS"},{"line_number":130,"context_line":"     - NFS"},{"line_number":131,"context_line":"   * - ``ip``"},{"line_number":132,"context_line":"     - Enforced per share by a Weka security policy (IPv4 only)"},{"line_number":133,"context_line":"     - Full enforcement (IPv4 only)"},{"line_number":134,"context_line":"   * - ``user``"},{"line_number":135,"context_line":"     - Not supported"},{"line_number":136,"context_line":"     - Not supported"},{"line_number":137,"context_line":"   * - ``cert``"},{"line_number":138,"context_line":"     - Not supported"},{"line_number":139,"context_line":"     - Not supported"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"For WEKAFS shares, each ``ip`` rule is mapped to a per-filesystem Weka"},{"line_number":142,"context_line":"security policy that admits only the client source addresses it names and"}],"source_content_type":"text/x-rst","patch_set":18,"id":"277ac951_b5d359aa","line":139,"range":{"start_line":124,"start_character":0,"end_line":139,"end_character":20},"in_reply_to":"a873525a_f3434f6b","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":143,"context_line":"denies all others at native mount time.  ``--access-level`` is honored: an"},{"line_number":144,"context_line":"``ro`` rule installs a read-only policy."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Alternatively, a share type may reference a shared, reusable policy group"},{"line_number":147,"context_line":"through the ``weka:security_policy_group`` extra spec, whose contents are"},{"line_number":148,"context_line":"defined by the ``weka_security_policy_group`` configuration option.  One"},{"line_number":149,"context_line":"policy object then serves every share of that type, which keeps a large"},{"line_number":150,"context_line":"deployment within the cluster\u0027s policy budget."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"NFS shares use IP-based access rules backed by Weka client groups and export"},{"line_number":153,"context_line":"permissions."}],"source_content_type":"text/x-rst","patch_set":18,"id":"ac522ee0_d3bb4cbf","line":150,"range":{"start_line":146,"start_character":0,"end_line":150,"end_character":46},"updated":"2026-08-26 22:37:56.000000000","message":"So, i gather that the driver ignores explicit rules when this is configured to provide access to a group defined elsewhere. \n\nI wonder if it is just more explicit to reject the access control APIs when this is the case. I think we should discuss if that improvement can be made in the Indri release.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":152,"context_line":"NFS shares use IP-based access rules backed by Weka client groups and export"},{"line_number":153,"context_line":"permissions."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"For both protocols, ``ip`` rules are IPv4-only.  An IPv6 rule is logged and"},{"line_number":156,"context_line":"reported back to Manila in the ``error`` state rather than being applied."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Access Rule Reconciliation"},{"line_number":159,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":18,"id":"f4275f5a_bdd4ba0c","line":156,"range":{"start_line":155,"start_character":49,"end_line":156,"end_character":73},"updated":"2026-08-26 22:37:56.000000000","message":"The behavior that\u0027s been encoded for NFS is that ipv6 rules are ignored when the driver or backend doesn\u0027t support them.\n\nSo in my opinion we should do the same for WEKAFS (and LUSTRE, etc). We could work on improving this in manila itself - i\u0027ve left a similar comment in the driver module","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"NFS shares use IP-based access rules backed by Weka client groups and export"},{"line_number":153,"context_line":"permissions."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"For both protocols, ``ip`` rules are IPv4-only.  An IPv6 rule is logged and"},{"line_number":156,"context_line":"reported back to Manila in the ``error`` state rather than being applied."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Access Rule Reconciliation"},{"line_number":159,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":18,"id":"9154f175_fd469659","line":156,"range":{"start_line":155,"start_character":49,"end_line":156,"end_character":73},"in_reply_to":"f4275f5a_bdd4ba0c","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":228,"context_line":"   weka_mount_point_base  \u003d /mnt/weka"},{"line_number":229,"context_line":"   weka_num_cores         \u003d 1"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Configuration Options"},{"line_number":232,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":".. list-table::"},{"line_number":235,"context_line":"   :header-rows: 1"},{"line_number":236,"context_line":"   :widths: 30 10 15 45"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   * - Option"},{"line_number":239,"context_line":"     - Type"},{"line_number":240,"context_line":"     - Default"},{"line_number":241,"context_line":"     - Description"},{"line_number":242,"context_line":"   * - ``weka_api_server``"},{"line_number":243,"context_line":"     - String"},{"line_number":244,"context_line":"     - *(required)*"},{"line_number":245,"context_line":"     - Hostname or IP of the Weka cluster management endpoint."},{"line_number":246,"context_line":"   * - ``weka_nfs_server``"},{"line_number":247,"context_line":"     - String"},{"line_number":248,"context_line":"     - *(none)*"},{"line_number":249,"context_line":"     - Address of the Weka NFS gateway, used in NFS export locations and"},{"line_number":250,"context_line":"       for snapshot copies.  Defaults to ``weka_api_server``."},{"line_number":251,"context_line":"   * - ``weka_api_port``"},{"line_number":252,"context_line":"     - Integer"},{"line_number":253,"context_line":"     - ``14000``"},{"line_number":254,"context_line":"     - TCP port for the Weka REST API."},{"line_number":255,"context_line":"   * - ``weka_ssl_verify``"},{"line_number":256,"context_line":"     - Boolean"},{"line_number":257,"context_line":"     - ``true``"},{"line_number":258,"context_line":"     - Verify the cluster TLS certificate.  Set to ``false`` for test"},{"line_number":259,"context_line":"       environments only."},{"line_number":260,"context_line":"   * - ``weka_username``"},{"line_number":261,"context_line":"     - String"},{"line_number":262,"context_line":"     - ``admin``"},{"line_number":263,"context_line":"     - Weka API username."},{"line_number":264,"context_line":"   * - ``weka_password``"},{"line_number":265,"context_line":"     - String"},{"line_number":266,"context_line":"     - *(required)*"},{"line_number":267,"context_line":"     - Weka API password."},{"line_number":268,"context_line":"   * - ``weka_organization``"},{"line_number":269,"context_line":"     - String"},{"line_number":270,"context_line":"     - ``Root``"},{"line_number":271,"context_line":"     - Weka organization the driver itself authenticates against."},{"line_number":272,"context_line":"   * - ``weka_org_admin_secret``"},{"line_number":273,"context_line":"     - String"},{"line_number":274,"context_line":"     - *(required)*"},{"line_number":275,"context_line":"     - Secret from which each project\u0027s Weka organization admin password"},{"line_number":276,"context_line":"       is derived, as ``HMAC-SHA256(secret, project_id)``.  WEKAFS tenant"},{"line_number":277,"context_line":"       isolation is always enabled, so the driver will not start without"},{"line_number":278,"context_line":"       this option.  Rotating it invalidates existing organization logins."},{"line_number":279,"context_line":"   * - ``weka_org_prefix``"},{"line_number":280,"context_line":"     - String"},{"line_number":281,"context_line":"     - ``manila-``"},{"line_number":282,"context_line":"     - Prefix for the per-project Weka organization name.  The full name"},{"line_number":283,"context_line":"       is ``\u003cprefix\u003e\u003cproject_id\u003e`` with dashes stripped."},{"line_number":284,"context_line":"   * - ``weka_org_user``"},{"line_number":285,"context_line":"     - String"},{"line_number":286,"context_line":"     - ``manila``"},{"line_number":287,"context_line":"     - Base username inside the per-project organization.  The driver"},{"line_number":288,"context_line":"       creates a ``TenantAdmin`` under this name for its own use and a"},{"line_number":289,"context_line":"       least-privilege mount user ``\u003cweka_org_user\u003e-mnt`` whose password"},{"line_number":290,"context_line":"       is handed to tenants as the access rule ``access_key``."},{"line_number":291,"context_line":"   * - ``weka_auth_token_dir``"},{"line_number":292,"context_line":"     - String"},{"line_number":293,"context_line":"     - ``/var/lib/manila/weka-tokens``"},{"line_number":294,"context_line":"     - Directory on the Manila host for per-organization mount-token"},{"line_number":295,"context_line":"       files used by the driver\u0027s own WEKAFS mounts.  Files are created"},{"line_number":296,"context_line":"       mode ``0600``."},{"line_number":297,"context_line":"   * - ``weka_security_policy_group``"},{"line_number":298,"context_line":"     - String"},{"line_number":299,"context_line":"     - *(none)*"},{"line_number":300,"context_line":"     - Named WEKAFS access-policy group definitions, semicolon-separated,"},{"line_number":301,"context_line":"       each ``\u003cgroup\u003e:\u003crw|ro\u003e:\u003ccidr[,cidr...]\u003e``.  A share type selects a"},{"line_number":302,"context_line":"       group through the ``weka:security_policy_group`` extra spec."},{"line_number":303,"context_line":"   * - ``weka_filesystem_group``"},{"line_number":304,"context_line":"     - String"},{"line_number":305,"context_line":"     - ``default``"},{"line_number":306,"context_line":"     - Filesystem group for newly created shares.  Created if absent."},{"line_number":307,"context_line":"   * - ``weka_share_name_prefix``"},{"line_number":308,"context_line":"     - String"},{"line_number":309,"context_line":"     - ``manila_``"},{"line_number":310,"context_line":"     - Prefix applied to Weka filesystem names created by Manila."},{"line_number":311,"context_line":"   * - ``weka_mount_point_base``"},{"line_number":312,"context_line":"     - String"},{"line_number":313,"context_line":"     - ``/mnt/weka``"},{"line_number":314,"context_line":"     - Base directory for WekaFS POSIX mounts on the Manila host."},{"line_number":315,"context_line":"   * - ``weka_num_cores``"},{"line_number":316,"context_line":"     - Integer"},{"line_number":317,"context_line":"     - ``1``"},{"line_number":318,"context_line":"     - CPU cores allocated to the WekaFS POSIX client (1-19)."},{"line_number":319,"context_line":"   * - ``weka_net_device``"},{"line_number":320,"context_line":"     - String"},{"line_number":321,"context_line":"     - *(none)*"},{"line_number":322,"context_line":"     - NIC for DPDK mode (e.g. ``eth0``).  Leave unset for UDP mode."},{"line_number":323,"context_line":"   * - ``weka_api_timeout``"},{"line_number":324,"context_line":"     - Integer"},{"line_number":325,"context_line":"     - ``30``"},{"line_number":326,"context_line":"     - HTTP timeout in seconds for Weka REST API requests (5-300)."},{"line_number":327,"context_line":"   * - ``weka_max_api_retries``"},{"line_number":328,"context_line":"     - Integer"},{"line_number":329,"context_line":"     - ``3``"},{"line_number":330,"context_line":"     - Maximum retries on transient API errors (429, 5xx), with"},{"line_number":331,"context_line":"       exponential back-off (0-10)."},{"line_number":332,"context_line":"   * - ``weka_api_pool_connections``"},{"line_number":333,"context_line":"     - Integer"},{"line_number":334,"context_line":"     - ``4``"},{"line_number":335,"context_line":"     - Number of urllib3 connection pools kept for the Weka API session"},{"line_number":336,"context_line":"       (1-20)."},{"line_number":337,"context_line":"   * - ``weka_api_pool_maxsize``"},{"line_number":338,"context_line":"     - Integer"},{"line_number":339,"context_line":"     - ``10``"},{"line_number":340,"context_line":"     - Maximum connections saved in the urllib3 pool (1-100)."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"Share Type Extra Specs"},{"line_number":343,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":18,"id":"245d91e4_1ac5e4e1","line":340,"range":{"start_line":231,"start_character":0,"end_line":340,"end_character":61},"updated":"2026-08-26 22:37:56.000000000","message":"You need an entry in manila/opts.py to enumerate all the driver\u0027s options. It\u0027ll get automatically rendered into the configuration reference so you don\u0027t need to hand-maintain a copy here.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":228,"context_line":"   weka_mount_point_base  \u003d /mnt/weka"},{"line_number":229,"context_line":"   weka_num_cores         \u003d 1"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Configuration Options"},{"line_number":232,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":".. list-table::"},{"line_number":235,"context_line":"   :header-rows: 1"},{"line_number":236,"context_line":"   :widths: 30 10 15 45"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"   * - Option"},{"line_number":239,"context_line":"     - Type"},{"line_number":240,"context_line":"     - Default"},{"line_number":241,"context_line":"     - Description"},{"line_number":242,"context_line":"   * - ``weka_api_server``"},{"line_number":243,"context_line":"     - String"},{"line_number":244,"context_line":"     - *(required)*"},{"line_number":245,"context_line":"     - Hostname or IP of the Weka cluster management endpoint."},{"line_number":246,"context_line":"   * - ``weka_nfs_server``"},{"line_number":247,"context_line":"     - String"},{"line_number":248,"context_line":"     - *(none)*"},{"line_number":249,"context_line":"     - Address of the Weka NFS gateway, used in NFS export locations and"},{"line_number":250,"context_line":"       for snapshot copies.  Defaults to ``weka_api_server``."},{"line_number":251,"context_line":"   * - ``weka_api_port``"},{"line_number":252,"context_line":"     - Integer"},{"line_number":253,"context_line":"     - ``14000``"},{"line_number":254,"context_line":"     - TCP port for the Weka REST API."},{"line_number":255,"context_line":"   * - ``weka_ssl_verify``"},{"line_number":256,"context_line":"     - Boolean"},{"line_number":257,"context_line":"     - ``true``"},{"line_number":258,"context_line":"     - Verify the cluster TLS certificate.  Set to ``false`` for test"},{"line_number":259,"context_line":"       environments only."},{"line_number":260,"context_line":"   * - ``weka_username``"},{"line_number":261,"context_line":"     - String"},{"line_number":262,"context_line":"     - ``admin``"},{"line_number":263,"context_line":"     - Weka API username."},{"line_number":264,"context_line":"   * - ``weka_password``"},{"line_number":265,"context_line":"     - String"},{"line_number":266,"context_line":"     - *(required)*"},{"line_number":267,"context_line":"     - Weka API password."},{"line_number":268,"context_line":"   * - ``weka_organization``"},{"line_number":269,"context_line":"     - String"},{"line_number":270,"context_line":"     - ``Root``"},{"line_number":271,"context_line":"     - Weka organization the driver itself authenticates against."},{"line_number":272,"context_line":"   * - ``weka_org_admin_secret``"},{"line_number":273,"context_line":"     - String"},{"line_number":274,"context_line":"     - *(required)*"},{"line_number":275,"context_line":"     - Secret from which each project\u0027s Weka organization admin password"},{"line_number":276,"context_line":"       is derived, as ``HMAC-SHA256(secret, project_id)``.  WEKAFS tenant"},{"line_number":277,"context_line":"       isolation is always enabled, so the driver will not start without"},{"line_number":278,"context_line":"       this option.  Rotating it invalidates existing organization logins."},{"line_number":279,"context_line":"   * - ``weka_org_prefix``"},{"line_number":280,"context_line":"     - String"},{"line_number":281,"context_line":"     - ``manila-``"},{"line_number":282,"context_line":"     - Prefix for the per-project Weka organization name.  The full name"},{"line_number":283,"context_line":"       is ``\u003cprefix\u003e\u003cproject_id\u003e`` with dashes stripped."},{"line_number":284,"context_line":"   * - ``weka_org_user``"},{"line_number":285,"context_line":"     - String"},{"line_number":286,"context_line":"     - ``manila``"},{"line_number":287,"context_line":"     - Base username inside the per-project organization.  The driver"},{"line_number":288,"context_line":"       creates a ``TenantAdmin`` under this name for its own use and a"},{"line_number":289,"context_line":"       least-privilege mount user ``\u003cweka_org_user\u003e-mnt`` whose password"},{"line_number":290,"context_line":"       is handed to tenants as the access rule ``access_key``."},{"line_number":291,"context_line":"   * - ``weka_auth_token_dir``"},{"line_number":292,"context_line":"     - String"},{"line_number":293,"context_line":"     - ``/var/lib/manila/weka-tokens``"},{"line_number":294,"context_line":"     - Directory on the Manila host for per-organization mount-token"},{"line_number":295,"context_line":"       files used by the driver\u0027s own WEKAFS mounts.  Files are created"},{"line_number":296,"context_line":"       mode ``0600``."},{"line_number":297,"context_line":"   * - ``weka_security_policy_group``"},{"line_number":298,"context_line":"     - String"},{"line_number":299,"context_line":"     - *(none)*"},{"line_number":300,"context_line":"     - Named WEKAFS access-policy group definitions, semicolon-separated,"},{"line_number":301,"context_line":"       each ``\u003cgroup\u003e:\u003crw|ro\u003e:\u003ccidr[,cidr...]\u003e``.  A share type selects a"},{"line_number":302,"context_line":"       group through the ``weka:security_policy_group`` extra spec."},{"line_number":303,"context_line":"   * - ``weka_filesystem_group``"},{"line_number":304,"context_line":"     - String"},{"line_number":305,"context_line":"     - ``default``"},{"line_number":306,"context_line":"     - Filesystem group for newly created shares.  Created if absent."},{"line_number":307,"context_line":"   * - ``weka_share_name_prefix``"},{"line_number":308,"context_line":"     - String"},{"line_number":309,"context_line":"     - ``manila_``"},{"line_number":310,"context_line":"     - Prefix applied to Weka filesystem names created by Manila."},{"line_number":311,"context_line":"   * - ``weka_mount_point_base``"},{"line_number":312,"context_line":"     - String"},{"line_number":313,"context_line":"     - ``/mnt/weka``"},{"line_number":314,"context_line":"     - Base directory for WekaFS POSIX mounts on the Manila host."},{"line_number":315,"context_line":"   * - ``weka_num_cores``"},{"line_number":316,"context_line":"     - Integer"},{"line_number":317,"context_line":"     - ``1``"},{"line_number":318,"context_line":"     - CPU cores allocated to the WekaFS POSIX client (1-19)."},{"line_number":319,"context_line":"   * - ``weka_net_device``"},{"line_number":320,"context_line":"     - String"},{"line_number":321,"context_line":"     - *(none)*"},{"line_number":322,"context_line":"     - NIC for DPDK mode (e.g. ``eth0``).  Leave unset for UDP mode."},{"line_number":323,"context_line":"   * - ``weka_api_timeout``"},{"line_number":324,"context_line":"     - Integer"},{"line_number":325,"context_line":"     - ``30``"},{"line_number":326,"context_line":"     - HTTP timeout in seconds for Weka REST API requests (5-300)."},{"line_number":327,"context_line":"   * - ``weka_max_api_retries``"},{"line_number":328,"context_line":"     - Integer"},{"line_number":329,"context_line":"     - ``3``"},{"line_number":330,"context_line":"     - Maximum retries on transient API errors (429, 5xx), with"},{"line_number":331,"context_line":"       exponential back-off (0-10)."},{"line_number":332,"context_line":"   * - ``weka_api_pool_connections``"},{"line_number":333,"context_line":"     - Integer"},{"line_number":334,"context_line":"     - ``4``"},{"line_number":335,"context_line":"     - Number of urllib3 connection pools kept for the Weka API session"},{"line_number":336,"context_line":"       (1-20)."},{"line_number":337,"context_line":"   * - ``weka_api_pool_maxsize``"},{"line_number":338,"context_line":"     - Integer"},{"line_number":339,"context_line":"     - ``10``"},{"line_number":340,"context_line":"     - Maximum connections saved in the urllib3 pool (1-100)."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"Share Type Extra Specs"},{"line_number":343,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":18,"id":"48e5aaa0_be5c7c90","line":340,"range":{"start_line":231,"start_character":0,"end_line":340,"end_character":61},"in_reply_to":"245d91e4_1ac5e4e1","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"``FileSystemNotFound`` errors in ``ensure_share``"},{"line_number":396,"context_line":"   The Weka filesystem was deleted outside Manila.  Either restore it or"},{"line_number":397,"context_line":"   remove the share from Manila with ``manila delete \u003cshare-id\u003e``."}],"source_content_type":"text/x-rst","patch_set":18,"id":"5bc02380_e33587ef","line":397,"range":{"start_line":397,"start_character":39,"end_line":397,"end_character":45},"updated":"2026-08-26 22:37:56.000000000","message":"openstack share","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":394,"context_line":""},{"line_number":395,"context_line":"``FileSystemNotFound`` errors in ``ensure_share``"},{"line_number":396,"context_line":"   The Weka filesystem was deleted outside Manila.  Either restore it or"},{"line_number":397,"context_line":"   remove the share from Manila with ``manila delete \u003cshare-id\u003e``."}],"source_content_type":"text/x-rst","patch_set":18,"id":"8e7132f2_2c623766","line":397,"range":{"start_line":397,"start_character":39,"end_line":397,"end_character":45},"in_reply_to":"5bc02380_e33587ef","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":true,"context_lines":[{"line_number":213,"context_line":"   weka_mount_point_base  \u003d /mnt/weka"},{"line_number":214,"context_line":"   weka_num_cores         \u003d 1"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Configuration Options"},{"line_number":217,"context_line":"~~~~~~~~~~~~~~~~~~~~~"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"The driver\u0027s options are registered in ``manila/opts.py``, so the full"},{"line_number":220,"context_line":"list with types and defaults is rendered into the sample ``manila.conf``"},{"line_number":221,"context_line":"and the configuration reference."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Share Type Extra Specs"},{"line_number":224,"context_line":"~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":19,"id":"208dcf9c_17b5a8c4","line":221,"range":{"start_line":216,"start_character":0,"end_line":221,"end_character":32},"updated":"2026-08-28 06:36:41.000000000","message":"you can drop this. An admin reading this won\u0027t need to care about how the opts show up in the configuration reference or the same conf file","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"}],"manila/common/constants.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"SUPPORTED_SHARE_PROTOCOLS \u003d ("},{"line_number":166,"context_line":"    \u0027NFS\u0027, \u0027CIFS\u0027, \u0027GLUSTERFS\u0027, \u0027HDFS\u0027, \u0027CEPHFS\u0027, \u0027MAPRFS\u0027, \u0027WEKAFS\u0027)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"SECURITY_SERVICES_ALLOWED_TYPES \u003d [\u0027active_directory\u0027, \u0027ldap\u0027, \u0027kerberos\u0027]"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"37e04b04_c8f2792d","line":167,"updated":"2026-06-17 23:14:17.000000000","message":"drop unnecessary blank line","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"9e17bd5d7fc3aa407949023b2e1078da420117ea","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"SUPPORTED_SHARE_PROTOCOLS \u003d ("},{"line_number":166,"context_line":"    \u0027NFS\u0027, \u0027CIFS\u0027, \u0027GLUSTERFS\u0027, \u0027HDFS\u0027, \u0027CEPHFS\u0027, \u0027MAPRFS\u0027, \u0027WEKAFS\u0027)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"SECURITY_SERVICES_ALLOWED_TYPES \u003d [\u0027active_directory\u0027, \u0027ldap\u0027, \u0027kerberos\u0027]"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"98c4d182_72962d7e","line":167,"in_reply_to":"37e04b04_c8f2792d","updated":"2026-06-22 11:44:04.000000000","message":"Done in PS8.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"}],"manila/privsep/weka.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"272d86688d3d8c1af0196fca7b23f94b78173575","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    weka_privsep.rsync(src, dst)"},{"line_number":30,"context_line":"\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import manila.privsep"},{"line_number":33,"context_line":"from oslo_concurrency import processutils"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":11,"id":"3b27b4cb_80c4280b","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":41},"updated":"2026-06-25 08:18:32.000000000","message":"Please follow the import order template:\n\nhttps://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import manila.privsep"},{"line_number":33,"context_line":"from oslo_concurrency import processutils"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"@manila.privsep.sys_admin_pctxt.entrypoint"}],"source_content_type":"text/x-python","patch_set":11,"id":"65a900fa_f4ee27b3","line":33,"in_reply_to":"3b27b4cb_80c4280b","updated":"2026-07-03 07:04:54.000000000","message":"Fixed in PS12: import order in manila/privsep/weka.py now follows the hacking import-order template (third-party oslo_concurrency before the first-party manila import).","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"}],"manila/share/drivers/weka/client.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"608e1ee25a95ec98251ffb74c87e6e1fd5d970a8","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_API_V2 \u003d \u0027/api/v2\u0027"},{"line_number":44,"context_line":"_DEFAULT_TIMEOUT \u003d 30"},{"line_number":45,"context_line":"_DEFAULT_RETRIES \u003d 3"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class WekaApiClient(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ca354048_b165634e","line":45,"range":{"start_line":43,"start_character":0,"end_line":45,"end_character":20},"updated":"2026-06-02 14:20:12.000000000","message":"Are we planning to make these configurable?","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"0a4a63fd07da6b7de1ed48ee0f6834de028da52c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_API_V2 \u003d \u0027/api/v2\u0027"},{"line_number":44,"context_line":"_DEFAULT_TIMEOUT \u003d 30"},{"line_number":45,"context_line":"_DEFAULT_RETRIES \u003d 3"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class WekaApiClient(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"a628d1f9_d7b860b4","line":45,"in_reply_to":"170635bf_27a81d4c","updated":"2026-06-22 11:44:26.000000000","message":"PS8: added an inline comment noting these defaults are overridden by the weka_api_timeout / weka_max_api_retries config options.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5cfd70406b1f8bada666dc197d0d315002190dfc","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_API_V2 \u003d \u0027/api/v2\u0027"},{"line_number":44,"context_line":"_DEFAULT_TIMEOUT \u003d 30"},{"line_number":45,"context_line":"_DEFAULT_RETRIES \u003d 3"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class WekaApiClient(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"170635bf_27a81d4c","line":45,"range":{"start_line":43,"start_character":0,"end_line":45,"end_character":20},"in_reply_to":"ca354048_b165634e","updated":"2026-06-16 09:42:04.000000000","message":"The effective values are already operator-configurable via the weka_api_timeout and weka_max_api_retries options in config.py, wired through do_setup(). I\u0027ll add an inline comment here pointing at those options to make the link explicit.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"608e1ee25a95ec98251ffb74c87e6e1fd5d970a8","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self._session \u003d requests.Session()"},{"line_number":87,"context_line":"        adapter \u003d req_adapters.HTTPAdapter("},{"line_number":88,"context_line":"            max_retries\u003d0,  # handled manually"},{"line_number":89,"context_line":"            pool_connections\u003d4,"},{"line_number":90,"context_line":"            pool_maxsize\u003d10,"},{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        self._session.mount(\u0027https://\u0027, adapter)"},{"line_number":93,"context_line":"        self._session.mount(\u0027http://\u0027, adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"087c29ed_148a0136","line":90,"range":{"start_line":88,"start_character":12,"end_line":90,"end_character":28},"updated":"2026-06-02 14:20:12.000000000","message":"shouldnt these be configurable?","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5cfd70406b1f8bada666dc197d0d315002190dfc","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self._session \u003d requests.Session()"},{"line_number":87,"context_line":"        adapter \u003d req_adapters.HTTPAdapter("},{"line_number":88,"context_line":"            max_retries\u003d0,  # handled manually"},{"line_number":89,"context_line":"            pool_connections\u003d4,"},{"line_number":90,"context_line":"            pool_maxsize\u003d10,"},{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        self._session.mount(\u0027https://\u0027, adapter)"},{"line_number":93,"context_line":"        self._session.mount(\u0027http://\u0027, adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"a4d8c2a6_f814c4c2","line":90,"range":{"start_line":88,"start_character":12,"end_line":90,"end_character":28},"in_reply_to":"087c29ed_148a0136","updated":"2026-06-16 09:42:04.000000000","message":"Yes, fixed","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"0a4a63fd07da6b7de1ed48ee0f6834de028da52c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        adapter \u003d req_adapters.HTTPAdapter("},{"line_number":88,"context_line":"            max_retries\u003d0,  # handled manually"},{"line_number":89,"context_line":"            pool_connections\u003d4,"},{"line_number":90,"context_line":"            pool_maxsize\u003d10,"},{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        self._session.mount(\u0027https://\u0027, adapter)"},{"line_number":93,"context_line":"        self._session.mount(\u0027http://\u0027, adapter)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fe33a25e_62049de4","line":90,"in_reply_to":"a4d8c2a6_f814c4c2","updated":"2026-06-22 11:44:26.000000000","message":"Confirmed configurable in PS8 (inline comment added linking to the config options).","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"b9bf8bdb_d982e0c9","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2026-06-17 23:14:17.000000000","message":"2024?","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"5884d2d7_e76b54ab","line":1,"in_reply_to":"b9bf8bdb_d982e0c9","updated":"2026-06-22 11:44:27.000000000","message":"PS8: updated the copyright year to 2026 across the driver files.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9eef2852_9854b23b","updated":"2026-06-17 23:14:17.000000000","message":"There\u0027s a lot of dead code in this module. Can you get rid of these unused methods?","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ae300bef_33d5fad4","in_reply_to":"9eef2852_9854b23b","updated":"2026-06-22 11:44:28.000000000","message":"Removed 34 unused methods in PS8.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5bdd0ef9a34cc499d68c33e153ead8a47a9e0371","unresolved":false,"context_lines":[{"line_number":777,"context_line":""},{"line_number":778,"context_line":"        DELETE /nfs/permissions/{uid}"},{"line_number":779,"context_line":"        \"\"\""},{"line_number":780,"context_line":"        return self._delete(\u0027/nfs/permissions/{uid}\u0027.format(uid\u003dpermission_uid))"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    def list_client_groups(self):"},{"line_number":783,"context_line":"        \"\"\"Return all NFS client groups."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba6cf04d_3eb7a2af","line":780,"updated":"2026-06-17 14:43:50.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5bdd0ef9a34cc499d68c33e153ead8a47a9e0371","unresolved":false,"context_lines":[{"line_number":810,"context_line":"        else:"},{"line_number":811,"context_line":"            payload \u003d {\u0027dns\u0027: rule_value}"},{"line_number":812,"context_line":"        result \u003d self._post("},{"line_number":813,"context_line":"            \u0027/nfs/clientGroups/{uid}/rules\u0027.format(uid\u003dgroup_uid), json\u003dpayload)"},{"line_number":814,"context_line":"        return result.get(\u0027data\u0027, result)"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    def get_client_group(self, group_uid):"}],"source_content_type":"text/x-python","patch_set":7,"id":"aa834cba_68debfcf","line":813,"updated":"2026-06-17 14:43:50.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"}],"manila/share/drivers/weka/config.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c6aa4e04b333ca14f197629f2d33faba32df08d8","unresolved":true,"context_lines":[{"line_number":200,"context_line":"        ),"},{"line_number":201,"context_line":"    ),"},{"line_number":202,"context_line":"    cfg.IntOpt("},{"line_number":203,"context_line":"        \u0027weka_posix_mount_timeout\u0027,"},{"line_number":204,"context_line":"        default\u003d60,"},{"line_number":205,"context_line":"        min\u003d10,"},{"line_number":206,"context_line":"        max\u003d600,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1c3cf67a_42e75f77","line":203,"updated":"2026-08-08 07:05:45.000000000","message":"`weka_posix_mount_timeout` is defined here but never referenced. Remove it if it is not needed.","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        ),"},{"line_number":201,"context_line":"    ),"},{"line_number":202,"context_line":"    cfg.IntOpt("},{"line_number":203,"context_line":"        \u0027weka_posix_mount_timeout\u0027,"},{"line_number":204,"context_line":"        default\u003d60,"},{"line_number":205,"context_line":"        min\u003d10,"},{"line_number":206,"context_line":"        max\u003d600,"}],"source_content_type":"text/x-python","patch_set":15,"id":"eb8b434e_258681f0","line":203,"in_reply_to":"1c3cf67a_42e75f77","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"oslo.config options for the Weka Manila share driver.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"c264234f_f09f9788","line":15,"updated":"2026-08-26 22:37:56.000000000","message":"these opts need to be added to manila/opts.py\n\nor they won\u0027t show up in the sample manila.conf and config reference","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"oslo.config options for the Weka Manila share driver.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"0a7d17a9_754d0f5e","line":15,"in_reply_to":"c264234f_f09f9788","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/share/drivers/weka/driver.py":[{"author":{"_account_id":36686,"name":"Inyong Hong","display_name":"hongp","email":"inyong.hong@samsung.com","username":"hong-p"},"change_message_id":"a36c42e0b3cab890184971ad85e65af2f3a4c0e5","unresolved":true,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return rule_state_map"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _update_wekafs_access(self, share, add_rules, delete_rules):"},{"line_number":661,"context_line":"        \"\"\"Handle WekaFS access rules."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        Access control for the WekaFS (POSIX client) protocol is managed"}],"source_content_type":"text/x-python","patch_set":5,"id":"d75ccb39_a0eee23d","line":660,"updated":"2026-05-31 21:37:18.000000000","message":"For WEKAFS protocol shares, _update_wekafs_access performs no actual operation — all access rules are accepted and immediately marked active without any enforcement being applied to the\n   Weka cluster. The docstring states that access control is \"managed via Weka filesystem authentication and mount tokens\", but looking at the implementation:\n\n1. Filesystems are created with auth_required\u003dFalse (hardcoded), so mount tokens are not required at all\n2. get_filesystem_mount_token() is implemented in client.py but is never called anywhere in driver.py\n\nCould you clarify the intended design here? Specifically:\n\nIf the plan is to use mount tokens, there is no clear way to expose the token to the end user. Manila surfaces share information through export locations and access rule responses neither of which has a standard field for carrying a short-lived mount token. How would a user actually retrieve the token they need to mount the share?\n\nWhy was the security policy approach not used for WEKAFS access control? Attaching IP-based security policies to the filesystem on update_access would map naturally to Manila\u0027s access rule model, similar to how the NFS side uses client groups.\n\nAs it stands, WEKAFS shares have no access control enforced at the Weka level regardless of what rules are configured in Manila. Is this an intentional interim state, or is there a follow-up patch planned?","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f446506a7ed699cc3a04d935c02373db6eb2a4a6","unresolved":false,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return rule_state_map"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _update_wekafs_access(self, share, add_rules, delete_rules):"},{"line_number":661,"context_line":"        \"\"\"Handle WekaFS access rules."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        Access control for the WekaFS (POSIX client) protocol is managed"}],"source_content_type":"text/x-python","patch_set":5,"id":"d5227da3_43d4bac5","line":660,"in_reply_to":"4701a7f2_b9f08513","updated":"2026-07-03 13:26:25.000000000","message":"Marking resolved — tracked as a roadmap follow-up (WEKAFS IP-based access enforcement).","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"0a4a63fd07da6b7de1ed48ee0f6834de028da52c","unresolved":true,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return rule_state_map"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _update_wekafs_access(self, share, add_rules, delete_rules):"},{"line_number":661,"context_line":"        \"\"\"Handle WekaFS access rules."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        Access control for the WekaFS (POSIX client) protocol is managed"}],"source_content_type":"text/x-python","patch_set":5,"id":"4701a7f2_b9f08513","line":660,"in_reply_to":"d423f5e1_0e75e152","updated":"2026-06-22 11:44:26.000000000","message":"PS8: the doc and code now consistently report WEKAFS access rules as accepted no-ops (\u0027active\u0027). IP-based security-policy enforcement for WEKAFS shares is planned as a follow-up.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5cfd70406b1f8bada666dc197d0d315002190dfc","unresolved":true,"context_lines":[{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return rule_state_map"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _update_wekafs_access(self, share, add_rules, delete_rules):"},{"line_number":661,"context_line":"        \"\"\"Handle WekaFS access rules."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        Access control for the WekaFS (POSIX client) protocol is managed"}],"source_content_type":"text/x-python","patch_set":5,"id":"d423f5e1_0e75e152","line":660,"in_reply_to":"d75ccb39_a0eee23d","updated":"2026-06-16 09:42:04.000000000","message":"We plan to add the ip based security policies later on.","commit_id":"77b9f5adcb7dd0ffec2f426067ada7779030b64a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":368,"context_line":"            )"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Allow the NFS server to apply the new permissions."},{"line_number":371,"context_line":"            time.sleep(5)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            os.makedirs(src_mnt, exist_ok\u003dTrue)"},{"line_number":374,"context_line":"            os.makedirs(dst_mnt, exist_ok\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ec6a1bbe_892563f3","line":371,"range":{"start_line":371,"start_character":0,"end_line":371,"end_character":25},"updated":"2026-06-17 23:14:17.000000000","message":"can we avoid this with a utils.retry instead?","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            )"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            # Allow the NFS server to apply the new permissions."},{"line_number":371,"context_line":"            time.sleep(5)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            os.makedirs(src_mnt, exist_ok\u003dTrue)"},{"line_number":374,"context_line":"            os.makedirs(dst_mnt, exist_ok\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"179e9c2d_8415875f","line":371,"in_reply_to":"ec6a1bbe_892563f3","updated":"2026-06-22 11:44:27.000000000","message":"PS8: the ad-hoc retry was removed in the async create_share_from_snapshot refactor. API-level retries live in client._request (which also handles 401 re-auth).","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        fs_uid \u003d fs[\u0027uid\u0027]"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        # Remove NFS permissions before deleting."},{"line_number":479,"context_line":"        try:"},{"line_number":480,"context_line":"            self._remove_all_nfs_permissions(fs_name)"},{"line_number":481,"context_line":"        except Exception as exc:"},{"line_number":482,"context_line":"            LOG.warning("},{"line_number":483,"context_line":"                \"Failed to remove NFS permissions for share %s: %s\","},{"line_number":484,"context_line":"                share[\u0027id\u0027], exc,"},{"line_number":485,"context_line":"            )"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # Unmount locally if mounted."},{"line_number":488,"context_line":"        mount_point \u003d self._mount_point(fs_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"63e49cc4_df9bd5db","line":485,"range":{"start_line":478,"start_character":7,"end_line":485,"end_character":13},"updated":"2026-06-17 23:14:17.000000000","message":"the driver gets an \"update_access\" call prior to deletion","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"ef5aa22b744161fd63c5d952f19966e372b5faee","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            LOG.warning("},{"line_number":483,"context_line":"                \"Failed to remove NFS permissions for share %s: %s\","},{"line_number":484,"context_line":"                share[\u0027id\u0027], exc,"},{"line_number":485,"context_line":"            )"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # Unmount locally if mounted."},{"line_number":488,"context_line":"        mount_point \u003d self._mount_point(fs_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3c5b19b5_66344ed0","line":485,"in_reply_to":"63e49cc4_df9bd5db","updated":"2026-06-22 11:44:27.000000000","message":"Acknowledged — the driver clears NFS exports on access removal/delete, so the update_access-before-deletion call is handled.","commit_id":"f66b016a919e08f034e28c85b2e18e95e1e358fa"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":37,"context_line":"  enabled_share_backends \u003d weka"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  [weka]"},{"line_number":40,"context_line":"  share_driver \u003d manila.share.drivers.weka.driver:WekaShareDriver"},{"line_number":41,"context_line":"  share_backend_name \u003d weka"},{"line_number":42,"context_line":"  driver_handles_share_servers \u003d false"},{"line_number":43,"context_line":"  snapshot_support \u003d true"}],"source_content_type":"text/x-python","patch_set":7,"id":"ca3f6d66_cde24261","line":40,"range":{"start_line":40,"start_character":17,"end_line":40,"end_character":65},"updated":"2026-06-17 23:14:17.000000000","message":"`manila.share.drivers.weka.driver.WekaShareDriver`","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  enabled_share_backends \u003d weka"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"  [weka]"},{"line_number":40,"context_line":"  share_driver \u003d manila.share.drivers.weka.driver:WekaShareDriver"},{"line_number":41,"context_line":"  share_backend_name \u003d weka"},{"line_number":42,"context_line":"  driver_handles_share_servers \u003d false"},{"line_number":43,"context_line":"  snapshot_support \u003d true"}],"source_content_type":"text/x-python","patch_set":7,"id":"9caa4e0b_448a86a7","line":40,"in_reply_to":"ca3f6d66_cde24261","updated":"2026-06-22 11:44:28.000000000","message":"Done in PS8 — the docstring now uses the dotted module path.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":"    if \u0027/\u0027 not in cidr_str:"},{"line_number":110,"context_line":"        return cidr_str"},{"line_number":111,"context_line":"    try:"},{"line_number":112,"context_line":"        net \u003d ipaddress.IPv4Network(cidr_str, strict\u003dFalse)"},{"line_number":113,"context_line":"        return \u0027{}/{}\u0027.format(str(net.network_address), str(net.netmask))"},{"line_number":114,"context_line":"    except ValueError:"},{"line_number":115,"context_line":"        return cidr_str"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class WekaShareDriver(driver.ShareDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"2de06654_c38e1e66","line":115,"range":{"start_line":111,"start_character":0,"end_line":115,"end_character":23},"updated":"2026-06-17 23:14:17.000000000","message":"Is IPv6 not supported? If it isn\u0027t reject the address rather than allowing it to be passed unchanged?","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        net \u003d ipaddress.IPv4Network(cidr_str, strict\u003dFalse)"},{"line_number":113,"context_line":"        return \u0027{}/{}\u0027.format(str(net.network_address), str(net.netmask))"},{"line_number":114,"context_line":"    except ValueError:"},{"line_number":115,"context_line":"        return cidr_str"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class WekaShareDriver(driver.ShareDriver):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ea319ccb_25e14498","line":115,"in_reply_to":"2de06654_c38e1e66","updated":"2026-06-22 11:44:28.000000000","message":"PS8: IPv6 IP rules are now rejected with InvalidShareAccess (the driver supports IPv4 access rules only) instead of being passed through unchanged.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":290,"context_line":"            \"Share %s created successfully (fs_uid\u003d%s)\", share[\u0027id\u0027], fs_uid)"},{"line_number":291,"context_line":"        return export_locations"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":294,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":295,"context_line":"        \"\"\"Create a new share populated with data from a snapshot."},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"4ae9e105_70326f38","line":293,"range":{"start_line":293,"start_character":8,"end_line":293,"end_character":34},"updated":"2026-06-17 23:14:17.000000000","message":"Hmm, this method does a full rsync through NFS mounts on the Manila host. This works for small shares, but has a scalability problem: all data is routed Weka → NFS → Manila host → NFS → Weka, and the method blocks the manager thread synchronously for the entire copy. So, A 500 GB share could take hours.\n\nThe `create_share_from_snapshot` contract was designed for exactly this\nsituation — drivers can return `{\u0027status\u0027: \u0027creating_from_snapshot\u0027}` to\nhand off to asynchronous completion, with `get_share_status` providing\nprogress polling. This driver doesn\u0027t implement `get_share_status`, so it can\u0027t use this path.\n\nSuggestions (any one would help):\n\n1. Async completion: kick off the rsync in a background thread/process,\n   return `{\u0027status\u0027: \u0027creating_from_snapshot\u0027}`, and implement \n   `get_share_status` to poll for completion. This unblocks the manager.\n\n2. Server-side data movement: investigate whether Weka writable snapshots or any\n   other cluster-side mechanism can keep the data copy off the Manila host \n   entirely. Even a temporary writable snapshot used as a CoW source\n   that gets detached afterward would be orders of magnitude faster \n   than rsync-over-NFS.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            \"Share %s created successfully (fs_uid\u003d%s)\", share[\u0027id\u0027], fs_uid)"},{"line_number":291,"context_line":"        return export_locations"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":294,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":295,"context_line":"        \"\"\"Create a new share populated with data from a snapshot."},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ed6af2bc_3a4ba820","line":293,"in_reply_to":"4ae9e105_70326f38","updated":"2026-06-22 11:44:28.000000000","message":"PS8: create_share_from_snapshot is now asynchronous — it returns \u0027creating_from_snapshot\u0027 and a new get_share_status() polls to completion, so the manager thread is no longer blocked. There is no server-side Weka clone API, so rsync remains the transport; the NFS path now fails fast if weka_nfs_server is unset.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":328,"context_line":"        fs \u003d self._create_filesystem_idempotent("},{"line_number":329,"context_line":"            new_fs_name, group_name, size_bytes)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        nfs_server \u003d self.configuration.safe_get(\u0027weka_nfs_server\u0027)"},{"line_number":332,"context_line":"        if not nfs_server:"},{"line_number":333,"context_line":"            raise exception.ManilaException("},{"line_number":334,"context_line":"                message\u003d_(\u0027weka_nfs_server must be configured for \u0027"},{"line_number":335,"context_line":"                          \u0027create_share_from_snapshot\u0027))"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        # Determine the local IP that routes to the NFS server."},{"line_number":338,"context_line":"        s \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5861ed79_7ad83f62","line":335,"range":{"start_line":331,"start_character":0,"end_line":335,"end_character":56},"updated":"2026-06-17 23:14:17.000000000","message":"maybe do this check in the driver\u0027s init, set a global boolean variable and report that as the capability in `update_share_stats()`. That way you prevent this issue from the get go.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if not nfs_server:"},{"line_number":333,"context_line":"            raise exception.ManilaException("},{"line_number":334,"context_line":"                message\u003d_(\u0027weka_nfs_server must be configured for \u0027"},{"line_number":335,"context_line":"                          \u0027create_share_from_snapshot\u0027))"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        # Determine the local IP that routes to the NFS server."},{"line_number":338,"context_line":"        s \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"}],"source_content_type":"text/x-python","patch_set":7,"id":"6ed66c2b_adcb5284","line":335,"in_reply_to":"5861ed79_7ad83f62","updated":"2026-06-22 11:44:28.000000000","message":"PS8: the prerequisite check moved to do_setup (cached), create_share_from_snapshot fails fast when weka_nfs_server is unset, and the capability is reported in _update_share_stats.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":347,"context_line":"        tmp_cg_name \u003d \u0027manila-snap-{}\u0027.format(share[\u0027id\u0027][:8])"},{"line_number":348,"context_line":"        cg_uid \u003d None"},{"line_number":349,"context_line":"        rule_uid \u003d None"},{"line_number":350,"context_line":"        src_mnt \u003d \u0027/tmp/manila_snap_src_{}\u0027.format(share[\u0027id\u0027][:8])"},{"line_number":351,"context_line":"        dst_mnt \u003d \u0027/tmp/manila_snap_dst_{}\u0027.format(share[\u0027id\u0027][:8])"},{"line_number":352,"context_line":"        src_mounted \u003d False"},{"line_number":353,"context_line":"        dst_mounted \u003d False"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9527baeb_302d0f06","line":351,"range":{"start_line":350,"start_character":0,"end_line":351,"end_character":67},"updated":"2026-06-17 23:14:17.000000000","message":"these predictable paths are bad for security. \n\n(1) Manila\u0027s got a data directory that may be used for this\n(2) if you\u0027d like to use /tmp,  Use `tempfile.mkdtemp()` instead.\n\nalso, is the `WekaMount` construct useful for this?","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        cg_uid \u003d None"},{"line_number":349,"context_line":"        rule_uid \u003d None"},{"line_number":350,"context_line":"        src_mnt \u003d \u0027/tmp/manila_snap_src_{}\u0027.format(share[\u0027id\u0027][:8])"},{"line_number":351,"context_line":"        dst_mnt \u003d \u0027/tmp/manila_snap_dst_{}\u0027.format(share[\u0027id\u0027][:8])"},{"line_number":352,"context_line":"        src_mounted \u003d False"},{"line_number":353,"context_line":"        dst_mounted \u003d False"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"00563698_cac95b85","line":351,"in_reply_to":"9527baeb_302d0f06","updated":"2026-06-22 11:44:28.000000000","message":"PS8: switched to tempfile.mkdtemp() and the WekaMount context manager.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":353,"context_line":"        dst_mounted \u003d False"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            cg \u003d self._client.create_client_group(tmp_cg_name)"},{"line_number":357,"context_line":"            cg_uid \u003d cg[\u0027uid\u0027]"},{"line_number":358,"context_line":"            rule \u003d self._client.add_client_group_rule(cg_uid, \u0027IP\u0027, local_ip)"},{"line_number":359,"context_line":"            rule_uid \u003d rule.get(\u0027uid\u0027) if isinstance(rule, dict) else None"}],"source_content_type":"text/x-python","patch_set":7,"id":"c208f8e4_b6b4c3a9","line":356,"updated":"2026-06-17 23:14:17.000000000","message":"method is becoming too long to be readable.. maybe reuse existing access methods for this? or refactor into separate internal methods","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        dst_mounted \u003d False"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            cg \u003d self._client.create_client_group(tmp_cg_name)"},{"line_number":357,"context_line":"            cg_uid \u003d cg[\u0027uid\u0027]"},{"line_number":358,"context_line":"            rule \u003d self._client.add_client_group_rule(cg_uid, \u0027IP\u0027, local_ip)"},{"line_number":359,"context_line":"            rule_uid \u003d rule.get(\u0027uid\u0027) if isinstance(rule, dict) else None"}],"source_content_type":"text/x-python","patch_set":7,"id":"cd05b41c_2c876fdd","line":356,"in_reply_to":"c208f8e4_b6b4c3a9","updated":"2026-06-22 11:44:28.000000000","message":"PS8: split into _run_snapshot_copy / _copy_snapshot_nfs / _copy_snapshot_wekafs / _rsync_snapshot.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":383,"context_line":"                \u0027mount\u0027, \u0027-t\u0027, \u0027nfs\u0027,"},{"line_number":384,"context_line":"                \u0027{}:/{}\u0027.format(nfs_server, src_fs_name),"},{"line_number":385,"context_line":"                src_mnt,"},{"line_number":386,"context_line":"                run_as_root\u003dTrue, root_helper\u003d\u0027sudo\u0027,"},{"line_number":387,"context_line":"            )"},{"line_number":388,"context_line":"            src_mounted \u003d True"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9d1462c5_7ebd513c","line":386,"range":{"start_line":386,"start_character":16,"end_line":386,"end_character":53},"updated":"2026-06-17 23:14:17.000000000","message":"this is not good.. \n\n`root_helper\u003d\u0027sudo\u0027` is used multiple places in this driver.\n\nManila drivers today pass `run_as_root\u003dTrue` without an explicit `root_helper`, which lets the system use the configured rootwrap (`sudo manila-rootwrap /etc/manila/rootwrap.conf`). Hardcoding `sudo` bypasses the rootwrap security layer that restricts which commands can be run as root.\n\nAlso, we\u0027re actively trying to kill rootwrap in favor of oslo-privsep: https://review.opendev.org/q/topic:%22bp/privsep-migration%22\n\nThis would be the most sustainable way to proceed. If you need help unpacking this, @ces.eduardo98@gmail.com can help.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"52b34d9809db7a58650fbd83eb4455de3338c2d0","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                \u0027mount\u0027, \u0027-t\u0027, \u0027nfs\u0027,"},{"line_number":384,"context_line":"                \u0027{}:/{}\u0027.format(nfs_server, src_fs_name),"},{"line_number":385,"context_line":"                src_mnt,"},{"line_number":386,"context_line":"                run_as_root\u003dTrue, root_helper\u003d\u0027sudo\u0027,"},{"line_number":387,"context_line":"            )"},{"line_number":388,"context_line":"            src_mounted \u003d True"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9d016840_93a913ad","line":386,"in_reply_to":"9d1462c5_7ebd513c","updated":"2026-06-22 16:41:41.000000000","message":"Correction to my earlier note: PS11 migrates this to oslo-privsep rather than deferring it. mount/umount/rsync now run in manila\u0027s sys_admin privsep daemon via manila/privsep/weka.py entrypoints — no sudo/rootwrap in the driver. The Weka third-party CI on PS11 is green (create_share_from_snapshot exercises this path).","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                \u0027mount\u0027, \u0027-t\u0027, \u0027nfs\u0027,"},{"line_number":384,"context_line":"                \u0027{}:/{}\u0027.format(nfs_server, src_fs_name),"},{"line_number":385,"context_line":"                src_mnt,"},{"line_number":386,"context_line":"                run_as_root\u003dTrue, root_helper\u003d\u0027sudo\u0027,"},{"line_number":387,"context_line":"            )"},{"line_number":388,"context_line":"            src_mounted \u003d True"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d9a70e10_8b42b9a9","line":386,"in_reply_to":"9d1462c5_7ebd513c","updated":"2026-06-22 11:44:28.000000000","message":"PS8: removed the hardcoded root_helper\u003d\u0027sudo\u0027 at all sites so the configured rootwrap is used. The oslo-privsep migration is noted as a follow-up.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        export_locations \u003d self._build_export_locations("},{"line_number":463,"context_line":"            share, new_fs_name, fs[\u0027uid\u0027], share_proto)"},{"line_number":464,"context_line":"        return export_locations"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":467,"context_line":"        \"\"\"Delete a share\u0027s underlying Weka filesystem."}],"source_content_type":"text/x-python","patch_set":7,"id":"bb22249a_f230d35d","line":464,"range":{"start_line":464,"start_character":15,"end_line":464,"end_character":31},"updated":"2026-06-17 23:14:17.000000000","message":"This is returning a bare list of export locations (the legacy format). The current interface contract expects a dict:\n\n```\n{\u0027status\u0027: \u0027available\u0027, \u0027export_locations\u0027: [...]}\n```\n\nThe manager handles the legacy list format so this works today. But the dict format with an explicit `status` key is the documented contract and enables async completion via `\u0027creating_from_snapshot\u0027` status if needed in the future.\n\nFor example, all this rsync stuff that you\u0027re doing could be offloaded by the driver some day, and you can implement an async creation by letting manila know that you\u0027re \"creating_from_snapshot\" and manila will periodically check if the share is ready.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        export_locations \u003d self._build_export_locations("},{"line_number":463,"context_line":"            share, new_fs_name, fs[\u0027uid\u0027], share_proto)"},{"line_number":464,"context_line":"        return export_locations"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":467,"context_line":"        \"\"\"Delete a share\u0027s underlying Weka filesystem."}],"source_content_type":"text/x-python","patch_set":7,"id":"df2c3e1e_95e9f1b1","line":464,"in_reply_to":"bb22249a_f230d35d","updated":"2026-06-22 11:44:28.000000000","message":"PS8: create_share_from_snapshot now returns the {\u0027status\u0027: ..., \u0027export_locations\u0027: ...} dict (creating_from_snapshot).","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":544,"context_line":"            \"Shrinking share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":545,"context_line":"        self._client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":548,"context_line":"        \"\"\"Verify share is exported and return current export locations."},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        Called by Manila on restart/recovery to re-verify shares."}],"source_content_type":"text/x-python","patch_set":7,"id":"088073cc_20f944a2","line":547,"range":{"start_line":547,"start_character":0,"end_line":547,"end_character":62},"updated":"2026-06-17 23:14:17.000000000","message":"New drivers should implement \"ensure_shares\" instead of the deprecated \"ensure_share\" interface. \"ensure_shares\" is a bulk update entry point, and it is wired up to an API, in addition to being able to be a maintenance op on restarts. It is associated with \"get_backend_info\" (this has to be implemented).. \n\nHow the manager uses these (see `manila/share/manager.py`):\n\n1. On startup, the manager calls `get_backend_info()`. It hashes the returned dict and compares it to the hash from the previous run. If the hash is unchanged, the ensure_shares() is skipped entirely.\n2. If the hash changed (or it\u0027s the first run), the manager calls\n`ensure_shares(context, shares)` with the full list of shares at once.\n3. If either method raises `NotImplementedError`, the manager falls back\nto calling `ensure_share(context, share)` individually for every share\non every restart.. \n\n\nOn a backend with hundreds of shares, this means hundreds of individual `get_filesystem_by_name` API calls on every service restart even when nothing changed.\n\n\nSo, implement `get_backend_info`... have it return a dict of config/connection values that, if changed, mean exports need re-verification. Existing drivers return\nthings like API server address, export IPs, driver version, or mount paths. For Weka, something like:\n\n```\n      def get_backend_info(self, context):\n          return {\n              \u0027weka_api_server\u0027: self.configuration.safe_get(\u0027weka_api_server\u0027),\n              \u0027weka_mount_point_base\u0027: self.configuration.safe_get(\n                  \u0027weka_mount_point_base\u0027),\n          }\n```\n\n`ensure_shares` receives the full share list and returns a dict keyed by\nshare ID with updates (export locations, status, etc.). It can batch API\ncalls instead of doing one-at-a-time lookups:\n\n```\n      def ensure_shares(self, context, shares):\n          updates \u003d {}\n          for share in shares:\n              try:\n                  export_locations \u003d self._ensure_share(context, share)\n                  updates[share[\u0027id\u0027]] \u003d {\n                      \u0027export_locations\u0027: export_locations,\n                  }\n              except exception.ShareNotFound:\n                  updates[share[\u0027id\u0027]] \u003d {\u0027status\u0027: constants.STATUS_ERROR}\n          return updates\n```\n\nSee LVM, CephFS, VastData, and other drivers for real-world examples.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            \"Shrinking share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":545,"context_line":"        self._client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":548,"context_line":"        \"\"\"Verify share is exported and return current export locations."},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        Called by Manila on restart/recovery to re-verify shares."}],"source_content_type":"text/x-python","patch_set":7,"id":"ae8a596f_de44fb92","line":547,"in_reply_to":"088073cc_20f944a2","updated":"2026-06-22 11:44:28.000000000","message":"PS8: implemented ensure_shares + get_backend_info; ensure_shares fetches the filesystem list once.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":544,"context_line":"            \"Shrinking share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":545,"context_line":"        self._client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def ensure_share(self, context, share, share_server\u003dNone):"},{"line_number":548,"context_line":"        \"\"\"Verify share is exported and return current export locations."},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        Called by Manila on restart/recovery to re-verify shares."},{"line_number":551,"context_line":"        \"\"\""},{"line_number":552,"context_line":"        fs_name \u003d self._share_name(share[\u0027id\u0027])"},{"line_number":553,"context_line":"        fs \u003d self._client.get_filesystem_by_name(fs_name)"},{"line_number":554,"context_line":"        if not fs:"},{"line_number":555,"context_line":"            raise exception.ShareNotFound(share_id\u003dshare[\u0027id\u0027])"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        fs_uid \u003d fs[\u0027uid\u0027]"},{"line_number":558,"context_line":"        share_proto \u003d share[\u0027share_proto\u0027].upper()"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        # Re-mount POSIX if needed."},{"line_number":561,"context_line":"        mount_point \u003d self._mount_point(fs_name)"},{"line_number":562,"context_line":"        if (share_proto \u003d\u003d _WEKAFS_PROTO"},{"line_number":563,"context_line":"                and not weka_posix.WekaMount.is_mounted(mount_point)):"},{"line_number":564,"context_line":"            LOG.info("},{"line_number":565,"context_line":"                \"Re-mounting WekaFS share %s at %s\","},{"line_number":566,"context_line":"                share[\u0027id\u0027], mount_point,"},{"line_number":567,"context_line":"            )"},{"line_number":568,"context_line":"            mnt \u003d weka_posix.WekaMount("},{"line_number":569,"context_line":"                backends\u003dself._get_backends(),"},{"line_number":570,"context_line":"                fs_name\u003dfs_name,"},{"line_number":571,"context_line":"                mount_point\u003dmount_point,"},{"line_number":572,"context_line":"                num_cores\u003dself.configuration.safe_get(\u0027weka_num_cores\u0027) or 1,"},{"line_number":573,"context_line":"                net\u003dself.configuration.safe_get(\u0027weka_net_device\u0027),"},{"line_number":574,"context_line":"            )"},{"line_number":575,"context_line":"            mnt.mount()"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        return self._build_export_locations("},{"line_number":578,"context_line":"            share, fs_name, fs_uid, share_proto)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    # ------------------------------------------------------------------"},{"line_number":581,"context_line":"    # Access control"},{"line_number":582,"context_line":"    # ------------------------------------------------------------------"}],"source_content_type":"text/x-python","patch_set":7,"id":"622cb893_549c902f","line":579,"range":{"start_line":547,"start_character":4,"end_line":579,"end_character":0},"updated":"2026-06-17 23:14:17.000000000","message":"Please drop this, and instead implement \"ensure_shares()\" and \"get_backend_info()\". \n\nensure_shares hands you all the shares, and is tied to an API in addition to being a recovery mechanism on service restarts. The advantage of this mechanism is that get_backend_info can contain conditions to trigger it. \n\nIf you have any backend configuration opts that will need a","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        return self._build_export_locations("},{"line_number":578,"context_line":"            share, fs_name, fs_uid, share_proto)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    # ------------------------------------------------------------------"},{"line_number":581,"context_line":"    # Access control"},{"line_number":582,"context_line":"    # ------------------------------------------------------------------"}],"source_content_type":"text/x-python","patch_set":7,"id":"05a8345a_b4f1d075","line":579,"in_reply_to":"622cb893_549c902f","updated":"2026-06-22 11:44:28.000000000","message":"PS8: removed ensure_share and implemented ensure_shares + get_backend_info, as suggested.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":675,"context_line":"        workflow completes normally."},{"line_number":676,"context_line":"        \"\"\""},{"line_number":677,"context_line":"        rule_state_map \u003d {}"},{"line_number":678,"context_line":"        for rule in add_rules or []:"},{"line_number":679,"context_line":"            LOG.info("},{"line_number":680,"context_line":"                \"WekaFS shares do not enforce Manila access rules \""},{"line_number":681,"context_line":"                \"(type\u003d%s, rule\u003d%s). Access control for WEKAFS shares is \""},{"line_number":682,"context_line":"                \"managed via Weka filesystem authentication and mount tokens.\","},{"line_number":683,"context_line":"                rule[\u0027access_type\u0027], rule[\u0027access_id\u0027],"},{"line_number":684,"context_line":"            )"},{"line_number":685,"context_line":"            rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027active\u0027}"},{"line_number":686,"context_line":"        return rule_state_map"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def _remove_nfs_rule(self, fs_name, rule):"},{"line_number":689,"context_line":"        \"\"\"Remove NFS permissions associated with an access rule."}],"source_content_type":"text/x-python","patch_set":7,"id":"a232fea5_065db0e7","line":686,"range":{"start_line":678,"start_character":8,"end_line":686,"end_character":29},"updated":"2026-06-17 23:14:17.000000000","message":"In the description , you describe setting all rules to \"error\". \n\nthey\u0027re being set to \"active\u0027 here. I\u0027d prefer \"active\".","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                rule[\u0027access_type\u0027], rule[\u0027access_id\u0027],"},{"line_number":684,"context_line":"            )"},{"line_number":685,"context_line":"            rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027active\u0027}"},{"line_number":686,"context_line":"        return rule_state_map"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def _remove_nfs_rule(self, fs_name, rule):"},{"line_number":689,"context_line":"        \"\"\"Remove NFS permissions associated with an access rule."}],"source_content_type":"text/x-python","patch_set":7,"id":"4eef839f_c9416761","line":686,"in_reply_to":"a232fea5_065db0e7","updated":"2026-06-22 11:44:28.000000000","message":"PS8: confirmed — WEKAFS rules are reported \u0027active\u0027; corrected the doc that previously said \u0027error\u0027.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":696,"context_line":"            perm_fs \u003d perm.get(\u0027filesystem\u0027, perm.get(\u0027filesystem_id\u0027, \u0027\u0027))"},{"line_number":697,"context_line":"            if perm_fs \u003d\u003d fs_name:"},{"line_number":698,"context_line":"                # Match by client group name which encodes the rule ID."},{"line_number":699,"context_line":"                cg_name \u003d perm.get(\u0027group\u0027, perm.get(\u0027client_group_name\u0027, \u0027\u0027))"},{"line_number":700,"context_line":"                if rule[\u0027access_id\u0027][:8] in cg_name:"},{"line_number":701,"context_line":"                    self._client.delete_nfs_permission(perm[\u0027uid\u0027])"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _remove_all_nfs_permissions(self, fs_name):"},{"line_number":704,"context_line":"        \"\"\"Remove all NFS permissions for a filesystem (used during delete)."}],"source_content_type":"text/x-python","patch_set":7,"id":"abab578a_768babce","line":701,"range":{"start_line":699,"start_character":16,"end_line":701,"end_character":67},"updated":"2026-06-17 23:14:17.000000000","message":"does the client group itself get automatically deleted?","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":698,"context_line":"                # Match by client group name which encodes the rule ID."},{"line_number":699,"context_line":"                cg_name \u003d perm.get(\u0027group\u0027, perm.get(\u0027client_group_name\u0027, \u0027\u0027))"},{"line_number":700,"context_line":"                if rule[\u0027access_id\u0027][:8] in cg_name:"},{"line_number":701,"context_line":"                    self._client.delete_nfs_permission(perm[\u0027uid\u0027])"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _remove_all_nfs_permissions(self, fs_name):"},{"line_number":704,"context_line":"        \"\"\"Remove all NFS permissions for a filesystem (used during delete)."}],"source_content_type":"text/x-python","patch_set":7,"id":"e6a5c9ac_bc0a0df1","line":701,"in_reply_to":"abab578a_768babce","updated":"2026-06-22 11:44:28.000000000","message":"Yes — removing a rule reclaims its Weka client group (both _remove_nfs_rule and _remove_all_nfs_permissions delete the group), so there is no leak.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":820,"context_line":"                \u0027pool_name\u0027: group_name,"},{"line_number":821,"context_line":"                \u0027total_capacity_gb\u0027: weka_utils.bytes_to_gb(total_bytes),"},{"line_number":822,"context_line":"                \u0027free_capacity_gb\u0027: weka_utils.bytes_to_gb(free_bytes),"},{"line_number":823,"context_line":"                \u0027reserved_percentage\u0027: 0,"},{"line_number":824,"context_line":"                \u0027reserved_snapshot_percentage\u0027: 0,"},{"line_number":825,"context_line":"                \u0027reserved_share_extend_percentage\u0027: 0,"},{"line_number":826,"context_line":"            }],"}],"source_content_type":"text/x-python","patch_set":7,"id":"22d06462_b15661f7","line":823,"range":{"start_line":823,"start_character":39,"end_line":823,"end_character":40},"updated":"2026-06-17 23:14:17.000000000","message":"no, this has to be read from configuration.. this, and the opts below are common configuration options for all drivers","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":820,"context_line":"                \u0027pool_name\u0027: group_name,"},{"line_number":821,"context_line":"                \u0027total_capacity_gb\u0027: weka_utils.bytes_to_gb(total_bytes),"},{"line_number":822,"context_line":"                \u0027free_capacity_gb\u0027: weka_utils.bytes_to_gb(free_bytes),"},{"line_number":823,"context_line":"                \u0027reserved_percentage\u0027: 0,"},{"line_number":824,"context_line":"                \u0027reserved_snapshot_percentage\u0027: 0,"},{"line_number":825,"context_line":"                \u0027reserved_share_extend_percentage\u0027: 0,"},{"line_number":826,"context_line":"            }],"}],"source_content_type":"text/x-python","patch_set":7,"id":"af6fcdc9_60578547","line":823,"in_reply_to":"22d06462_b15661f7","updated":"2026-06-22 11:44:28.000000000","message":"PS8: reserved_percentage and max_over_subscription_ratio are now read from configuration.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":831,"context_line":"    # Manage / unmanage"},{"line_number":832,"context_line":"    # ------------------------------------------------------------------"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":835,"context_line":"        \"\"\"Bring an existing Weka filesystem under Manila management."},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        :param share: Share model (share[\u0027export_locations\u0027] holds the path)."}],"source_content_type":"text/x-python","patch_set":7,"id":"e41aca54_e65e6684","line":834,"range":{"start_line":834,"start_character":8,"end_line":834,"end_character":23},"updated":"2026-06-17 23:14:17.000000000","message":"Do you need to clear any access rules when managing?\n\n\nAfter bringing an existing share under Manila management, the driver\nmust ensure the share is in an \"unexported\" state with all existing\naccess rules removed. Users must explicitly request access through\nManila after the share is managed.\n\n\nIf a Weka filesystem already has NFS permissions or client groups\nconfigured, those remain in place after `manage_existing` returns. Manila\nwon\u0027t know about them, creating a security-relevant inconsistency: the\nshare has access rules that Manila cannot see, modify, or revoke.\n\nSo i\u0027d call `_remove_all_nfs_permissions(fs_name)` (and clean up\nassociated client groups) before returning from `manage_existing`.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":831,"context_line":"    # Manage / unmanage"},{"line_number":832,"context_line":"    # ------------------------------------------------------------------"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":835,"context_line":"        \"\"\"Bring an existing Weka filesystem under Manila management."},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"        :param share: Share model (share[\u0027export_locations\u0027] holds the path)."}],"source_content_type":"text/x-python","patch_set":7,"id":"82fcc7ad_3e13820a","line":834,"in_reply_to":"e41aca54_e65e6684","updated":"2026-06-22 11:44:28.000000000","message":"PS8: manage_existing now calls _remove_all_nfs_permissions so the managed share starts unexported and Manila owns access control.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":865,"context_line":"        size_gb \u003d max(1, int(weka_utils.bytes_to_gb(size_bytes)))"},{"line_number":866,"context_line":"        fs_uid \u003d fs.get(\u0027uid\u0027) or fs.get(\u0027id\u0027, \u0027\u0027)"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        LOG.info("},{"line_number":869,"context_line":"            \"Managing existing share %s (FS \u0027%s\u0027, size %s GiB)\","},{"line_number":870,"context_line":"            share[\u0027id\u0027], fs_name, size_gb,"},{"line_number":871,"context_line":"        )"},{"line_number":872,"context_line":"        share_proto \u003d share.get(\u0027share_proto\u0027, _WEKAFS_PROTO).upper()"},{"line_number":873,"context_line":"        export_locations \u003d self._build_export_locations("},{"line_number":874,"context_line":"            share, fs_name, fs_uid, share_proto)"}],"source_content_type":"text/x-python","patch_set":7,"id":"8355d4b2_bb5101db","line":871,"range":{"start_line":868,"start_character":8,"end_line":871,"end_character":9},"updated":"2026-06-17 23:14:17.000000000","message":"Log after the work is done.. Logging info prior to the work isn\u0027t useful, use debug if it is necessary for debugging purposes","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        LOG.info("},{"line_number":869,"context_line":"            \"Managing existing share %s (FS \u0027%s\u0027, size %s GiB)\","},{"line_number":870,"context_line":"            share[\u0027id\u0027], fs_name, size_gb,"},{"line_number":871,"context_line":"        )"},{"line_number":872,"context_line":"        share_proto \u003d share.get(\u0027share_proto\u0027, _WEKAFS_PROTO).upper()"},{"line_number":873,"context_line":"        export_locations \u003d self._build_export_locations("},{"line_number":874,"context_line":"            share, fs_name, fs_uid, share_proto)"}],"source_content_type":"text/x-python","patch_set":7,"id":"59b5d334_6d9ad593","line":871,"in_reply_to":"8355d4b2_bb5101db","updated":"2026-06-22 11:44:28.000000000","message":"PS8: moved the info log after the work completes / downgraded the pre-work line to debug.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"272d86688d3d8c1af0196fca7b23f94b78173575","unresolved":true,"context_lines":[{"line_number":67,"context_line":"  - create_share_from_snapshot runs the data copy in a background"},{"line_number":68,"context_line":"    eventlet greenlet.  If the manila-share process restarts mid-copy"},{"line_number":69,"context_line":"    the in-memory status is lost; get_share_status will conservatively"},{"line_number":70,"context_line":"    return \u0027available\u0027 in that case.  The NFS copy path requires"},{"line_number":71,"context_line":"    weka_nfs_server to be configured; an unconfigured NFS share raises"},{"line_number":72,"context_line":"    ShareBackendException before filesystem creation begins."},{"line_number":73,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"4cd781c3_c54075f4","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":21},"updated":"2026-06-25 08:18:32.000000000","message":"shouldn\u0027t it return \"error\" if it is conservative?\n\nDoing so will allow the user to delete the new/error share and re-attempt the cloning","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  - create_share_from_snapshot runs the data copy in a background"},{"line_number":68,"context_line":"    eventlet greenlet.  If the manila-share process restarts mid-copy"},{"line_number":69,"context_line":"    the in-memory status is lost; get_share_status will conservatively"},{"line_number":70,"context_line":"    return \u0027available\u0027 in that case.  The NFS copy path requires"},{"line_number":71,"context_line":"    weka_nfs_server to be configured; an unconfigured NFS share raises"},{"line_number":72,"context_line":"    ShareBackendException before filesystem creation begins."},{"line_number":73,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"0d3cb481_fdfd68e2","line":70,"in_reply_to":"4cd781c3_c54075f4","updated":"2026-07-03 07:04:54.000000000","message":"Good point — fixed in PS12. get_share_status now returns \u0027error\u0027 (not \u0027available\u0027) when the in-memory copy state is missing after a process restart, so the user can delete the new/error share and re-attempt the clone.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"272d86688d3d8c1af0196fca7b23f94b78173575","unresolved":true,"context_lines":[{"line_number":79,"context_line":"import threading"},{"line_number":80,"context_line":"import time"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"import eventlet"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"from oslo_config import cfg"},{"line_number":85,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":11,"id":"8f5ac53a_a56e1938","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":15},"updated":"2026-06-25 08:18:32.000000000","message":"hard -2 here. \n\nWe\u0027re actively getting rid of eventlet. Please use native python threads: https://governance.openstack.org/tc/goals/selected/remove-eventlet.html","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"f9a5fb54eefb6309fa69b34e5658b3b30bcf17a6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"import threading"},{"line_number":80,"context_line":"import time"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"import eventlet"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"from oslo_config import cfg"},{"line_number":85,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":11,"id":"12ef2dbe_ec4592d4","line":82,"in_reply_to":"8f5ac53a_a56e1938","updated":"2026-07-03 07:04:54.000000000","message":"Fixed in PS12: the eventlet.spawn call in create_share_from_snapshot is replaced with a native daemon threading.Thread, and the eventlet dependency is removed. Aligns with the community goal to remove eventlet.","commit_id":"66234b2e8aa8af28f6b413b321136285068d5525"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c6aa4e04b333ca14f197629f2d33faba32df08d8","unresolved":true,"context_lines":[{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"        # Full-sync mode: Manila passes the full rule set in access_rules"},{"line_number":1044,"context_line":"        # with empty add/delete/update lists."},{"line_number":1045,"context_line":"        if not add_rules and not delete_rules and not update_rules:"},{"line_number":1046,"context_line":"            add_rules \u003d list(access_rules or [])"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # Access-level updates re-apply through the same idempotent path"}],"source_content_type":"text/x-python","patch_set":15,"id":"e53433a8_ee38c0f8","line":1045,"updated":"2026-08-08 07:05:45.000000000","message":"when `add_rules` and `delete_rules` are both empty, \"drivers should ensure that the rules present in `access_rules` are the same as those on the back end.\" This line treats full-sync as add-only (`add_rules \u003d list(access_rules or [])`) but never removes any stale backend resources. For NFS, orphaned `manila-*` client groups persist; for WEKAFS, orphaned security policies persist. This means access that Manila considers revoked could still be active on the backend after full-sync. Would you be able to list existing backend resources for the share, diff against `access_rules`, and remove the ones that are no longer present?","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"        # Full-sync mode: Manila passes the full rule set in access_rules"},{"line_number":1044,"context_line":"        # with empty add/delete/update lists."},{"line_number":1045,"context_line":"        if not add_rules and not delete_rules and not update_rules:"},{"line_number":1046,"context_line":"            add_rules \u003d list(access_rules or [])"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        # Access-level updates re-apply through the same idempotent path"}],"source_content_type":"text/x-python","patch_set":15,"id":"964280b8_5b430a1e","line":1045,"in_reply_to":"e53433a8_ee38c0f8","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ea80646ef9da3bdc6947e70499568649d112d729","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"def _norm_weka_ip(value):"},{"line_number":133,"context_line":"    \"\"\"Canonicalize a client-group IP rule for comparison."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    Weka stores every rule as ``address/dotted-mask``, whatever form it"},{"line_number":136,"context_line":"    was written in: a bare ``203.0.113.253`` comes back as"},{"line_number":137,"context_line":"    ``203.0.113.253/255.255.255.255`` and ``10.0.0.0/8`` as"}],"source_content_type":"text/x-python","patch_set":16,"id":"d8c2d6df_f1134f7f","line":134,"updated":"2026-08-19 22:58:02.000000000","message":"please simplify this and the docstrings below - it\u0027s nice to have them, but the length of the docstring and the method\u0027s complexity have a bit of a mismatch at the moment","commit_id":"e87c9b40104583f1bc444a3d502c8b19d1001528"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ea80646ef9da3bdc6947e70499568649d112d729","unresolved":true,"context_lines":[{"line_number":675,"context_line":"            )"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"            # Allow the NFS server to apply the new permissions."},{"line_number":678,"context_line":"            time.sleep(5)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"            weka_privsep.nfs_mount("},{"line_number":681,"context_line":"                \u0027{}:/{}\u0027.format(nfs_server, src_fs_name),"}],"source_content_type":"text/x-python","patch_set":16,"id":"8a4f5561_98d14fcd","line":678,"range":{"start_line":678,"start_character":12,"end_line":678,"end_character":25},"updated":"2026-08-19 22:58:02.000000000","message":"this makes the driver wait and blocks the whole thread this is being run on... can we do a retry mechanism and poll it? we do have some known functions for this.","commit_id":"e87c9b40104583f1bc444a3d502c8b19d1001528"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ea80646ef9da3bdc6947e70499568649d112d729","unresolved":true,"context_lines":[{"line_number":1083,"context_line":"        elif share_proto \u003d\u003d _WEKAFS_PROTO:"},{"line_number":1084,"context_line":"            return self._update_wekafs_access("},{"line_number":1085,"context_line":"                share, apply_rules, delete_rules, full_sync)"},{"line_number":1086,"context_line":"        return {}"},{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"    def _update_nfs_access(self, share, add_rules, delete_rules, full_sync):"},{"line_number":1089,"context_line":"        \"\"\"Add / delete NFS permissions on the Weka cluster.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"ddac9cde_938d392e","line":1086,"range":{"start_line":1086,"start_character":8,"end_line":1086,"end_character":17},"updated":"2026-08-19 22:58:02.000000000","message":"maybe we\u0027d never reach here - if the request to update access reached the WEKA driver, it means that the share is created in WEKA, meaning it\u0027s either WEKAFS or NFS. If it was a different protocol, the share creation would\u0027ve failed.","commit_id":"e87c9b40104583f1bc444a3d502c8b19d1001528"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"Manila share driver for Weka storage."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Architecture, configuration reference and known limitations are in"},{"line_number":18,"context_line":"doc/source/admin/weka_share_driver.rst."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":18,"id":"a4286bc9_87a6014a","line":18,"range":{"start_line":16,"start_character":0,"end_line":18,"end_character":39},"updated":"2026-08-26 22:37:56.000000000","message":"unnecessary","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\"Manila share driver for Weka storage."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Architecture, configuration reference and known limitations are in"},{"line_number":18,"context_line":"doc/source/admin/weka_share_driver.rst."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":18,"id":"a1c70b39_1a20a281","line":18,"range":{"start_line":16,"start_character":0,"end_line":18,"end_character":39},"in_reply_to":"a4286bc9_87a6014a","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":79,"context_line":"    \"\"\"Normalize access_to for a policy: CIDR prefix, not a mask.\"\"\""},{"line_number":80,"context_line":"    if \u0027/\u0027 in access_to:"},{"line_number":81,"context_line":"        return str(ipaddress.IPv4Network(access_to, strict\u003dFalse))"},{"line_number":82,"context_line":"    ipaddress.IPv4Address(access_to)"},{"line_number":83,"context_line":"    return access_to"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"769f75c8_a4bf336b","line":82,"range":{"start_line":82,"start_character":14,"end_line":82,"end_character":25},"updated":"2026-08-26 22:37:56.000000000","message":"https://opendev.org/openstack/manila/src/commit/657013769fccb9b91a35d39ab9118dc552319553/manila/api/common.py#L521-L529\n\nthis is already being done here, why repeat it?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    \"\"\"Normalize access_to for a policy: CIDR prefix, not a mask.\"\"\""},{"line_number":80,"context_line":"    if \u0027/\u0027 in access_to:"},{"line_number":81,"context_line":"        return str(ipaddress.IPv4Network(access_to, strict\u003dFalse))"},{"line_number":82,"context_line":"    ipaddress.IPv4Address(access_to)"},{"line_number":83,"context_line":"    return access_to"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"05070d93_5b66afe7","line":82,"range":{"start_line":82,"start_character":14,"end_line":82,"end_character":25},"in_reply_to":"769f75c8_a4bf336b","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if not isinstance(exc, weka_exc.WekaApiError):"},{"line_number":92,"context_line":"        return False"},{"line_number":93,"context_line":"    return \u0027already present in the list\u0027 in str(exc).lower()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def _is_already_exists_error(exc):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f46056f_6120458a","line":93,"range":{"start_line":93,"start_character":28,"end_line":93,"end_character":39},"updated":"2026-08-26 22:37:56.000000000","message":"maybe trim here \"in the list\" doesn\u0027t seem critical to gate on","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":"    if not isinstance(exc, weka_exc.WekaApiError):"},{"line_number":92,"context_line":"        return False"},{"line_number":93,"context_line":"    return \u0027already present in the list\u0027 in str(exc).lower()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def _is_already_exists_error(exc):"}],"source_content_type":"text/x-python","patch_set":18,"id":"f2416130_33c0e137","line":93,"range":{"start_line":93,"start_character":28,"end_line":93,"end_character":39},"in_reply_to":"3f46056f_6120458a","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class WekaShareDriver(driver.ShareDriver):"},{"line_number":131,"context_line":"    \"\"\"Manila share driver for Weka storage."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    Serverless (driver_handles_share_servers \u003d False): Weka manages its"},{"line_number":134,"context_line":"    own networking, so there is no Nova/Neutron integration."},{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    _is_driver_handles_share_servers \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"52129ea2_ac519ef3","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":60},"updated":"2026-08-26 22:37:56.000000000","message":"this is understood when a driver is DHSS\u003dFalse. Drop this","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class WekaShareDriver(driver.ShareDriver):"},{"line_number":131,"context_line":"    \"\"\"Manila share driver for Weka storage."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    Serverless (driver_handles_share_servers \u003d False): Weka manages its"},{"line_number":134,"context_line":"    own networking, so there is no Nova/Neutron integration."},{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    _is_driver_handles_share_servers \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"e7630a1b_ae66fdd4","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":60},"in_reply_to":"52129ea2_ac519ef3","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":171,"context_line":"        cfg_get \u003d self.configuration.safe_get"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        host \u003d cfg_get(\u0027weka_api_server\u0027)"},{"line_number":174,"context_line":"        port \u003d cfg_get(\u0027weka_api_port\u0027) or 14000"},{"line_number":175,"context_line":"        username \u003d cfg_get(\u0027weka_username\u0027)"},{"line_number":176,"context_line":"        password \u003d cfg_get(\u0027weka_password\u0027)"},{"line_number":177,"context_line":"        organization \u003d cfg_get(\u0027weka_organization\u0027) or \u0027Root\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"7aad6efb_4e32edbd","line":174,"range":{"start_line":174,"start_character":15,"end_line":174,"end_character":48},"updated":"2026-08-26 22:37:56.000000000","message":"why is this not the default value of the option itself?\n\nsame with `weka_organization`, `weka_api_timeout` and others that you\u0027re forcing to an alternative.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        cfg_get \u003d self.configuration.safe_get"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        host \u003d cfg_get(\u0027weka_api_server\u0027)"},{"line_number":174,"context_line":"        port \u003d cfg_get(\u0027weka_api_port\u0027) or 14000"},{"line_number":175,"context_line":"        username \u003d cfg_get(\u0027weka_username\u0027)"},{"line_number":176,"context_line":"        password \u003d cfg_get(\u0027weka_password\u0027)"},{"line_number":177,"context_line":"        organization \u003d cfg_get(\u0027weka_organization\u0027) or \u0027Root\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"fc2fc84d_55d44c64","line":174,"range":{"start_line":174,"start_character":15,"end_line":174,"end_character":48},"in_reply_to":"7aad6efb_4e32edbd","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self._client.login()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self._org_prefix \u003d cfg_get(\u0027weka_org_prefix\u0027) or \u0027manila-\u0027"},{"line_number":203,"context_line":"        # The prefix names both the org and the auth-token file, so a"},{"line_number":204,"context_line":"        # path separator would escape weka_auth_token_dir via os.path.join."},{"line_number":205,"context_line":"        if (\u0027/\u0027 in self._org_prefix or \u0027\\\\\u0027 in self._org_prefix"}],"source_content_type":"text/x-python","patch_set":18,"id":"80338fbe_b0c87fca","line":202,"range":{"start_line":202,"start_character":58,"end_line":202,"end_character":64},"updated":"2026-08-26 22:37:56.000000000","message":"this needs to be the default value of the config opt","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        )"},{"line_number":200,"context_line":"        self._client.login()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self._org_prefix \u003d cfg_get(\u0027weka_org_prefix\u0027) or \u0027manila-\u0027"},{"line_number":203,"context_line":"        # The prefix names both the org and the auth-token file, so a"},{"line_number":204,"context_line":"        # path separator would escape weka_auth_token_dir via os.path.join."},{"line_number":205,"context_line":"        if (\u0027/\u0027 in self._org_prefix or \u0027\\\\\u0027 in self._org_prefix"}],"source_content_type":"text/x-python","patch_set":18,"id":"695caa5e_98c444c2","line":202,"range":{"start_line":202,"start_character":58,"end_line":202,"end_character":64},"in_reply_to":"80338fbe_b0c87fca","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":208,"context_line":"                reason\u003d_("},{"line_number":209,"context_line":"                    \u0027weka_org_prefix must not contain path separators: \u0027"},{"line_number":210,"context_line":"                    \u0027%s\u0027) % self._org_prefix)"},{"line_number":211,"context_line":"        self._org_user \u003d cfg_get(\u0027weka_org_user\u0027) or \u0027manila\u0027"},{"line_number":212,"context_line":"        self._org_admin_secret \u003d cfg_get(\u0027weka_org_admin_secret\u0027)"},{"line_number":213,"context_line":"        self._auth_token_dir \u003d ("},{"line_number":214,"context_line":"            cfg_get(\u0027weka_auth_token_dir\u0027) or \u0027/var/lib/manila/weka-tokens\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"079a4287_47c40f8e","line":211,"range":{"start_line":211,"start_character":54,"end_line":211,"end_character":60},"updated":"2026-08-26 22:37:56.000000000","message":"this needs to be the default value of the config opt","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                reason\u003d_("},{"line_number":209,"context_line":"                    \u0027weka_org_prefix must not contain path separators: \u0027"},{"line_number":210,"context_line":"                    \u0027%s\u0027) % self._org_prefix)"},{"line_number":211,"context_line":"        self._org_user \u003d cfg_get(\u0027weka_org_user\u0027) or \u0027manila\u0027"},{"line_number":212,"context_line":"        self._org_admin_secret \u003d cfg_get(\u0027weka_org_admin_secret\u0027)"},{"line_number":213,"context_line":"        self._auth_token_dir \u003d ("},{"line_number":214,"context_line":"            cfg_get(\u0027weka_auth_token_dir\u0027) or \u0027/var/lib/manila/weka-tokens\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"98ee4693_2f82e0dd","line":211,"range":{"start_line":211,"start_character":54,"end_line":211,"end_character":60},"in_reply_to":"079a4287_47c40f8e","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        self._org_user \u003d cfg_get(\u0027weka_org_user\u0027) or \u0027manila\u0027"},{"line_number":212,"context_line":"        self._org_admin_secret \u003d cfg_get(\u0027weka_org_admin_secret\u0027)"},{"line_number":213,"context_line":"        self._auth_token_dir \u003d ("},{"line_number":214,"context_line":"            cfg_get(\u0027weka_auth_token_dir\u0027) or \u0027/var/lib/manila/weka-tokens\u0027)"},{"line_number":215,"context_line":"        if not self._org_admin_secret:"},{"line_number":216,"context_line":"            raise weka_exc.WekaConfigurationError("},{"line_number":217,"context_line":"                reason\u003d_("}],"source_content_type":"text/x-python","patch_set":18,"id":"29508438_90767a81","line":214,"range":{"start_line":214,"start_character":47,"end_line":214,"end_character":75},"updated":"2026-08-26 22:37:56.000000000","message":"this needs to be the default value of the configuration option","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self._org_user \u003d cfg_get(\u0027weka_org_user\u0027) or \u0027manila\u0027"},{"line_number":212,"context_line":"        self._org_admin_secret \u003d cfg_get(\u0027weka_org_admin_secret\u0027)"},{"line_number":213,"context_line":"        self._auth_token_dir \u003d ("},{"line_number":214,"context_line":"            cfg_get(\u0027weka_auth_token_dir\u0027) or \u0027/var/lib/manila/weka-tokens\u0027)"},{"line_number":215,"context_line":"        if not self._org_admin_secret:"},{"line_number":216,"context_line":"            raise weka_exc.WekaConfigurationError("},{"line_number":217,"context_line":"                reason\u003d_("}],"source_content_type":"text/x-python","patch_set":18,"id":"f84b1d5f_ff45a9ac","line":214,"range":{"start_line":214,"start_character":47,"end_line":214,"end_character":75},"in_reply_to":"29508438_90767a81","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":342,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":343,"context_line":"        \"\"\"Create a share from a snapshot; the copy runs in background."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        Returns STATUS_CREATING_FROM_SNAPSHOT immediately, for Manila to"},{"line_number":346,"context_line":"        poll via get_share_status.  The NFS copy path needs"},{"line_number":347,"context_line":"        weka_nfs_server."},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        share_proto \u003d share[\u0027share_proto\u0027].upper()"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"2c1deda7_9afdf75a","line":347,"range":{"start_line":343,"start_character":71,"end_line":347,"end_character":24},"updated":"2026-08-26 22:37:56.000000000","message":"the above statement explains this succinctly","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":342,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":343,"context_line":"        \"\"\"Create a share from a snapshot; the copy runs in background."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        Returns STATUS_CREATING_FROM_SNAPSHOT immediately, for Manila to"},{"line_number":346,"context_line":"        poll via get_share_status.  The NFS copy path needs"},{"line_number":347,"context_line":"        weka_nfs_server."},{"line_number":348,"context_line":"        \"\"\""},{"line_number":349,"context_line":"        share_proto \u003d share[\u0027share_proto\u0027].upper()"},{"line_number":350,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"06947af9_8cbd2cdd","line":347,"range":{"start_line":343,"start_character":71,"end_line":347,"end_character":24},"in_reply_to":"2c1deda7_9afdf75a","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        fs_uid \u003d fs[\u0027uid\u0027]"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        # No-op for WEKAFS."},{"line_number":671,"context_line":"        try:"},{"line_number":672,"context_line":"            self._remove_all_nfs_permissions(fs_name)"},{"line_number":673,"context_line":"        except Exception as exc:"},{"line_number":674,"context_line":"            LOG.warning("},{"line_number":675,"context_line":"                \"Failed to remove NFS permissions for share %s: %s\","},{"line_number":676,"context_line":"                share[\u0027id\u0027], exc,"},{"line_number":677,"context_line":"            )"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        # Model A policies must go while the filesystem still exists;"},{"line_number":680,"context_line":"        # shared Model B group policies are left in place."}],"source_content_type":"text/x-python","patch_set":18,"id":"c68fad6e_79199c41","line":677,"range":{"start_line":670,"start_character":0,"end_line":677,"end_character":13},"updated":"2026-08-26 22:37:56.000000000","message":"access is always dropped explicitly for a share being deleted: https://opendev.org/openstack/manila/src/commit/657013769fccb9b91a35d39ab9118dc552319553/manila/share/manager.py#L3794-L3842","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        fs_uid \u003d fs[\u0027uid\u0027]"},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"        # No-op for WEKAFS."},{"line_number":671,"context_line":"        try:"},{"line_number":672,"context_line":"            self._remove_all_nfs_permissions(fs_name)"},{"line_number":673,"context_line":"        except Exception as exc:"},{"line_number":674,"context_line":"            LOG.warning("},{"line_number":675,"context_line":"                \"Failed to remove NFS permissions for share %s: %s\","},{"line_number":676,"context_line":"                share[\u0027id\u0027], exc,"},{"line_number":677,"context_line":"            )"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        # Model A policies must go while the filesystem still exists;"},{"line_number":680,"context_line":"        # shared Model B group policies are left in place."}],"source_content_type":"text/x-python","patch_set":18,"id":"09cf406d_9a9badfd","line":677,"range":{"start_line":670,"start_character":0,"end_line":677,"end_character":13},"in_reply_to":"c68fad6e_79199c41","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":698,"context_line":"                )"},{"line_number":699,"context_line":"                mnt.unmount(force\u003dTrue)"},{"line_number":700,"context_line":"            except Exception as exc:"},{"line_number":701,"context_line":"                LOG.warning("},{"line_number":702,"context_line":"                    \"Failed to unmount %s during delete of share %s: %s\","},{"line_number":703,"context_line":"                    mount_point, share[\u0027id\u0027], exc,"},{"line_number":704,"context_line":"                )"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        try:"},{"line_number":707,"context_line":"            client.delete_filesystem(fs_uid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff1f6602_f264721e","line":704,"range":{"start_line":701,"start_character":16,"end_line":704,"end_character":17},"updated":"2026-08-26 22:37:56.000000000","message":"Don\u0027t we want to stop here? If you delete the filesystem from weka and the mount is stuck, doesn\u0027t it bring down the manila share control plane?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":698,"context_line":"                )"},{"line_number":699,"context_line":"                mnt.unmount(force\u003dTrue)"},{"line_number":700,"context_line":"            except Exception as exc:"},{"line_number":701,"context_line":"                LOG.warning("},{"line_number":702,"context_line":"                    \"Failed to unmount %s during delete of share %s: %s\","},{"line_number":703,"context_line":"                    mount_point, share[\u0027id\u0027], exc,"},{"line_number":704,"context_line":"                )"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        try:"},{"line_number":707,"context_line":"            client.delete_filesystem(fs_uid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"4123505c_7bc7ffbe","line":704,"range":{"start_line":701,"start_character":16,"end_line":704,"end_character":17},"in_reply_to":"ff1f6602_f264721e","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":715,"context_line":"        client \u003d self._client_for_share(share)"},{"line_number":716,"context_line":"        fs_uid \u003d self._get_fs_uid_for_share(share, client\u003dclient)"},{"line_number":717,"context_line":"        new_bytes \u003d weka_utils.gb_to_bytes(new_size)"},{"line_number":718,"context_line":"        LOG.info("},{"line_number":719,"context_line":"            \"Extending share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":720,"context_line":"        client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fccaef63_6704e830","line":719,"range":{"start_line":718,"start_character":8,"end_line":719,"end_character":66},"updated":"2026-08-26 22:37:56.000000000","message":"Log at the info level after the task is done.. \n\n\"Starting a task\" isn\u0027t useful at info level. I suggest downgrading this to debug because there\u0027s already an info log here: \nhttps://opendev.org/openstack/manila/src/commit/657013769fccb9b91a35d39ab9118dc552319553/manila/share/manager.py#L5032","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":715,"context_line":"        client \u003d self._client_for_share(share)"},{"line_number":716,"context_line":"        fs_uid \u003d self._get_fs_uid_for_share(share, client\u003dclient)"},{"line_number":717,"context_line":"        new_bytes \u003d weka_utils.gb_to_bytes(new_size)"},{"line_number":718,"context_line":"        LOG.info("},{"line_number":719,"context_line":"            \"Extending share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":720,"context_line":"        client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":18,"id":"aae214fb_3f531044","line":719,"range":{"start_line":718,"start_character":8,"end_line":719,"end_character":66},"in_reply_to":"fccaef63_6704e830","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":732,"context_line":"                share_id\u003dshare[\u0027id\u0027])"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        LOG.info("},{"line_number":735,"context_line":"            \"Shrinking share %s to %s GiB\", share[\u0027id\u0027], new_size)"},{"line_number":736,"context_line":"        client.update_filesystem(fs_uid, total_capacity\u003dnew_bytes)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    def get_backend_info(self, context):"}],"source_content_type":"text/x-python","patch_set":18,"id":"35d5790b_e8679986","line":735,"range":{"start_line":735,"start_character":0,"end_line":735,"end_character":66},"updated":"2026-08-26 22:37:56.000000000","message":"same","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":752,"context_line":"        try:"},{"line_number":753,"context_line":"            all_fs \u003d self._client.list_filesystems() or []"},{"line_number":754,"context_line":"        except Exception as exc:"},{"line_number":755,"context_line":"            LOG.warning("},{"line_number":756,"context_line":"                \"Failed to list filesystems during ensure_shares: %s\","},{"line_number":757,"context_line":"                exc)"},{"line_number":758,"context_line":"            all_fs \u003d []"},{"line_number":759,"context_line":"        fs_by_name \u003d {fs[\u0027name\u0027]: fs for fs in all_fs}"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        updates \u003d {}"}],"source_content_type":"text/x-python","patch_set":18,"id":"d1b61551_5bfbd621","line":758,"range":{"start_line":755,"start_character":12,"end_line":758,"end_character":23},"updated":"2026-08-26 22:37:56.000000000","message":"doesn\u0027t this mean we couldn\u0027t ensure, and therefore all share should be in \"error\" state?\n\nor is there some flakiness you\u0027re accounting for?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":752,"context_line":"        try:"},{"line_number":753,"context_line":"            all_fs \u003d self._client.list_filesystems() or []"},{"line_number":754,"context_line":"        except Exception as exc:"},{"line_number":755,"context_line":"            LOG.warning("},{"line_number":756,"context_line":"                \"Failed to list filesystems during ensure_shares: %s\","},{"line_number":757,"context_line":"                exc)"},{"line_number":758,"context_line":"            all_fs \u003d []"},{"line_number":759,"context_line":"        fs_by_name \u003d {fs[\u0027name\u0027]: fs for fs in all_fs}"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        updates \u003d {}"}],"source_content_type":"text/x-python","patch_set":18,"id":"3e2cb39f_23a510b3","line":758,"range":{"start_line":755,"start_character":12,"end_line":758,"end_character":23},"in_reply_to":"d1b61551_5bfbd621","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":849,"context_line":"        # create_share rejects every other protocol, so there is no third"},{"line_number":850,"context_line":"        # branch to write here."},{"line_number":851,"context_line":"        if share_proto \u003d\u003d _NFS_PROTO:"},{"line_number":852,"context_line":"            return self._update_nfs_access("},{"line_number":853,"context_line":"                share, apply_rules, delete_rules, full_sync)"},{"line_number":854,"context_line":"        return self._update_wekafs_access("},{"line_number":855,"context_line":"            share, apply_rules, delete_rules, full_sync)"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"be80bfa1_9140fee7","line":853,"range":{"start_line":852,"start_character":12,"end_line":853,"end_character":60},"updated":"2026-08-26 22:37:56.000000000","message":"looking at the logic below, a single share rule being incorrect would cause an exception. This will set all rules in the set to \"error\". THis isn\u0027t the behavior you want, correct?\n\nA good way to test:\n\nTry in a loop to set a \"user\" rule to WekaFS/NFS (or an IPv6 rule) along with 5 valid IP based rules - if the rule requests come to manila fast enough, they\u0027ll get batched when they reach the driver..and from what i read, it\u0027ll set unrelated/valid rules to \"error\". \n\nI think the driver could handle this a bit more gracefully","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":868,"context_line":"                )"},{"line_number":869,"context_line":"                rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027error\u0027}"},{"line_number":870,"context_line":"                continue"},{"line_number":871,"context_line":"            if _is_ipv6(rule[\u0027access_to\u0027]):"},{"line_number":872,"context_line":"                LOG.warning("},{"line_number":873,"context_line":"                    \"IPv6 access rule %s rejected; Weka driver \""},{"line_number":874,"context_line":"                    \"supports IPv4 only.\","},{"line_number":875,"context_line":"                    rule[\u0027access_id\u0027],"},{"line_number":876,"context_line":"                )"},{"line_number":877,"context_line":"                rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027error\u0027}"},{"line_number":878,"context_line":"                raise exception.InvalidShareAccess("},{"line_number":879,"context_line":"                    reason\u003d_("},{"line_number":880,"context_line":"                        \u0027Weka driver supports IPv4 access rules only; \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"49cc5e8d_504893a1","line":877,"range":{"start_line":871,"start_character":0,"end_line":877,"end_character":70},"updated":"2026-08-26 22:37:56.000000000","message":"The correct design is to set \"self.ipv6_implemented\" to False in the driver. That way, the rule never makes it to the driver. However, Manila currently respects that setting only for NFS (a historic fact that only NFS supported IP based access). I think we need to create a bug against manila and have this handled for WEKAFS (and LUSTRE) the same way. \n\nWe can fix this up after the driver merges too. But something to keep in mind.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                )"},{"line_number":869,"context_line":"                rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027error\u0027}"},{"line_number":870,"context_line":"                continue"},{"line_number":871,"context_line":"            if _is_ipv6(rule[\u0027access_to\u0027]):"},{"line_number":872,"context_line":"                LOG.warning("},{"line_number":873,"context_line":"                    \"IPv6 access rule %s rejected; Weka driver \""},{"line_number":874,"context_line":"                    \"supports IPv4 only.\","},{"line_number":875,"context_line":"                    rule[\u0027access_id\u0027],"},{"line_number":876,"context_line":"                )"},{"line_number":877,"context_line":"                rule_state_map[rule[\u0027access_id\u0027]] \u003d {\u0027state\u0027: \u0027error\u0027}"},{"line_number":878,"context_line":"                raise exception.InvalidShareAccess("},{"line_number":879,"context_line":"                    reason\u003d_("},{"line_number":880,"context_line":"                        \u0027Weka driver supports IPv4 access rules only; \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"be96ca5d_ae690a03","line":877,"range":{"start_line":871,"start_character":0,"end_line":877,"end_character":70},"in_reply_to":"49cc5e8d_504893a1","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1030,"context_line":"                              full_sync):"},{"line_number":1031,"context_line":"        \"\"\"Apply WEKAFS rules as per-share Weka security policies."},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"        Model B (share type sets weka:security_policy_group) is governed"},{"line_number":1034,"context_line":"        by the group policies attached at create_share, so rules are"},{"line_number":1035,"context_line":"        accepted as-is.  Model A maps each ip rule to the share\u0027s rw or"},{"line_number":1036,"context_line":"        ro policy.  Non-ip rules grant only the org mount credential,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da3e53cb_6cbf6594","line":1033,"range":{"start_line":1033,"start_character":8,"end_line":1033,"end_character":16},"updated":"2026-08-26 22:37:56.000000000","message":"I am confused... are \"model B\", \"model A\" common WekaFS terminology? If not, this should be removed, or explained in the documentation","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"                              full_sync):"},{"line_number":1031,"context_line":"        \"\"\"Apply WEKAFS rules as per-share Weka security policies."},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"        Model B (share type sets weka:security_policy_group) is governed"},{"line_number":1034,"context_line":"        by the group policies attached at create_share, so rules are"},{"line_number":1035,"context_line":"        accepted as-is.  Model A maps each ip rule to the share\u0027s rw or"},{"line_number":1036,"context_line":"        ro policy.  Non-ip rules grant only the org mount credential,"}],"source_content_type":"text/x-python","patch_set":18,"id":"f3483599_19f13c74","line":1033,"range":{"start_line":1033,"start_character":8,"end_line":1033,"end_character":16},"in_reply_to":"da3e53cb_6cbf6594","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1082,"context_line":"            if rule[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":1083,"context_line":"                # user/cert rules map to no IP policy: they grant the"},{"line_number":1084,"context_line":"                # org-boundary credential without an IP restriction."},{"line_number":1085,"context_line":"                LOG.info("},{"line_number":1086,"context_line":"                    \"WEKAFS rule %s (type\u003d%s) grants the org-boundary \""},{"line_number":1087,"context_line":"                    \"mount credential; no per-share IP policy created.\","},{"line_number":1088,"context_line":"                    rule[\u0027access_id\u0027], rule[\u0027access_type\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"5b42fe53_97ad3063","line":1085,"range":{"start_line":1085,"start_character":20,"end_line":1085,"end_character":24},"updated":"2026-08-26 22:37:56.000000000","message":"info?\n\nsounds like a warning","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"            if rule[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":1083,"context_line":"                # user/cert rules map to no IP policy: they grant the"},{"line_number":1084,"context_line":"                # org-boundary credential without an IP restriction."},{"line_number":1085,"context_line":"                LOG.info("},{"line_number":1086,"context_line":"                    \"WEKAFS rule %s (type\u003d%s) grants the org-boundary \""},{"line_number":1087,"context_line":"                    \"mount credential; no per-share IP policy created.\","},{"line_number":1088,"context_line":"                    rule[\u0027access_id\u0027], rule[\u0027access_type\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"d1cf245d_0d5b32ef","line":1085,"range":{"start_line":1085,"start_character":20,"end_line":1085,"end_character":24},"in_reply_to":"5b42fe53_97ad3063","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1298,"context_line":"        try:"},{"line_number":1299,"context_line":"            fs_uid \u003d self._get_fs_uid_for_share(share, client\u003dclient)"},{"line_number":1300,"context_line":"        except exception.ShareNotFound:"},{"line_number":1301,"context_line":"            LOG.info("},{"line_number":1302,"context_line":"                \"Parent share %s not found — skipping snapshot delete\","},{"line_number":1303,"context_line":"                share[\u0027id\u0027],"},{"line_number":1304,"context_line":"            )"},{"line_number":1305,"context_line":"            return"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        snap_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":1308,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":18,"id":"f68e8936_ee916099","line":1305,"range":{"start_line":1301,"start_character":12,"end_line":1305,"end_character":18},"updated":"2026-08-26 22:37:56.000000000","message":"warning?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1298,"context_line":"        try:"},{"line_number":1299,"context_line":"            fs_uid \u003d self._get_fs_uid_for_share(share, client\u003dclient)"},{"line_number":1300,"context_line":"        except exception.ShareNotFound:"},{"line_number":1301,"context_line":"            LOG.info("},{"line_number":1302,"context_line":"                \"Parent share %s not found — skipping snapshot delete\","},{"line_number":1303,"context_line":"                share[\u0027id\u0027],"},{"line_number":1304,"context_line":"            )"},{"line_number":1305,"context_line":"            return"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        snap_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":1308,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":18,"id":"db281371_c5605815","line":1305,"range":{"start_line":1301,"start_character":12,"end_line":1305,"end_character":18},"in_reply_to":"f68e8936_ee916099","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1305,"context_line":"            return"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        snap_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":1308,"context_line":"        LOG.info("},{"line_number":1309,"context_line":"            \"Deleting snapshot %s (name\u003d\u0027%s\u0027)\","},{"line_number":1310,"context_line":"            snapshot[\u0027id\u0027], snap_name,"},{"line_number":1311,"context_line":"        )"},{"line_number":1312,"context_line":"        snap \u003d client.get_snapshot_by_name(snap_name, fs_uid\u003dfs_uid)"},{"line_number":1313,"context_line":"        if not snap:"},{"line_number":1314,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":18,"id":"005abd83_4cfa54c7","line":1311,"range":{"start_line":1308,"start_character":8,"end_line":1311,"end_character":9},"updated":"2026-08-26 22:37:56.000000000","message":"debug","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            return"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"        snap_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":1308,"context_line":"        LOG.info("},{"line_number":1309,"context_line":"            \"Deleting snapshot %s (name\u003d\u0027%s\u0027)\","},{"line_number":1310,"context_line":"            snapshot[\u0027id\u0027], snap_name,"},{"line_number":1311,"context_line":"        )"},{"line_number":1312,"context_line":"        snap \u003d client.get_snapshot_by_name(snap_name, fs_uid\u003dfs_uid)"},{"line_number":1313,"context_line":"        if not snap:"},{"line_number":1314,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":18,"id":"4ceabca4_74a1cdc7","line":1311,"range":{"start_line":1308,"start_character":8,"end_line":1311,"end_character":9},"in_reply_to":"005abd83_4cfa54c7","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1311,"context_line":"        )"},{"line_number":1312,"context_line":"        snap \u003d client.get_snapshot_by_name(snap_name, fs_uid\u003dfs_uid)"},{"line_number":1313,"context_line":"        if not snap:"},{"line_number":1314,"context_line":"            LOG.info("},{"line_number":1315,"context_line":"                \"Snapshot \u0027%s\u0027 not found — already deleted\", snap_name)"},{"line_number":1316,"context_line":"            return"},{"line_number":1317,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"d3a8aeb8_f4239615","line":1314,"range":{"start_line":1314,"start_character":16,"end_line":1314,"end_character":20},"updated":"2026-08-26 22:37:56.000000000","message":"warning","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1311,"context_line":"        )"},{"line_number":1312,"context_line":"        snap \u003d client.get_snapshot_by_name(snap_name, fs_uid\u003dfs_uid)"},{"line_number":1313,"context_line":"        if not snap:"},{"line_number":1314,"context_line":"            LOG.info("},{"line_number":1315,"context_line":"                \"Snapshot \u0027%s\u0027 not found — already deleted\", snap_name)"},{"line_number":1316,"context_line":"            return"},{"line_number":1317,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"c3d30940_dc39b493","line":1314,"range":{"start_line":1314,"start_character":16,"end_line":1314,"end_character":20},"in_reply_to":"d3a8aeb8_f4239615","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1331,"context_line":"        if not snap:"},{"line_number":1332,"context_line":"            raise exception.ShareSnapshotNotFound(snapshot_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        LOG.info("},{"line_number":1335,"context_line":"            \"Reverting share %s to snapshot %s\","},{"line_number":1336,"context_line":"            share[\u0027id\u0027], snapshot[\u0027id\u0027],"},{"line_number":1337,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"eaa8c643_ab30ea0d","line":1334,"range":{"start_line":1334,"start_character":12,"end_line":1334,"end_character":16},"updated":"2026-08-26 22:37:56.000000000","message":"debug","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"        if not snap:"},{"line_number":1332,"context_line":"            raise exception.ShareSnapshotNotFound(snapshot_id\u003dsnapshot[\u0027id\u0027])"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        LOG.info("},{"line_number":1335,"context_line":"            \"Reverting share %s to snapshot %s\","},{"line_number":1336,"context_line":"            share[\u0027id\u0027], snapshot[\u0027id\u0027],"},{"line_number":1337,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a948ac5_d16f34a7","line":1334,"range":{"start_line":1334,"start_character":12,"end_line":1334,"end_character":16},"in_reply_to":"eaa8c643_ab30ea0d","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1354,"context_line":"        free_bytes \u003d max(0, total_bytes - used_bytes)"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"        backend_name \u003d ("},{"line_number":1357,"context_line":"            self.configuration.safe_get(\u0027share_backend_name\u0027) or \u0027weka\u0027)"},{"line_number":1358,"context_line":"        group_name \u003d ("},{"line_number":1359,"context_line":"            self.configuration.safe_get(\u0027weka_filesystem_group\u0027) or \u0027default\u0027)"},{"line_number":1360,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"39156368_2cc85ef5","line":1357,"range":{"start_line":1357,"start_character":65,"end_line":1357,"end_character":71},"updated":"2026-08-26 22:37:56.000000000","message":"all default values must be defaults to the opts themselves.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1354,"context_line":"        free_bytes \u003d max(0, total_bytes - used_bytes)"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"        backend_name \u003d ("},{"line_number":1357,"context_line":"            self.configuration.safe_get(\u0027share_backend_name\u0027) or \u0027weka\u0027)"},{"line_number":1358,"context_line":"        group_name \u003d ("},{"line_number":1359,"context_line":"            self.configuration.safe_get(\u0027weka_filesystem_group\u0027) or \u0027default\u0027)"},{"line_number":1360,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"a6ba3804_66dc9ee1","line":1357,"range":{"start_line":1357,"start_character":65,"end_line":1357,"end_character":71},"in_reply_to":"39156368_2cc85ef5","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def unmanage(self, share):"},{"line_number":1469,"context_line":"        \"\"\"Stop tracking a share; the Weka filesystem is left intact.\"\"\""},{"line_number":1470,"context_line":"        LOG.info("},{"line_number":1471,"context_line":"            \"Unmanaging share %s — Weka filesystem \u0027%s\u0027 preserved\","},{"line_number":1472,"context_line":"            share[\u0027id\u0027], self._share_name(share[\u0027id\u0027]),"},{"line_number":1473,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ee80f89_bd771b87","line":1470,"range":{"start_line":1470,"start_character":12,"end_line":1470,"end_character":16},"updated":"2026-08-26 22:37:56.000000000","message":"debug","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def unmanage(self, share):"},{"line_number":1469,"context_line":"        \"\"\"Stop tracking a share; the Weka filesystem is left intact.\"\"\""},{"line_number":1470,"context_line":"        LOG.info("},{"line_number":1471,"context_line":"            \"Unmanaging share %s — Weka filesystem \u0027%s\u0027 preserved\","},{"line_number":1472,"context_line":"            share[\u0027id\u0027], self._share_name(share[\u0027id\u0027]),"},{"line_number":1473,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"2c82e3e4_2c084660","line":1470,"range":{"start_line":1470,"start_character":12,"end_line":1470,"end_character":16},"in_reply_to":"7ee80f89_bd771b87","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/share/drivers/weka/exceptions.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"5e85a0051132bcca019513f68fceba848ed83418","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"687de55e_c6617e09","line":1,"updated":"2026-08-28 12:35:06.000000000","message":"ideally exceptions belong to exceptions.py - happy to have this done in a follow-up though","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/share/drivers/weka/posix.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5bdd0ef9a34cc499d68c33e153ead8a47a9e0371","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    :param sync_on_close: Flush on close (default False)."},{"line_number":88,"context_line":"    :param max_io_size: Override maximum IO size in bytes (optional)."},{"line_number":89,"context_line":"    :param iops_limit: IOPS limit for this mount (optional)."},{"line_number":90,"context_line":"    :param execute: Callable for shell commands (default: processutils.execute)."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def __init__(self, backends, fs_name, mount_point,"}],"source_content_type":"text/x-python","patch_set":7,"id":"22a2d489_0b72b540","line":90,"updated":"2026-06-17 14:43:50.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"}],"manila/share/drivers/weka/utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c6aa4e04b333ca14f197629f2d33faba32df08d8","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    return sanitized"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def build_export_location(backends, fs_name, is_admin_only\u003dFalse,"},{"line_number":96,"context_line":"                          preferred\u003dTrue, metadata\u003dNone):"},{"line_number":97,"context_line":"    \"\"\"Build a Manila export location dict for a WekaFS share."},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"4d1f8f3c_7ab82452","line":95,"updated":"2026-08-08 07:05:45.000000000","message":"`build_export_location()` is not called anywhere in the driver — only from its own tests. Remove this and its tests.","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    return sanitized"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def build_export_location(backends, fs_name, is_admin_only\u003dFalse,"},{"line_number":96,"context_line":"                          preferred\u003dTrue, metadata\u003dNone):"},{"line_number":97,"context_line":"    \"\"\"Build a Manila export location dict for a WekaFS share."},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ff9331af_3eaafc88","line":95,"in_reply_to":"4d1f8f3c_7ab82452","updated":"2026-08-26 22:37:56.000000000","message":"Done","commit_id":"edc2a4d6d18cd31f020286bef66abe2bb2a22059"}],"manila/tests/share/drivers/weka/fakes.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    NOTE the key is ``ips``, not ``ip``.  Writes take ``ip`` (create) and"},{"line_number":147,"context_line":"    ``add_ip``/``remove_ip`` (update), but a policy read back reports its"},{"line_number":148,"context_line":"    addresses under ``ips``.  This fixture previously used ``ip``, which"},{"line_number":149,"context_line":"    matched the driver\u0027s own wrong assumption -- so the suite stayed"},{"line_number":150,"context_line":"    green at 100% coverage while the driver read None on a live cluster"},{"line_number":151,"context_line":"    and never pruned or removed anything."},{"line_number":152,"context_line":"    \"\"\""},{"line_number":153,"context_line":"    return {"},{"line_number":154,"context_line":"        \u0027uid\u0027: uid,"}],"source_content_type":"text/x-python","patch_set":18,"id":"f698f58a_d659cfb9","line":151,"range":{"start_line":148,"start_character":30,"end_line":151,"end_character":41},"updated":"2026-08-26 22:37:56.000000000","message":"what does this mean? \n\nThis driver and this test module is brand new.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    NOTE the key is ``ips``, not ``ip``.  Writes take ``ip`` (create) and"},{"line_number":147,"context_line":"    ``add_ip``/``remove_ip`` (update), but a policy read back reports its"},{"line_number":148,"context_line":"    addresses under ``ips``.  This fixture previously used ``ip``, which"},{"line_number":149,"context_line":"    matched the driver\u0027s own wrong assumption -- so the suite stayed"},{"line_number":150,"context_line":"    green at 100% coverage while the driver read None on a live cluster"},{"line_number":151,"context_line":"    and never pruned or removed anything."},{"line_number":152,"context_line":"    \"\"\""},{"line_number":153,"context_line":"    return {"},{"line_number":154,"context_line":"        \u0027uid\u0027: uid,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1e4a015b_4da22e03","line":151,"range":{"start_line":148,"start_character":30,"end_line":151,"end_character":41},"in_reply_to":"f698f58a_d659cfb9","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    NOTE the key is ``rule``, not ``ip``, and the value is always stored"},{"line_number":166,"context_line":"    as ``address/dotted-mask`` -- a bare address comes back as"},{"line_number":167,"context_line":"    ``203.0.113.253/255.255.255.255``.  Fixtures that used ``{\u0027ip\u0027: ...}``"},{"line_number":168,"context_line":"    matched the driver\u0027s own wrong assumption, so its de-dup check could"},{"line_number":169,"context_line":"    never fire and every re-apply issued a duplicate add."},{"line_number":170,"context_line":"    \"\"\""},{"line_number":171,"context_line":"    return {"},{"line_number":172,"context_line":"        \u0027id\u0027: \u0027NfsClientGroupRuleId\u003c0\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"c25e8880_52e454a0","line":169,"range":{"start_line":167,"start_character":40,"end_line":169,"end_character":57},"updated":"2026-08-26 22:37:56.000000000","message":"same, what are you implying with this?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":216,"context_line":"FAKE_SNAPSHOT_ID \u003d \u0027snapshot-uuid-0001\u0027"},{"line_number":217,"context_line":"FAKE_PROJECT_ID \u003d \u0027proj-uuid-5678\u0027"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Used in create_share_from_snapshot tests — the *new* share being created"},{"line_number":220,"context_line":"# (distinct from the snapshot\u0027s parent share so names don\u0027t collide)."},{"line_number":221,"context_line":"# FAKE_NEW_FS_NAME must match _share_name(\u0027new-share-uuid-9999\u0027):"},{"line_number":222,"context_line":"#   \u0027manila_\u0027 + \u0027new-share-uuid-9999\u0027.replace(\u0027-\u0027,\u0027\u0027)"},{"line_number":223,"context_line":"#   \u003d\u003e \u0027manila_newshareuuid9999\u0027"},{"line_number":224,"context_line":"FAKE_NEW_SHARE_ID \u003d \u0027new-share-uuid-9999\u0027"},{"line_number":225,"context_line":"FAKE_NEW_FS_UID \u003d \u0027new-fs-uid-9999\u0027"},{"line_number":226,"context_line":"FAKE_NEW_FS_NAME \u003d \u0027manila_newshareuuid9999\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"5d7dc26a_a3b01c78","line":223,"range":{"start_line":219,"start_character":0,"end_line":223,"end_character":32},"updated":"2026-08-26 22:37:56.000000000","message":"Why does a human that\u0027s maintaining this code need to know this detail? Is this not easily understood from the naming/tests themselves? if yes, please drop","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"FAKE_SNAPSHOT_ID \u003d \u0027snapshot-uuid-0001\u0027"},{"line_number":217,"context_line":"FAKE_PROJECT_ID \u003d \u0027proj-uuid-5678\u0027"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"# Used in create_share_from_snapshot tests — the *new* share being created"},{"line_number":220,"context_line":"# (distinct from the snapshot\u0027s parent share so names don\u0027t collide)."},{"line_number":221,"context_line":"# FAKE_NEW_FS_NAME must match _share_name(\u0027new-share-uuid-9999\u0027):"},{"line_number":222,"context_line":"#   \u0027manila_\u0027 + \u0027new-share-uuid-9999\u0027.replace(\u0027-\u0027,\u0027\u0027)"},{"line_number":223,"context_line":"#   \u003d\u003e \u0027manila_newshareuuid9999\u0027"},{"line_number":224,"context_line":"FAKE_NEW_SHARE_ID \u003d \u0027new-share-uuid-9999\u0027"},{"line_number":225,"context_line":"FAKE_NEW_FS_UID \u003d \u0027new-fs-uid-9999\u0027"},{"line_number":226,"context_line":"FAKE_NEW_FS_NAME \u003d \u0027manila_newshareuuid9999\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"0bf0e930_11625c4a","line":223,"range":{"start_line":219,"start_character":0,"end_line":223,"end_character":32},"in_reply_to":"5d7dc26a_a3b01c78","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/tests/share/drivers/weka/test_driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":265,"context_line":"class TestWekaShareDriverCreateFromSnapshot(unittest.TestCase):"},{"line_number":266,"context_line":"    \"\"\"Unit tests for WekaShareDriver.create_share_from_snapshot."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    create_share_from_snapshot is async: it creates the filesystem"},{"line_number":269,"context_line":"    synchronously, spawns a background thread, and returns immediately"},{"line_number":270,"context_line":"    with STATUS_CREATING_FROM_SNAPSHOT.  The actual data copy runs in"},{"line_number":271,"context_line":"    _copy_snapshot_nfs (NFS) or _copy_snapshot_wekafs (WEKAFS)."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    Test coverage:"},{"line_number":274,"context_line":"      - Pre-condition failures (snapshot not found, no NFS server)"},{"line_number":275,"context_line":"      - Async dispatch: return dict with creating status + locations"},{"line_number":276,"context_line":"      - Happy path for WEKAFS (_copy_snapshot_wekafs direct call)"},{"line_number":277,"context_line":"      - Happy path for NFS (_copy_snapshot_nfs direct call)"},{"line_number":278,"context_line":"      - Each mount/rsync failure scenario in _copy_snapshot_nfs"},{"line_number":279,"context_line":"      - Cleanup resilience tests via _copy_snapshot_nfs direct calls"},{"line_number":280,"context_line":"    \"\"\""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    NFS_SERVER \u003d \u0027nfs.example.com\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"a290fd38_71a8051c","line":279,"range":{"start_line":268,"start_character":3,"end_line":279,"end_character":68},"updated":"2026-08-26 22:37:56.000000000","message":"Code is readable as is; this docstring is unnecessary. It\u0027s parotting what is being done via code","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":265,"context_line":"class TestWekaShareDriverCreateFromSnapshot(unittest.TestCase):"},{"line_number":266,"context_line":"    \"\"\"Unit tests for WekaShareDriver.create_share_from_snapshot."},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    create_share_from_snapshot is async: it creates the filesystem"},{"line_number":269,"context_line":"    synchronously, spawns a background thread, and returns immediately"},{"line_number":270,"context_line":"    with STATUS_CREATING_FROM_SNAPSHOT.  The actual data copy runs in"},{"line_number":271,"context_line":"    _copy_snapshot_nfs (NFS) or _copy_snapshot_wekafs (WEKAFS)."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    Test coverage:"},{"line_number":274,"context_line":"      - Pre-condition failures (snapshot not found, no NFS server)"},{"line_number":275,"context_line":"      - Async dispatch: return dict with creating status + locations"},{"line_number":276,"context_line":"      - Happy path for WEKAFS (_copy_snapshot_wekafs direct call)"},{"line_number":277,"context_line":"      - Happy path for NFS (_copy_snapshot_nfs direct call)"},{"line_number":278,"context_line":"      - Each mount/rsync failure scenario in _copy_snapshot_nfs"},{"line_number":279,"context_line":"      - Cleanup resilience tests via _copy_snapshot_nfs direct calls"},{"line_number":280,"context_line":"    \"\"\""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    NFS_SERVER \u003d \u0027nfs.example.com\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"aeed0672_3f4fc60a","line":279,"range":{"start_line":268,"start_character":3,"end_line":279,"end_character":68},"in_reply_to":"a290fd38_71a8051c","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":3192,"context_line":""},{"line_number":3193,"context_line":""},{"line_number":3194,"context_line":"class TestGetFsUidForShareEdgeCases(unittest.TestCase):"},{"line_number":3195,"context_line":"    \"\"\"Cover ORM-like metadata and managed-fs fallback (lines 1677-1711).\"\"\""},{"line_number":3196,"context_line":""},{"line_number":3197,"context_line":"    def _make_driver(self):"},{"line_number":3198,"context_line":"        drv \u003d weka_driver.WekaShareDriver.__new__(weka_driver.WekaShareDriver)"}],"source_content_type":"text/x-python","patch_set":18,"id":"87b10003_cde4aad6","line":3195,"range":{"start_line":3195,"start_character":56,"end_line":3195,"end_character":76},"updated":"2026-08-26 22:37:56.000000000","message":"where are these line numbers from? the code?\n\nCan you make a pass and get gratuitous comments like this cleaned up?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":4321,"context_line":"        org.create_filesystem.assert_called_once()"},{"line_number":4322,"context_line":""},{"line_number":4323,"context_line":""},{"line_number":4324,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":4325,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":18,"id":"420f022b_6e851371","line":4325,"range":{"start_line":4324,"start_character":0,"end_line":4325,"end_character":19},"updated":"2026-08-26 22:37:56.000000000","message":"you don\u0027t need this - remove this sorta thing from all teh modules; We use stestr via tox; stestr enumerates unittests and has an entry point into the tests that doesn\u0027t need you to call main() explicitly","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":4321,"context_line":"        org.create_filesystem.assert_called_once()"},{"line_number":4322,"context_line":""},{"line_number":4323,"context_line":""},{"line_number":4324,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":4325,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":18,"id":"789e5bad_5251c930","line":4325,"range":{"start_line":4324,"start_character":0,"end_line":4325,"end_character":19},"in_reply_to":"420f022b_6e851371","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"243886126b6c8d4c9c7ccac337fbfc4641134063","unresolved":true,"context_lines":[{"line_number":2362,"context_line":""},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"class TestWekaShareDriverInit(test.TestCase):"},{"line_number":2365,"context_line":"    \"\"\"Test normal __init__ construction path (lines 192-209).\"\"\""},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    @mock.patch(\u0027manila.share.drivers.weka.client.WekaApiClient\u0027)"},{"line_number":2368,"context_line":"    def test_init_via_normal_constructor(self, mock_client_cls):"}],"source_content_type":"text/x-python","patch_set":19,"id":"5dedcef4_8a660bf4","line":2365,"range":{"start_line":2365,"start_character":46,"end_line":2365,"end_character":61},"updated":"2026-08-28 06:38:41.000000000","message":"These line numbers are bound to drift. I\u0027d drop them here and everywhere else.","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"5e85a0051132bcca019513f68fceba848ed83418","unresolved":true,"context_lines":[{"line_number":2362,"context_line":""},{"line_number":2363,"context_line":""},{"line_number":2364,"context_line":"class TestWekaShareDriverInit(test.TestCase):"},{"line_number":2365,"context_line":"    \"\"\"Test normal __init__ construction path (lines 192-209).\"\"\""},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"    @mock.patch(\u0027manila.share.drivers.weka.client.WekaApiClient\u0027)"},{"line_number":2368,"context_line":"    def test_init_via_normal_constructor(self, mock_client_cls):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ddef8acc_cbf68796","line":2365,"range":{"start_line":2365,"start_character":46,"end_line":2365,"end_character":61},"in_reply_to":"5dedcef4_8a660bf4","updated":"2026-08-28 12:35:06.000000000","message":"+1","commit_id":"024ce60b7c0ed08183e33650db84d49f7cbc3456"}],"manila/tests/share/drivers/weka/test_posix.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"53f97092_1d977fa8","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2026-08-26 22:37:56.000000000","message":"2026?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"e82f1597_cfddf12f","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"53f97092_1d977fa8","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    return weka_posix.WekaMount(**defaults)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class TestWekaMountBuildOptions(unittest.TestCase):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_default_options(self):"},{"line_number":52,"context_line":"        m \u003d _make_mount(num_cores\u003d1)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a9b09230_24031183","line":49,"range":{"start_line":49,"start_character":32,"end_line":49,"end_character":49},"updated":"2026-08-26 22:37:56.000000000","message":"get this from manila.test","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    return weka_posix.WekaMount(**defaults)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class TestWekaMountBuildOptions(unittest.TestCase):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_default_options(self):"},{"line_number":52,"context_line":"        m \u003d _make_mount(num_cores\u003d1)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a5552f01_9597d62c","line":49,"range":{"start_line":49,"start_character":32,"end_line":49,"end_character":49},"in_reply_to":"a9b09230_24031183","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":96,"context_line":"        self.assertIn(\u0027num_cores\u003d4\u0027, opts)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class TestWekaMountIsMount(unittest.TestCase):"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_is_mounted_true(self):"},{"line_number":102,"context_line":"        proc_content \u003d ("}],"source_content_type":"text/x-python","patch_set":18,"id":"03fc6e65_6bc387cb","line":99,"range":{"start_line":99,"start_character":27,"end_line":99,"end_character":44},"updated":"2026-08-26 22:37:56.000000000","message":"same","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.assertIn(\u0027num_cores\u003d4\u0027, opts)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class TestWekaMountIsMount(unittest.TestCase):"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_is_mounted_true(self):"},{"line_number":102,"context_line":"        proc_content \u003d ("}],"source_content_type":"text/x-python","patch_set":18,"id":"8e059d8c_c824b111","line":99,"range":{"start_line":99,"start_character":27,"end_line":99,"end_character":44},"in_reply_to":"03fc6e65_6bc387cb","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        self.assertFalse(result)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class TestWekaMountMount(unittest.TestCase):"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def test_mount_calls_correct_command(self):"},{"line_number":137,"context_line":"        m \u003d _make_mount(num_cores\u003d2)"}],"source_content_type":"text/x-python","patch_set":18,"id":"f08eb008_d4f641cc","line":134,"range":{"start_line":134,"start_character":25,"end_line":134,"end_character":43},"updated":"2026-08-26 22:37:56.000000000","message":"same","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        self.assertFalse(result)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class TestWekaMountMount(unittest.TestCase):"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def test_mount_calls_correct_command(self):"},{"line_number":137,"context_line":"        m \u003d _make_mount(num_cores\u003d2)"}],"source_content_type":"text/x-python","patch_set":18,"id":"8a8f8820_cb7b0373","line":134,"range":{"start_line":134,"start_character":25,"end_line":134,"end_character":43},"in_reply_to":"f08eb008_d4f641cc","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/tests/share/drivers/weka/test_utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"725c486a_4f46042e","line":1,"updated":"2026-08-26 22:37:56.000000000","message":"2024?","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2024 Weka.IO Ltd."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"c85d2d2f_0738fa32","line":1,"in_reply_to":"725c486a_4f46042e","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from manila.share.drivers.weka import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestUnitConversion(unittest.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_gb_to_bytes(self):"},{"line_number":27,"context_line":"        self.assertEqual(1073741824, utils.gb_to_bytes(1))"}],"source_content_type":"text/x-python","patch_set":18,"id":"ce705202_ac1429f3","line":24,"range":{"start_line":24,"start_character":25,"end_line":24,"end_character":42},"updated":"2026-08-26 22:37:56.000000000","message":"-1\n\nfrom manila import test\n\nand subclass this with `test.TestCase` from there.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from manila.share.drivers.weka import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestUnitConversion(unittest.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_gb_to_bytes(self):"},{"line_number":27,"context_line":"        self.assertEqual(1073741824, utils.gb_to_bytes(1))"}],"source_content_type":"text/x-python","patch_set":18,"id":"18bfe12b_dd50f8b5","line":24,"range":{"start_line":24,"start_character":25,"end_line":24,"end_character":42},"in_reply_to":"ce705202_ac1429f3","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual({}, utils.sanitize_log_params({}))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class TestRetryOnTransient(unittest.TestCase):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_succeeds_on_first_try(self):"},{"line_number":75,"context_line":"        func \u003d mock.Mock(return_value\u003d\u0027ok\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ef9b7f96_0681243f","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":44},"updated":"2026-08-26 22:37:56.000000000","message":"here as well, and all of your test classes in this patch","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual({}, utils.sanitize_log_params({}))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class TestRetryOnTransient(unittest.TestCase):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_succeeds_on_first_try(self):"},{"line_number":75,"context_line":"        func \u003d mock.Mock(return_value\u003d\u0027ok\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"e7c26f39_98dc29b0","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":44},"in_reply_to":"ef9b7f96_0681243f","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}],"manila/tests/unit/share/drivers/weka/fakes.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3844236ac1ca4d535804df00f94f68398694b165","unresolved":true,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"def fake_access_rule(rule_id\u003dNone, access_type\u003d\u0027ip\u0027,"},{"line_number":190,"context_line":"                     access_to\u003d\u002710.0.0.0/24\u0027,"},{"line_number":191,"context_line":"                     access_level\u003d\u0027rw\u0027):"},{"line_number":192,"context_line":"    return {"},{"line_number":193,"context_line":"        \u0027access_id\u0027: rule_id or _uid(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"9b4c8f27_bc204616","line":190,"range":{"start_line":190,"start_character":32,"end_line":190,"end_character":43},"updated":"2026-06-17 23:14:17.000000000","message":"This uses a private (RFC 1918) address range. Per project/documentatiom conventions, test data and examples should use RFC 5737 documentation ranges: `192.0.2.0/24` (TEST-NET-1), `198.51.100.0/24` (TEST-NET-2), or `203.0.113.0/24` (TEST-NET-3).","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"},{"author":{"_account_id":39160,"name":"Assaf Giladi","display_name":"Assaf","email":"assaf@weka.io","username":"Assaf"},"change_message_id":"5e42d19f5b2d63c9e1643e05acdac417c1c7fe04","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"def fake_access_rule(rule_id\u003dNone, access_type\u003d\u0027ip\u0027,"},{"line_number":190,"context_line":"                     access_to\u003d\u002710.0.0.0/24\u0027,"},{"line_number":191,"context_line":"                     access_level\u003d\u0027rw\u0027):"},{"line_number":192,"context_line":"    return {"},{"line_number":193,"context_line":"        \u0027access_id\u0027: rule_id or _uid(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"d91bace8_a237c58c","line":190,"in_reply_to":"9b4c8f27_bc204616","updated":"2026-06-22 11:44:28.000000000","message":"PS8: switched example IPs to RFC 5737 documentation ranges.","commit_id":"9783b8ceb645b9c87b73b036e90f79437000ce53"}],"releasenotes/notes/add-weka-share-driver-9b1d4c7a2e6f8a31.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"33d9cb17ea9e815240205b4a19e51e80b2b53849","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Added a new share driver for Weka storage. The driver operates in"},{"line_number":5,"context_line":"    ``driver_handles_share_servers\u003dFalse`` mode and maps Weka filesystems"},{"line_number":6,"context_line":"    directly to Manila shares. It supports two protocols: ``WEKAFS`` (the"},{"line_number":7,"context_line":"    WekaFS POSIX kernel client) and ``NFS`` (Weka\u0027s NFS gateway). Supported"},{"line_number":8,"context_line":"    operations include create/delete, extend/shrink, snapshot create/delete,"},{"line_number":9,"context_line":"    revert-to-snapshot, create-share-from-snapshot, manage/unmanage, and"},{"line_number":10,"context_line":"    capacity reporting."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    ``WEKAFS`` shares are isolated per tenant: each Manila project is mapped"},{"line_number":13,"context_line":"    to its own Weka organization and its filesystems require authentication,"},{"line_number":14,"context_line":"    so a mount token scoped to one project cannot access another project\u0027s"},{"line_number":15,"context_line":"    shares. The per-project mount credential is returned to the tenant as the"},{"line_number":16,"context_line":"    ``WEKAFS`` access rule\u0027s ``access_key`` (self-service). Within an"},{"line_number":17,"context_line":"    organization, ``WEKAFS`` ``ip`` access rules are enforced per share by the"},{"line_number":18,"context_line":"    Weka cluster, which maps each rule to a per-filesystem security policy"},{"line_number":19,"context_line":"    admitting only the client source IPs it names (``--access-level`` is"},{"line_number":20,"context_line":"    honored; ``ip`` rules are IPv4-only); a share type may instead attach a"},{"line_number":21,"context_line":"    shared group policy via the ``weka:security_policy_group`` extra spec."},{"line_number":22,"context_line":"    This requires a multi-tenant Weka cluster and the ``weka_org_admin_secret``"},{"line_number":23,"context_line":"    configuration option."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Access rules are reconciled when Manila supplies the complete rule set"},{"line_number":26,"context_line":"    with no incremental additions or deletions: the driver removes the Weka"},{"line_number":27,"context_line":"    export permissions, client groups and security policy addresses that no"},{"line_number":28,"context_line":"    longer correspond to a rule, so a revoked rule cannot leave working"},{"line_number":29,"context_line":"    access behind on the cluster. Shares whose share type sets"},{"line_number":30,"context_line":"    ``weka:security_policy_group`` are exempt, because those policies are"},{"line_number":31,"context_line":"    shared between shares."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"07c5a3a0_6991dbd6","line":31,"range":{"start_line":7,"start_character":66,"end_line":31,"end_character":26},"updated":"2026-08-26 22:37:56.000000000","message":"All of this should be in the documentation. This is too much \"documentation\" to go into a release note. \n\nRelease notes need to be succint. They inform deployers/packagers about what\u0027s new/changed and what needs their attention.","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be8aeb05d9fb50d42011aea2e682873d6f45bad8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added a new share driver for Weka storage. The driver operates in"},{"line_number":5,"context_line":"    ``driver_handles_share_servers\u003dFalse`` mode and maps Weka filesystems"},{"line_number":6,"context_line":"    directly to Manila shares. It supports two protocols: ``WEKAFS`` (the"},{"line_number":7,"context_line":"    WekaFS POSIX kernel client) and ``NFS`` (Weka\u0027s NFS gateway). Supported"},{"line_number":8,"context_line":"    operations include create/delete, extend/shrink, snapshot create/delete,"},{"line_number":9,"context_line":"    revert-to-snapshot, create-share-from-snapshot, manage/unmanage, and"},{"line_number":10,"context_line":"    capacity reporting."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    ``WEKAFS`` shares are isolated per tenant: each Manila project is mapped"},{"line_number":13,"context_line":"    to its own Weka organization and its filesystems require authentication,"},{"line_number":14,"context_line":"    so a mount token scoped to one project cannot access another project\u0027s"},{"line_number":15,"context_line":"    shares. The per-project mount credential is returned to the tenant as the"},{"line_number":16,"context_line":"    ``WEKAFS`` access rule\u0027s ``access_key`` (self-service). Within an"},{"line_number":17,"context_line":"    organization, ``WEKAFS`` ``ip`` access rules are enforced per share by the"},{"line_number":18,"context_line":"    Weka cluster, which maps each rule to a per-filesystem security policy"},{"line_number":19,"context_line":"    admitting only the client source IPs it names (``--access-level`` is"},{"line_number":20,"context_line":"    honored; ``ip`` rules are IPv4-only); a share type may instead attach a"},{"line_number":21,"context_line":"    shared group policy via the ``weka:security_policy_group`` extra spec."},{"line_number":22,"context_line":"    This requires a multi-tenant Weka cluster and the ``weka_org_admin_secret``"},{"line_number":23,"context_line":"    configuration option."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Access rules are reconciled when Manila supplies the complete rule set"},{"line_number":26,"context_line":"    with no incremental additions or deletions: the driver removes the Weka"},{"line_number":27,"context_line":"    export permissions, client groups and security policy addresses that no"},{"line_number":28,"context_line":"    longer correspond to a rule, so a revoked rule cannot leave working"},{"line_number":29,"context_line":"    access behind on the cluster. Shares whose share type sets"},{"line_number":30,"context_line":"    ``weka:security_policy_group`` are exempt, because those policies are"},{"line_number":31,"context_line":"    shared between shares."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"a0fac3c7_82d378ef","line":31,"range":{"start_line":7,"start_character":66,"end_line":31,"end_character":26},"in_reply_to":"07c5a3a0_6991dbd6","updated":"2026-08-28 06:36:41.000000000","message":"Done","commit_id":"7790b2fff97e1ea0ca10171eb458dc8f523d11be"}]}
