)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1f9cecf2ef353be8b621b4dd2c750b02b4102009","unresolved":true,"context_lines":[{"line_number":9,"context_line":"With delete_retention_hours, NetApp backend deployment can decide how"},{"line_number":10,"context_line":"long shares/volumes will remain in recovery queue. But this is global"},{"line_number":11,"context_line":"config option and for debugging the value is kept close to higher limit."},{"line_number":12,"context_line":"However, sometime large number of shares created and deleted within"},{"line_number":13,"context_line":"short span of time and if such shares goes to recovery queue, the volume"},{"line_number":14,"context_line":"creation limit hits. So these volumes dont need to stay in recovery"},{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time\u0027 which can be configured"},{"line_number":18,"context_line":"to non-zero value to specify hours. If share alive time is less than"},{"line_number":19,"context_line":"configured value, share will be force deleted. Config value 0 signify"},{"line_number":20,"context_line":"shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Icb02c880c305ad380b9dc9c0f96747640f396b51"},{"line_number":23,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3ab402e4_cf38c954","line":20,"range":{"start_line":12,"start_character":0,"end_line":20,"end_character":40},"updated":"2026-03-12 16:08:22.000000000","message":"The reason for bringing this change up is to recover the volumes deleted in short span of time, but we are expecting the configuration to be set in hours. I feel thats contradicting and we should allow it to be set in minutes? \n\nIf its a cloud deployment and someone is trying to test the features by creating hundreds of volumes and would like them to be forced delete and short lived in the recovery queue, we can help with such scenarios as well.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With delete_retention_hours, NetApp backend deployment can decide how"},{"line_number":10,"context_line":"long shares/volumes will remain in recovery queue. But this is global"},{"line_number":11,"context_line":"config option and for debugging the value is kept close to higher limit."},{"line_number":12,"context_line":"However, sometime large number of shares created and deleted within"},{"line_number":13,"context_line":"short span of time and if such shares goes to recovery queue, the volume"},{"line_number":14,"context_line":"creation limit hits. So these volumes dont need to stay in recovery"},{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time\u0027 which can be configured"},{"line_number":18,"context_line":"to non-zero value to specify hours. If share alive time is less than"},{"line_number":19,"context_line":"configured value, share will be force deleted. Config value 0 signify"},{"line_number":20,"context_line":"shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Icb02c880c305ad380b9dc9c0f96747640f396b51"},{"line_number":23,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"b288fabd_a116a12d","line":20,"range":{"start_line":12,"start_character":0,"end_line":20,"end_character":40},"in_reply_to":"3ab402e4_cf38c954","updated":"2026-03-16 14:01:50.000000000","message":"ok, I changed to minutes.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"c2c3ce406518e26f2862d8f54a48c9121cb690df","unresolved":true,"context_lines":[{"line_number":19,"context_line":"configured value, share will be force deleted. Config value 0 signify"},{"line_number":20,"context_line":"shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Icb02c880c305ad380b9dc9c0f96747640f396b51"},{"line_number":23,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"},{"line_number":24,"context_line":"Signed-off-by: Kiran Pawar \u003ckinpaa@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e1dba473_3917b4b6","line":22,"updated":"2026-03-12 16:06:21.000000000","message":"Closes-bug: #2143047","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":false,"context_lines":[{"line_number":19,"context_line":"configured value, share will be force deleted. Config value 0 signify"},{"line_number":20,"context_line":"shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Icb02c880c305ad380b9dc9c0f96747640f396b51"},{"line_number":23,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"},{"line_number":24,"context_line":"Signed-off-by: Kiran Pawar \u003ckinpaa@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"cbc83a09_576b8fbe","line":22,"in_reply_to":"e1dba473_3917b4b6","updated":"2026-03-16 14:01:50.000000000","message":"Done","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"aded02c5842a66ab9d76b044e50a58c6ce58137f","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bf1d8117_14c3f060","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"updated":"2026-06-02 16:12:17.000000000","message":"I\u0027m honestly not 100% convinced that this is a strong indicator of whether the share deserves more time to be deleted or not. It\u0027s hard to say that because a share was created and deleted in a 2h span that it does not deserve more time. I think you might know this more than me, but usually you\u0027ll hand out share types to certain users and the usage can be predicted. Maybe additionally to this approach, the share types could have an extra spec called netapp:preserve_recovery and default it to False. If True, it would go through the regular deletion workflow and take more hours, but if False, it can be force deleted? I\u0027m open for your thoughts here.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"2df60bd35da3fd41b86f0fb45e22a2edd68291e6","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"23c5da4f_e8705185","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"0c213fa2_e85d265f","updated":"2026-06-03 05:56:23.000000000","message":"Partly:\n1. Some are CI, but those would like to test if the real productive share type is working properly, not some other dedicated test type (we could motivate some users via explanation or money, but not all)\n2. Some are really short-lived cattle shares. Created from a snap, used once and thrown away. Recovery not needed. Customers may know this upfront and may decide to use a dedicated share type. It increases the complexity both for operator as well as end user, though.\n\nBackground: netapp volumes in recovery queue count against max volume limit, which was running full before we introduced this downstream","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"fa28f239a321de37364d170365e032ce49872b98","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7bf8dcc0_e488b9a8","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"1fc1e4ec_1de96d53","updated":"2026-06-08 12:57:40.000000000","message":"As long as I still have the flexibility to set a timewindow (e.g. a netapp:force_delete_time_minutes extra spec), this is okay for me, as well.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"375cd1c0e87fece3667ba9b7377ae26bae77ec3a","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"a31a12ad_53d1b3d9","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"23c5da4f_e8705185","updated":"2026-06-03 12:00:02.000000000","message":"In addition to what Maurice mentioned, related config option \"netapp_delete_retention_hours\" (the NetApp config controlling how long volumes stay in recovery queue) is set per backend, not per volume. So making  \u0027netapp_force_delete_time_minutes\u0027 option also backend related can be consistent with it.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"3af3af908b3f2587a5028174ad19cd90efb8079a","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"d577cce8_7fc99efe","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"7bf8dcc0_e488b9a8","updated":"2026-06-08 14:22:34.000000000","message":"1. The share type extra-specs will just add more confusion to operator for this requirement. The use case is clear, where in CI tests large number of shares created and deleted quickly. We want to remove those shares forcefully (avoiding recovery queue)to have more space for next shares. There is no use case where operator want to force delete some shares and he has knowledge of how much time share will be alive in advance. In other words, An extra-spec implies the operator knows at share creation whether force-delete should apply. In reality, the whole point is to catch accidentally. In reality, the whole point is to catch accidentally short-lived shares — you don\u0027t know at provisioning time that a share will be deleted in X minutes. \n2. delete_rentention_hours is specific to share servers, we can not control this at share level e.g. if value is 10 for SVM, share can have less than that only. Also as any share land on any share server, this is absolutely lot of logic need to add in code to handle at share level.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"fde48116011ff53fa622664c2a865be65d0bde73","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"c9f15502_5dbf4fae","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"a31a12ad_53d1b3d9","updated":"2026-06-04 15:14:46.000000000","message":"Ack, thanks for explaining. I\u0027m in for it as long as we can make people aware of this behavior. Maybe this should also be documented in the NetApp docs? @anoop.shukla@netapp.com and @gawasthi2010@gmail.com any thoughts on this discussion?","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"92e20b825b11acb4c782716f8e67a71bf883e691","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"d22304d7_b11fba04","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"a83c502f_c749886d","updated":"2026-07-16 14:33:01.000000000","message":"\u003e For eg, if you are creating shares for CI/CD, you know that those shares are not going to be long lasting. \n\n+1 \n\nWell, I\u0027d vote for share types but I don\u0027t want to hold it because of that. Just please work on the documentation for it because it\u0027s an impactful change.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"3e50f54b66380ca433e17c355c56fe68315e4620","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"c57b76bb_ba455c5a","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"bf1d8117_14c3f060","updated":"2026-06-02 16:33:06.000000000","message":"This more of deployment option rather than per share type option. There is no use case, to keep this in one share type and remove in another. We simply want to make sure the shares which are deleted quickly i.e. short window should not stay in queue to create window for future shares. Controlling via simple config option is enough imho.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"d550af5807b69bc20711c39811a7c8f85e93f258","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"0c213fa2_e85d265f","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"c57b76bb_ba455c5a","updated":"2026-06-02 21:43:36.000000000","message":"Is this more of a CI use case? I\u0027m asking because I\u0027m thinking of a production scenario, where I think this has the issues I mentioned with you.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9ad302a8ec5ff6e2c0dffb5ae4e850ad74602f2e","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1fc1e4ec_1de96d53","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"c9f15502_5dbf4fae","updated":"2026-06-08 12:36:54.000000000","message":"I think what Carlos says makes sense. Any reason this cannot be passed as Share Extra specs? Ideally setting at the backend level enforces all shares to be deleted forcefully. While an option at share level using extra spec would make a lot more sense as if the same backend has 10% forceful delete enabled volumes, the forceful delete applies to only those. The netapp_delete_retention_hours config is a reflection of ONTAP\u0027s configuration which does apply at share server/backend level. If we change this granularity to Shares, it will be more flexible feature and the decision can be taken at provisioning time while allocating a share vs deciding at the init of a backend?","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"e92eec055ba05bcecfd05a13fd6a2e50a69c80cf","unresolved":false,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"c14077f4_34273251","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"d22304d7_b11fba04","updated":"2026-07-16 16:29:04.000000000","message":"Done","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"dd55ce1a87afaae0f4696d0b5d528f51bfa7f128","unresolved":true,"context_lines":[{"line_number":15,"context_line":"queue at all i.e. they can be force deleted."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Added config option \u0027netapp_force_delete_time_minutes\u0027 which can be"},{"line_number":18,"context_line":"configured to non-zero value to specify minutes. If share alive time is"},{"line_number":19,"context_line":"less than configured value, share will be force deleted. Config value 0"},{"line_number":20,"context_line":"signify shares will always go in recovery queue."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-bug: #2143047"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"a83c502f_c749886d","line":19,"range":{"start_line":18,"start_character":49,"end_line":19,"end_character":57},"in_reply_to":"d577cce8_7fc99efe","updated":"2026-06-16 07:34:13.000000000","message":"Okay. Makes sense. I just do not concur with the point - \"you don\u0027t know at provisioning time that a share will be deleted in X minutes.\" For eg, if you are creating shares for CI/CD, you know that those shares are not going to be long lasting. For such use cases, marking them as share type extra spec would have made sense. Manila.conf changes require restarting the driver, which could be avoided in such scenarios. For now I am okay, but the extra-spec approach really sounded like ticking all the boxes.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1f9cecf2ef353be8b621b4dd2c750b02b4102009","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6566fca5_95ec3230","updated":"2026-03-12 16:08:22.000000000","message":"Please look at the comments.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"306a8d2584d0e78c7063b2ca9f25acc52640744e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bd49ce0d_1de1b7ab","updated":"2026-05-05 06:30:34.000000000","message":"Run-NetApp CI","commit_id":"4fe7d9875a07817e36685c141d085cc389c7ba71"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"0aed1b937c5170da86cf04820f7b1c2f3bf230a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f1db6b51_46c3b103","updated":"2026-05-26 14:13:54.000000000","message":"Need to add UT for a method introduced. Otherwise code looks fine to me.","commit_id":"4462683f689ce6e7655a86f44473befeec0bb33a"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0755271529128355040b6518faebfe453dc7c3bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7864a973_2d03699b","updated":"2026-05-27 07:26:14.000000000","message":"minor remarks inline","commit_id":"9702f9b1324fcd567e712c2ea194ac4a3ce74df5"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"577c7be18c9dde979b11550200120dc4f1e21751","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"db1b6e10_95bfef65","updated":"2026-06-02 11:49:07.000000000","message":"LGTM","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"aded02c5842a66ab9d76b044e50a58c6ce58137f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7af2b8be_c94acb18","updated":"2026-06-02 16:12:17.000000000","message":"Thanks for working on this change. Please take a look at the comments inline","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"46bce5023d26e22089cc9dd0290560bad9005069","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"37cc20c3_292626a6","updated":"2026-07-16 14:37:49.000000000","message":"ok, I will update to use extra-specs and ask for re-review. Marking WIP","commit_id":"54b4ad73c2d1e1988eb7a1ffa0fc6a4b4ac3d410"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1ac65f47930f8c24ea0bde5c83b45a37d4da9ffc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b6f6eafb_8dd7371f","updated":"2026-07-23 14:08:12.000000000","message":"Please see if the below comment makes sense. I think with not having a constant, it can lead to issues fixing it one place and forgetting to fix it in another.","commit_id":"1919cc45ac9445bbc5c0eb5aad746a5bc09edcad"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"73f83f7201a64cbe33448da724037fe5f379fe78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"13761474_d7387b9f","updated":"2026-07-23 08:58:10.000000000","message":"Thanks for working on this. LGTM!\nPlease update the doc(https://netapp-openstack-dev.github.io/openstack-docs/draft/manila/deployment_choice/section_creating_service_catalog.html) with this option as well.","commit_id":"1919cc45ac9445bbc5c0eb5aad746a5bc09edcad"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"6058789517924a0c6a25b2f66f62af9ab195db2f","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.features.add_feature(\u0027UNIFIED_AGGR\u0027, supported\u003dontap_9_10_1)"},{"line_number":117,"context_line":"        self.features.add_feature(\u0027DELETE_RETENTION_HOURS\u0027,"},{"line_number":118,"context_line":"                                  supported\u003dontap_9_11_1)"},{"line_number":119,"context_line":"        self.features.add_feature(\u0027FORCE_DELETE\u0027, supported\u003dontap_9_12)"},{"line_number":120,"context_line":"        self.features.add_feature(\u0027AES_ENCRYPTION_TYPES\u0027,"},{"line_number":121,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"31411a97_6e012563","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":71},"updated":"2026-03-09 10:11:43.000000000","message":"more a question to NetApp folks: 9.12 is already out of full support - do you think it makes sense to implement support for older releases that may be only on limited support or self-service support?\n\nThis influences, wether the else-condition of force_delete_volume() with the dangerous system-cli command should be added or not.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1f9cecf2ef353be8b621b4dd2c750b02b4102009","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.features.add_feature(\u0027UNIFIED_AGGR\u0027, supported\u003dontap_9_10_1)"},{"line_number":117,"context_line":"        self.features.add_feature(\u0027DELETE_RETENTION_HOURS\u0027,"},{"line_number":118,"context_line":"                                  supported\u003dontap_9_11_1)"},{"line_number":119,"context_line":"        self.features.add_feature(\u0027FORCE_DELETE\u0027, supported\u003dontap_9_12)"},{"line_number":120,"context_line":"        self.features.add_feature(\u0027AES_ENCRYPTION_TYPES\u0027,"},{"line_number":121,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e5bcbb24_5b60bd7a","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":71},"in_reply_to":"31411a97_6e012563","updated":"2026-03-12 16:08:22.000000000","message":"Most of our customer base is on ONTAP 9.14 and onwards. I can get this information from the PM team to see if we can limit this as a feature that works for \u003e9.15 customers which would make sense as we do not want customers to linger on older releases.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4b9af424c869a6fbceac6d424108e53ac807ca8a","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.features.add_feature(\u0027UNIFIED_AGGR\u0027, supported\u003dontap_9_10_1)"},{"line_number":117,"context_line":"        self.features.add_feature(\u0027DELETE_RETENTION_HOURS\u0027,"},{"line_number":118,"context_line":"                                  supported\u003dontap_9_11_1)"},{"line_number":119,"context_line":"        self.features.add_feature(\u0027FORCE_DELETE\u0027, supported\u003dontap_9_12)"},{"line_number":120,"context_line":"        self.features.add_feature(\u0027AES_ENCRYPTION_TYPES\u0027,"},{"line_number":121,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a8b4e6d8_4ef627be","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":71},"in_reply_to":"7db25966_d5703f99","updated":"2026-03-17 09:45:03.000000000","message":"I checked with our PM, and found that we do not need to support older versions of ONTAP for new features. We can do it as \u003e 9.15.1 or later versions.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"29458cb696ebf0da974db3b7dafbb958f78874ce","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.features.add_feature(\u0027UNIFIED_AGGR\u0027, supported\u003dontap_9_10_1)"},{"line_number":117,"context_line":"        self.features.add_feature(\u0027DELETE_RETENTION_HOURS\u0027,"},{"line_number":118,"context_line":"                                  supported\u003dontap_9_11_1)"},{"line_number":119,"context_line":"        self.features.add_feature(\u0027FORCE_DELETE\u0027, supported\u003dontap_9_12)"},{"line_number":120,"context_line":"        self.features.add_feature(\u0027AES_ENCRYPTION_TYPES\u0027,"},{"line_number":121,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f73d5f8f_c7cbe06f","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":71},"in_reply_to":"a8b4e6d8_4ef627be","updated":"2026-03-17 12:07:24.000000000","message":"Thanks for confirming, removing system-cli i.e. else part.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.features.add_feature(\u0027UNIFIED_AGGR\u0027, supported\u003dontap_9_10_1)"},{"line_number":117,"context_line":"        self.features.add_feature(\u0027DELETE_RETENTION_HOURS\u0027,"},{"line_number":118,"context_line":"                                  supported\u003dontap_9_11_1)"},{"line_number":119,"context_line":"        self.features.add_feature(\u0027FORCE_DELETE\u0027, supported\u003dontap_9_12)"},{"line_number":120,"context_line":"        self.features.add_feature(\u0027AES_ENCRYPTION_TYPES\u0027,"},{"line_number":121,"context_line":"                                  supported\u003dontap_9_12_1)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7db25966_d5703f99","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":71},"in_reply_to":"e5bcbb24_5b60bd7a","updated":"2026-03-16 14:01:50.000000000","message":"can you share the information ? I will update next patchset accordingly,","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0755271529128355040b6518faebfe453dc7c3bc","unresolved":true,"context_lines":[{"line_number":3971,"context_line":"        if force_delete:"},{"line_number":3972,"context_line":"            try:"},{"line_number":3973,"context_line":"                self.force_delete_volume(volume_name)"},{"line_number":3974,"context_line":"            except exception.NetAppException:"},{"line_number":3975,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":3976,"context_line":"        else:"},{"line_number":3977,"context_line":"            self.soft_delete_volume(volume_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"380f7f03_daaebf78","line":3974,"updated":"2026-05-27 07:26:14.000000000","message":"can we please log the error why force_delete is not working and we fallback to normal soft_delete?","commit_id":"9702f9b1324fcd567e712c2ea194ac4a3ce74df5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"49a8a7e293a399ad4498b9bdb1b7c1b95dcf3654","unresolved":false,"context_lines":[{"line_number":3971,"context_line":"        if force_delete:"},{"line_number":3972,"context_line":"            try:"},{"line_number":3973,"context_line":"                self.force_delete_volume(volume_name)"},{"line_number":3974,"context_line":"            except exception.NetAppException:"},{"line_number":3975,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":3976,"context_line":"        else:"},{"line_number":3977,"context_line":"            self.soft_delete_volume(volume_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"504726f0_4cb04328","line":3974,"in_reply_to":"380f7f03_daaebf78","updated":"2026-05-27 09:36:56.000000000","message":"Done","commit_id":"9702f9b1324fcd567e712c2ea194ac4a3ce74df5"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0755271529128355040b6518faebfe453dc7c3bc","unresolved":true,"context_lines":[{"line_number":1898,"context_line":"        if force_delete:"},{"line_number":1899,"context_line":"            try:"},{"line_number":1900,"context_line":"                self.force_delete_volume(volume_name)"},{"line_number":1901,"context_line":"            except exception.NetAppException:"},{"line_number":1902,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":1903,"context_line":"        else:"},{"line_number":1904,"context_line":"            return self.soft_delete_volume("}],"source_content_type":"text/x-python","patch_set":9,"id":"62bfb4e5_1f644f0e","line":1901,"updated":"2026-05-27 07:26:14.000000000","message":"same here, please add logging for the fact and the reason why we are not force deleting","commit_id":"9702f9b1324fcd567e712c2ea194ac4a3ce74df5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"49a8a7e293a399ad4498b9bdb1b7c1b95dcf3654","unresolved":false,"context_lines":[{"line_number":1898,"context_line":"        if force_delete:"},{"line_number":1899,"context_line":"            try:"},{"line_number":1900,"context_line":"                self.force_delete_volume(volume_name)"},{"line_number":1901,"context_line":"            except exception.NetAppException:"},{"line_number":1902,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":1903,"context_line":"        else:"},{"line_number":1904,"context_line":"            return self.soft_delete_volume("}],"source_content_type":"text/x-python","patch_set":9,"id":"d88887b3_30c4e275","line":1901,"in_reply_to":"62bfb4e5_1f644f0e","updated":"2026-05-27 09:36:56.000000000","message":"Done","commit_id":"9702f9b1324fcd567e712c2ea194ac4a3ce74df5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"aded02c5842a66ab9d76b044e50a58c6ce58137f","unresolved":true,"context_lines":[{"line_number":1902,"context_line":"                LOG.error(\"Force delete failed for volume %(vol)s, falling \""},{"line_number":1903,"context_line":"                          \"back to soft delete. Reason: %(res)s\", {"},{"line_number":1904,"context_line":"                              \u0027vol\u0027: volume_name, \u0027res\u0027: e.msg})"},{"line_number":1905,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":1906,"context_line":"        else:"},{"line_number":1907,"context_line":"            return self.soft_delete_volume("},{"line_number":1908,"context_line":"                volume_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fd67935d_c244f62b","line":1905,"range":{"start_line":1905,"start_character":39,"end_line":1905,"end_character":52},"updated":"2026-06-02 16:12:17.000000000","message":"```suggestion\n                self.soft_delete_volume(volume_name, return_errors\u003dreturn_errors)\n```","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"3e50f54b66380ca433e17c355c56fe68315e4620","unresolved":false,"context_lines":[{"line_number":1902,"context_line":"                LOG.error(\"Force delete failed for volume %(vol)s, falling \""},{"line_number":1903,"context_line":"                          \"back to soft delete. Reason: %(res)s\", {"},{"line_number":1904,"context_line":"                              \u0027vol\u0027: volume_name, \u0027res\u0027: e.msg})"},{"line_number":1905,"context_line":"                self.soft_delete_volume(volume_name)"},{"line_number":1906,"context_line":"        else:"},{"line_number":1907,"context_line":"            return self.soft_delete_volume("},{"line_number":1908,"context_line":"                volume_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"418ad25d_7cf555d2","line":1905,"range":{"start_line":1905,"start_character":39,"end_line":1905,"end_character":52},"in_reply_to":"fd67935d_c244f62b","updated":"2026-06-02 16:33:06.000000000","message":"Done","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.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":"1f9cecf2ef353be8b621b4dd2c750b02b4102009","unresolved":true,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"fde47ea1_2029ae9f","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"updated":"2026-03-12 16:08:22.000000000","message":"Doesnt this make the implementation equivalent to delete_retention_hours config? If I can configure delete_retention_hours as default, is the only differentiation I get with the new configuration is that I can set it at backend level?","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"29458cb696ebf0da974db3b7dafbb958f78874ce","unresolved":false,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"ee52ac75_b4a60695","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"in_reply_to":"0e195adf_895215d6","updated":"2026-03-17 12:07:24.000000000","message":"Done","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"3cbc671ea6f0b135cb4e4a7f0c0a069567934042","unresolved":true,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e195adf_895215d6","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"in_reply_to":"884ecdad_3bd1d705","updated":"2026-03-17 09:41:48.000000000","message":"depends on what values you have configured.\ndelete_rentention_hours \u003d 12 and netapp_force_delete_time_minutes \u003d 120, the share which are live less than 120 minutes will skip recovery queue and force deleted.\n\n1. shares which are deleted less than 120 minutes will stay on backend for same time duration they are deleted in manila. so actual backend time \u003d manila time\n\n2. shares which are deleted more than 120 minutes will stay additional retention_hours on backed. so actual backend time \u003d manila time + retention hours.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bceef56c6d9f0b40ebe25d9ed2b1f29e875430ea","unresolved":true,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"884ecdad_3bd1d705","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"in_reply_to":"996b33da_a0db00a7","updated":"2026-03-17 09:30:01.000000000","message":"What would happen if I have delete_retention_hours and netapp_force_delete both configured at the same time?","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bdd7f5a388a0379f4a0e8d86091a55c40125c7e9","unresolved":false,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"9dbf2303_58ef4a7e","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"in_reply_to":"ee52ac75_b4a60695","updated":"2026-03-17 12:30:02.000000000","message":"Okay. so I guess the behaviour is whichever comes first. Thanks for confirming.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":true,"context_lines":[{"line_number":2153,"context_line":"        # Share doesn\u0027t need to exist to be assigned to a fpolicy scope"},{"line_number":2154,"context_line":"        self._delete_fpolicy_for_share(share, vserver, vserver_client)"},{"line_number":2155,"context_line":""},{"line_number":2156,"context_line":"        duration_sec \u003d share.get(\u0027duration_seconds\u0027, 24 * 60 * 60)  # 24 Hrs"},{"line_number":2157,"context_line":"        delete_sec \u003d self.configuration.netapp_force_delete_time * 60 * 60"},{"line_number":2158,"context_line":"        force_delete \u003d False"},{"line_number":2159,"context_line":"        if delete_sec \u003e 0 and duration_sec \u003c delete_sec:"},{"line_number":2160,"context_line":"            force_delete \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"996b33da_a0db00a7","line":2157,"range":{"start_line":2156,"start_character":5,"end_line":2157,"end_character":74},"in_reply_to":"fde47ea1_2029ae9f","updated":"2026-03-16 14:01:50.000000000","message":"delete_retention_hours is to decide window of retention. This is applicable to all shares. Force delete feature is to skip retention queue completely and only applicable to shares which are deleted within force_delete_time window.\n\ncan you rephrase your second question ?","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"6058789517924a0c6a25b2f66f62af9ab195db2f","unresolved":true,"context_lines":[{"line_number":171,"context_line":"    cfg.IntOpt(\u0027netapp_force_delete_time\u0027,"},{"line_number":172,"context_line":"               default\u003d0,"},{"line_number":173,"context_line":"               min\u003d0,"},{"line_number":174,"context_line":"               max\u003d12,"},{"line_number":175,"context_line":"               help\u003d\u0027Maximum time diff in hours to decide whether share will \u0027"},{"line_number":176,"context_line":"                    \u0027be deleted or force deleted. If time difference between \u0027"},{"line_number":177,"context_line":"                    \u0027share deletion time and creation time is less than \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"a9b49dcb_3ca5868e","line":174,"updated":"2026-03-09 10:11:43.000000000","message":"I would not set a max at all, since this is dynamic depending how the admin sets netapp_delete_retention_hours","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    cfg.IntOpt(\u0027netapp_force_delete_time\u0027,"},{"line_number":172,"context_line":"               default\u003d0,"},{"line_number":173,"context_line":"               min\u003d0,"},{"line_number":174,"context_line":"               max\u003d12,"},{"line_number":175,"context_line":"               help\u003d\u0027Maximum time diff in hours to decide whether share will \u0027"},{"line_number":176,"context_line":"                    \u0027be deleted or force deleted. If time difference between \u0027"},{"line_number":177,"context_line":"                    \u0027share deletion time and creation time is less than \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"cf502272_98c9c051","line":174,"in_reply_to":"a9b49dcb_3ca5868e","updated":"2026-03-16 14:01:50.000000000","message":"sure, removed max. In case admin set force_delete_time more than rentention hours, it will be regularly deleted and we are good with it. In case admin set force_delete_time less than rentetion hours, it will be forced deleted.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"}],"manila/share/manager.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"6058789517924a0c6a25b2f66f62af9ab195db2f","unresolved":true,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"ab4e9d01_956fec7f","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"updated":"2026-03-09 10:11:43.000000000","message":"I think we should be more defensive - setting duration to 0 if scheduled_at or terminated_at are missing, would mean we would always force delete in such case (if force delete is enabled at all, of course).\nRather set it to something high as fallback, I can imagine setting it to a week or something?","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1f9cecf2ef353be8b621b4dd2c750b02b4102009","unresolved":true,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"d913bb62_ec820085","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"in_reply_to":"ab4e9d01_956fec7f","updated":"2026-03-12 16:08:22.000000000","message":"OR use the ONTAP default which is 12 hours? https://docs.netapp.com/us-en/ontap/volumes/protection-accidental-volume-deletion-concept.html","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"e92eec055ba05bcecfd05a13fd6a2e50a69c80cf","unresolved":false,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"669a95da_20103cf3","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"in_reply_to":"baa1595a_2893a498","updated":"2026-07-16 16:29:04.000000000","message":"Done","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"39d89c3de122900696f6392b5d4075da7a0ec635","unresolved":false,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"da7cf5a9_740a4edc","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"in_reply_to":"d913bb62_ec820085","updated":"2026-03-16 14:01:50.000000000","message":"Since we are setting in common code, I think we should set to larger possible value and so week is fine.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bdd7f5a388a0379f4a0e8d86091a55c40125c7e9","unresolved":false,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"f74dbd6d_aed08dfa","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"in_reply_to":"da7cf5a9_740a4edc","updated":"2026-03-17 12:30:02.000000000","message":"Isnt a week too long for retention? Anyways, I will not block it for this since its configurable. But since storage and I believe most storage, would not want to keep retention of more than 24 hrs for ensuring space release, I would let either Carlos/Goutham comment on this part.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6e5a9791acba75964855792c1973825198274b32","unresolved":true,"context_lines":[{"line_number":3739,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3740,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3741,"context_line":"            return duration.total_seconds()"},{"line_number":3742,"context_line":"        return 0"},{"line_number":3743,"context_line":""},{"line_number":3744,"context_line":"    @add_hooks"},{"line_number":3745,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa1595a_2893a498","line":3742,"range":{"start_line":3742,"start_character":8,"end_line":3742,"end_character":16},"in_reply_to":"f74dbd6d_aed08dfa","updated":"2026-03-17 14:03:08.000000000","message":"This value is just to make sure if terminated_at and scheduled_at are missing from share, it will be deleted in regular manner instead of force delete. Value can be anything, week is large enough to make sure it wont be force-deleted.\n\nAdding Goutham and Carlos in reviewers.","commit_id":"ea711df9392ac749dd3e6310a1f6776275348c11"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"0aed1b937c5170da86cf04820f7b1c2f3bf230a3","unresolved":true,"context_lines":[{"line_number":3737,"context_line":"        share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":3738,"context_line":"        return (share, share_instance, share_server)"},{"line_number":3739,"context_line":""},{"line_number":3740,"context_line":"    def _get_duration_seconds_for_instances(self, share_instance):"},{"line_number":3741,"context_line":"        scheduled_at \u003d share_instance.get(\u0027scheduled_at\u0027)"},{"line_number":3742,"context_line":"        terminated_at \u003d share_instance.get(\u0027terminated_at\u0027)"},{"line_number":3743,"context_line":"        if scheduled_at and terminated_at:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7dcbfa9f_cc42a9b4","line":3740,"updated":"2026-05-26 14:13:54.000000000","message":"I do not see UT coverage for this new method. Can we add that?","commit_id":"4462683f689ce6e7655a86f44473befeec0bb33a"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"20d2ac8beeef3eb41887452fec8ffeeb7a3fb53a","unresolved":false,"context_lines":[{"line_number":3737,"context_line":"        share_server \u003d self._get_share_server(context, share_instance)"},{"line_number":3738,"context_line":"        return (share, share_instance, share_server)"},{"line_number":3739,"context_line":""},{"line_number":3740,"context_line":"    def _get_duration_seconds_for_instances(self, share_instance):"},{"line_number":3741,"context_line":"        scheduled_at \u003d share_instance.get(\u0027scheduled_at\u0027)"},{"line_number":3742,"context_line":"        terminated_at \u003d share_instance.get(\u0027terminated_at\u0027)"},{"line_number":3743,"context_line":"        if scheduled_at and terminated_at:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a80dffe_e99d86b6","line":3740,"in_reply_to":"7dcbfa9f_cc42a9b4","updated":"2026-05-26 15:45:05.000000000","message":"Done","commit_id":"4462683f689ce6e7655a86f44473befeec0bb33a"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"aded02c5842a66ab9d76b044e50a58c6ce58137f","unresolved":true,"context_lines":[{"line_number":3743,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3744,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3745,"context_line":"            return duration.total_seconds()"},{"line_number":3746,"context_line":"        return (24 * 7 * 60 * 60)"},{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":"    @add_hooks"},{"line_number":3749,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":10,"id":"05667426_a788f021","line":3746,"range":{"start_line":3746,"start_character":8,"end_line":3746,"end_character":33},"updated":"2026-06-02 16:12:17.000000000","message":"We\u0027d benefit from a comment explaining these values in order.","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"3e50f54b66380ca433e17c355c56fe68315e4620","unresolved":false,"context_lines":[{"line_number":3743,"context_line":"        if scheduled_at and terminated_at:"},{"line_number":3744,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3745,"context_line":"            return duration.total_seconds()"},{"line_number":3746,"context_line":"        return (24 * 7 * 60 * 60)"},{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":"    @add_hooks"},{"line_number":3749,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":10,"id":"2a64d031_0d4f5b4b","line":3746,"range":{"start_line":3746,"start_character":8,"end_line":3746,"end_character":33},"in_reply_to":"05667426_a788f021","updated":"2026-06-02 16:33:06.000000000","message":"Done","commit_id":"a0b0c8434972543123ad1955517208d00ed1fb15"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"1ac65f47930f8c24ea0bde5c83b45a37d4da9ffc","unresolved":true,"context_lines":[{"line_number":3744,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3745,"context_line":"            return duration.total_seconds()"},{"line_number":3746,"context_line":"        # Else, assume share was alive for a week. Thus, (7 days x 24 hours)"},{"line_number":3747,"context_line":"        return (7 * 24 * 60 * 60)"},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"    @add_hooks"},{"line_number":3750,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":13,"id":"d0f3426e_02b4afb6","line":3747,"updated":"2026-07-23 14:08:12.000000000","message":"I think these should be using constants as they reoccur at multiple places, it will be easier to get it from a constant rather than making a mistake in one place while code maintenance not knowing where else the week is used.","commit_id":"1919cc45ac9445bbc5c0eb5aad746a5bc09edcad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"134a051f2a8bdae161791aa2b0292bc9bf62b73a","unresolved":false,"context_lines":[{"line_number":3744,"context_line":"            duration \u003d terminated_at - scheduled_at"},{"line_number":3745,"context_line":"            return duration.total_seconds()"},{"line_number":3746,"context_line":"        # Else, assume share was alive for a week. Thus, (7 days x 24 hours)"},{"line_number":3747,"context_line":"        return (7 * 24 * 60 * 60)"},{"line_number":3748,"context_line":""},{"line_number":3749,"context_line":"    @add_hooks"},{"line_number":3750,"context_line":"    @utils.require_driver_initialized"}],"source_content_type":"text/x-python","patch_set":13,"id":"84de8a3c_40dba3d1","line":3747,"in_reply_to":"d0f3426e_02b4afb6","updated":"2026-07-30 13:30:58.000000000","message":"Done","commit_id":"1919cc45ac9445bbc5c0eb5aad746a5bc09edcad"}]}
