)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This feature allows users to create a share group with affinity policy."},{"line_number":10,"context_line":"The affinity policy is used to specify the affinity relationship between"},{"line_number":11,"context_line":"the shares in the share group. The reltionship can be either \"affinity\""},{"line_number":12,"context_line":"or \"anti-affinity\". Manila will schedule the shares in the share group"},{"line_number":13,"context_line":"based on the affinity policy."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"be988b54_e270b0e7","line":11,"updated":"2024-10-28 14:30:46.000000000","message":"nit: relationship","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This feature allows users to create a share group with affinity policy."},{"line_number":10,"context_line":"The affinity policy is used to specify the affinity relationship between"},{"line_number":11,"context_line":"the shares in the share group. The reltionship can be either \"affinity\""},{"line_number":12,"context_line":"or \"anti-affinity\". Manila will schedule the shares in the share group"},{"line_number":13,"context_line":"based on the affinity policy."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"936546d8_06b654a9","line":11,"in_reply_to":"be988b54_e270b0e7","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"96d83470_79651121","updated":"2024-10-28 14:30:46.000000000","message":"Why is affinity_policy not just a new group_spec of share_group_type?\n\nAnd please also have a look at the smaller comments/questions inline.","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"dd941922_711558ff","in_reply_to":"96d83470_79651121","updated":"2024-10-28 15:41:09.000000000","message":"I feel affinity is different from share group type or cg in many ways. (The share group type is inherited from the consistent group) \n\nThe affinity policy is enum typed, allowing only values of \"affinity\" or \"anti-affinity\", while cg settings are not constrained (any key-value pair is allowed). The cg and affinity are mutually exclusive to each other; either cg or affinity can be set, but not both. Share group type, (seems to me), is usually configured by admin, like share type; while affinity is controlled from user end.\n\nseems to me, separating them makes more sense and might be easier to implement and manage.","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"1c1e8460ee8a8ed0414dc821c7de94b7f45de40a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ab58fc19_8622d4d3","in_reply_to":"c298f14e_f683941b","updated":"2024-12-13 03:52:20.000000000","message":"I prefer to place anti-affinity in group type, so that the database does not need to be changed, and it is more consistent with the meaning of group type.","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"47c2d3b19f155a8b5507dd633cf6c312d07f346f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"fb0d2a71_b29d8981","in_reply_to":"dd941922_711558ff","updated":"2024-11-29 15:01:10.000000000","message":"Done","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"6a99014b19abd4dd08d256fe121c8bb824a5d5fa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c298f14e_f683941b","in_reply_to":"f43ae3b8_32277bea","updated":"2024-12-09 17:57:16.000000000","message":"Thanks for the review, Goutham. Here is my two cents.\n\nWith the proposed approach, admin does not need to create share group types for affinity and anti-affinity in Manila. (I assume that admin creates share group types similarly to share types.) And for users, it\u0027s probably more natural, to create a affinity group or anti-affinity group directly.\n\nAnd deeper motivation is based on the concept. My understanding is that the share group type is used by scheduler to check the capabilities of backend host. Admin configs a host and share service announces the capabilities to scheduler based on configuration. I think specs such as \"consistent_snapshot_support\" falls into this category, while \"affinity_policy\" is somewhat different.\n\nI tried a preliminary implementation, i.e., creating a share group either with share group type or with affinity policy. Something like this, https://github.com/sapcc/manila/blob/1215a287395ec8b0f80573154f56f76405aa3e3e/manila/api/v2/share_groups.py#L195-L198. Works but probably not very elegant.\n \nBut I can see your point, it is somehow a twist to the current concept of share group and share group type.","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f43ae3b8_32277bea","in_reply_to":"fb0d2a71_b29d8981","updated":"2024-12-06 03:05:09.000000000","message":"it might be harder to separate a share group from a share group type conceptually and in code … because today, a share group cannot exist without a group type.. \n\nhave you thought about making “consistent_snapshot_support” mutually exclusive with “affinity_policy” instead","commit_id":"b8366b60172a9869335697542217cb66b051109e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c9e63f35_ae1ea59b","updated":"2024-10-28 15:41:09.000000000","message":"thanks for review 😊","commit_id":"483508316fa7f3daf4dfeaa542bede0b56ac360a"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"b2bcbf094ce15a81b1c0454b954590c4f8a364ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"d4e31bbe_29cd3fc5","updated":"2024-11-22 07:29:17.000000000","message":"hi, Chuan Miao, thanks for your change. here are some comments inlines.","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b6f364d7_063ff5a5","updated":"2024-11-28 19:15:25.000000000","message":"Great job on the spec, Chuan! I have some questions inline, please take a look :)","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3905cdd1e08c4853c4b4a2cfc6604b36c6efa7df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e3bfb99d_2891c96a","updated":"2024-11-29 06:18:02.000000000","message":"add some comments.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"a512923c6891203d4aea5b7202b50a8843e44477","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"01d28ddf_58773d11","updated":"2024-12-02 01:54:01.000000000","message":"add some my point.","commit_id":"68b0463f56f67b3fcd3b35b97e01743a7a7ed149"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"933892d76f8f1973325f4e739c8a322c36c11c79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"4e59f8ed_885282b3","updated":"2024-12-02 14:46:11.000000000","message":"add my reply to the discussion of 400 code","commit_id":"9476e85f3e850b7658b7aaaf6f7afc7102d444ab"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"7ee5f40015a9e4a906fed510cbfb3eaa62fa12f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"c384b70d_8daa2d76","updated":"2024-12-04 09:53:42.000000000","message":"LGTM. thanks!","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"54bdb982a234f5ec6cb514c4c3bea0d5f90d02ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"0a2c83c2_5457b022","updated":"2024-12-03 13:59:11.000000000","message":"fix based on haixin\u0027s comment :)","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"877830b0_c16097b3","updated":"2024-12-06 03:05:09.000000000","message":"thank you for your patience with the review Chuan; I’ve some comments and questions inline","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"d722024b_8ee2b052","updated":"2025-04-24 23:34:28.000000000","message":"Hi @chuan137@gmail.com: some comments inline..","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6bb0da4077649113c2187e7214d5b4fda521aa66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"77008abf_e5a75e95","updated":"2024-12-12 21:41:59.000000000","message":"LGTM, thank you Chuan","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"50a132fb694ef5b11f0161006e8eb5df318a3829","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"24a13c1e_f162f020","updated":"2024-12-10 13:56:06.000000000","message":"patch 18: quick fixes","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"}],"doc/source/index.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"   specs/release_independent/*"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"2024.3 Epoxy approved specs"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":".. toctree::"}],"source_content_type":"text/x-rst","patch_set":18,"id":"a1899d6f_8c3e24c0","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":27},"updated":"2025-04-24 23:34:28.000000000","message":"We didn\u0027t approve any new specs in Epoxy.. So this needs to be:\n\n```\n2025.2 Flamingo approved specs\n```","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":true,"context_lines":[{"line_number":22,"context_line":"   :glob:"},{"line_number":23,"context_line":"   :maxdepth: 1"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"   specs/epoxy/*"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"2024.2 Dalmatian approved specs"}],"source_content_type":"text/x-rst","patch_set":18,"id":"32a264b9_f5704d0c","line":25,"range":{"start_line":25,"start_character":9,"end_line":25,"end_character":14},"updated":"2025-04-24 23:34:28.000000000","message":"flamingo","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"}],"specs/epoxy/share-group-with-affinity-policy.rst":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":11,"context_line":"Add support for share group with affinity policy. This feature allows users to"},{"line_number":12,"context_line":"create a share group with affinity policy. The affinity policy is used to"},{"line_number":13,"context_line":"specify the affinity relationship between the shares in the share group. The"},{"line_number":14,"context_line":"reltionship can be either \"affinity\" or \"anti-affinity\". Manila will schedule"},{"line_number":15,"context_line":"the shares in the share group based on the affinity policy."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":4,"id":"b4ab026c_6d96cda5","line":14,"updated":"2024-10-28 14:30:46.000000000","message":"nit: relationship","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Add support for share group with affinity policy. This feature allows users to"},{"line_number":12,"context_line":"create a share group with affinity policy. The affinity policy is used to"},{"line_number":13,"context_line":"specify the affinity relationship between the shares in the share group. The"},{"line_number":14,"context_line":"reltionship can be either \"affinity\" or \"anti-affinity\". Manila will schedule"},{"line_number":15,"context_line":"the shares in the share group based on the affinity policy."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":4,"id":"b4b4dde5_1a837ec9","line":14,"in_reply_to":"b4ab026c_6d96cda5","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":20,"context_line":"Currently, Manila can create shares with affinity rules using the scheduler"},{"line_number":21,"context_line":"hint. It requires the client to coordinate share creations and share id needs to"},{"line_number":22,"context_line":"be specified from the client side. This is not suitable for use case where share"},{"line_number":23,"context_line":"id is not known in advanced. For example, for the CSI plugin of Kubernetes, the"},{"line_number":24,"context_line":"shares are defined as PVC resources and there is no garantee which share is"},{"line_number":25,"context_line":"created first."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"2a79348f_d6e34768","line":23,"updated":"2024-10-28 14:30:46.000000000","message":"nit: in advance","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Currently, Manila can create shares with affinity rules using the scheduler"},{"line_number":21,"context_line":"hint. It requires the client to coordinate share creations and share id needs to"},{"line_number":22,"context_line":"be specified from the client side. This is not suitable for use case where share"},{"line_number":23,"context_line":"id is not known in advanced. For example, for the CSI plugin of Kubernetes, the"},{"line_number":24,"context_line":"shares are defined as PVC resources and there is no garantee which share is"},{"line_number":25,"context_line":"created first."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa96a93f_8c93e0ae","line":23,"in_reply_to":"2a79348f_d6e34768","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":21,"context_line":"hint. It requires the client to coordinate share creations and share id needs to"},{"line_number":22,"context_line":"be specified from the client side. This is not suitable for use case where share"},{"line_number":23,"context_line":"id is not known in advanced. For example, for the CSI plugin of Kubernetes, the"},{"line_number":24,"context_line":"shares are defined as PVC resources and there is no garantee which share is"},{"line_number":25,"context_line":"created first."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Instead we can define affinity policy and attach it to share group. The share"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bb07cf34_1a32d941","line":24,"updated":"2024-10-28 14:30:46.000000000","message":"nit: guarantee","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":21,"context_line":"hint. It requires the client to coordinate share creations and share id needs to"},{"line_number":22,"context_line":"be specified from the client side. This is not suitable for use case where share"},{"line_number":23,"context_line":"id is not known in advanced. For example, for the CSI plugin of Kubernetes, the"},{"line_number":24,"context_line":"shares are defined as PVC resources and there is no garantee which share is"},{"line_number":25,"context_line":"created first."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Instead we can define affinity policy and attach it to share group. The share"}],"source_content_type":"text/x-rst","patch_set":4,"id":"4625703a_c617d622","line":24,"in_reply_to":"bb07cf34_1a32d941","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Instead we can define affinity policy and attach it to share group. The share"},{"line_number":28,"context_line":"group was introduced to manage multiple shares together, such as snapshoting,"},{"line_number":29,"context_line":"migration, etc. Treated as a consistency group, the shares in the share group"},{"line_number":30,"context_line":"are hosted on the same backend. However, the shares with affinity policy can be"},{"line_number":31,"context_line":"hosted on different backends. We have to extend the share group and view it as"},{"line_number":32,"context_line":"an abstract entity managing the shares with various policies."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"866f7884_0e076629","line":30,"updated":"2024-10-28 14:30:46.000000000","message":"something like \u0027with affinity policy for anti-affinity\u0027 here would make the point clearer I think","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Instead we can define affinity policy and attach it to share group. The share"},{"line_number":28,"context_line":"group was introduced to manage multiple shares together, such as snapshoting,"},{"line_number":29,"context_line":"migration, etc. Treated as a consistency group, the shares in the share group"},{"line_number":30,"context_line":"are hosted on the same backend. However, the shares with affinity policy can be"},{"line_number":31,"context_line":"hosted on different backends. We have to extend the share group and view it as"},{"line_number":32,"context_line":"an abstract entity managing the shares with various policies."},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"a9c8c2c3_6da2fb0a","line":30,"in_reply_to":"866f7884_0e076629","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Alternatives"},{"line_number":65,"context_line":"------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Data model impact"},{"line_number":68,"context_line":"-----------------"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"82cd71a9_2859d2c5","line":66,"updated":"2024-10-28 14:30:46.000000000","message":"Either add `None` or iterate about the other idea of implementing affinity policy as a standalone concept without making use of share groups","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Alternatives"},{"line_number":65,"context_line":"------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Data model impact"},{"line_number":68,"context_line":"-----------------"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"779b1851_f9430f2c","line":66,"in_reply_to":"82cd71a9_2859d2c5","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":78,"context_line":"--------------"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"* New parameter to create share group with affinity policy. Specify either"},{"line_number":81,"context_line":"  --affinity-policy or --share-group, but not both."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. code-block:: bash"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f478a8f_05a492c1","line":81,"updated":"2024-10-28 14:30:46.000000000","message":"Did you mean: `--share-group-type` ?","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":78,"context_line":"--------------"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"* New parameter to create share group with affinity policy. Specify either"},{"line_number":81,"context_line":"  --affinity-policy or --share-group, but not both."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. code-block:: bash"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"14fcb94d_8b7d514b","line":81,"in_reply_to":"9f478a8f_05a492c1","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"a2642098a3d8bd64be07a81688937d14cf993000","unresolved":true,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. code-block:: bash"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    openstack share group create --affinity-policy \u003cpolicy\u003e \u003cshare-group-name\u003e"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"a4580dd5_83d4aee0","line":85,"updated":"2024-10-28 14:30:46.000000000","message":"`--name \u003cshare-group-name\u003e`, name is an optional and named parameter","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"af4e6bc55b2fa2491415051bbb30879a588c2d26","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":".. code-block:: bash"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    openstack share group create --affinity-policy \u003cpolicy\u003e \u003cshare-group-name\u003e"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"04a22cae_1458e7f5","line":85,"in_reply_to":"a4580dd5_83d4aee0","updated":"2024-10-28 15:41:09.000000000","message":"Done","commit_id":"f7ffb830a90ef872fdb7fa9da472b62546f9ffde"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7556c983e715401b2a586e040c5134d5994b4c51","unresolved":true,"context_lines":[{"line_number":47,"context_line":"  specified, the \"share-group-type\" parameter can not be specified. And vice"},{"line_number":48,"context_line":"  versa."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* Modify the share API to add share to the share group with affinity policy."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  The API will check the status of shares in the share group. If any share is in"},{"line_number":53,"context_line":"  creating status, the API will raise an Exception."}],"source_content_type":"text/x-rst","patch_set":10,"id":"e2a59e46_e28a85f2","line":50,"updated":"2024-11-05 12:17:21.000000000","message":"If share group is created without affinity-policy specified, are you going to put some default value e.g. (affinity) or it will be NULL. Please add that reference here.","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"d2da97a9600859bc7f392e613158cea5bd782d18","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  specified, the \"share-group-type\" parameter can not be specified. And vice"},{"line_number":48,"context_line":"  versa."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* Modify the share API to add share to the share group with affinity policy."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"  The API will check the status of shares in the share group. If any share is in"},{"line_number":53,"context_line":"  creating status, the API will raise an Exception."}],"source_content_type":"text/x-rst","patch_set":10,"id":"e5bcd22f_cdff4169","line":50,"in_reply_to":"e2a59e46_e28a85f2","updated":"2024-11-06 20:17:48.000000000","message":"Updated.","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7556c983e715401b2a586e040c5134d5994b4c51","unresolved":true,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Create share in the share group with affinity policy."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  POST /v2/share-groups/\u003cshare-group-id\u003e/shares"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"00a64366_c54202cb","line":124,"updated":"2024-11-05 12:17:21.000000000","message":"why do we need separate API to create share from share group ? \nThe differentiation factor i.e. either affinity_policy or share_group_type are not specified in REST API and are derived internally by Manila. So we don\u0027t need this","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"d2da97a9600859bc7f392e613158cea5bd782d18","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Create share in the share group with affinity policy."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  POST /v2/share-groups/\u003cshare-group-id\u003e/shares"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"c483e447_48784a37","line":124,"in_reply_to":"00a64366_c54202cb","updated":"2024-11-06 20:17:48.000000000","message":"Updated.","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7556c983e715401b2a586e040c5134d5994b4c51","unresolved":true,"context_lines":[{"line_number":176,"context_line":"Implementation"},{"line_number":177,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Assignee(s)"},{"line_number":180,"context_line":"-----------"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":10,"id":"36875f89_d0ce61fb","line":179,"updated":"2024-11-05 12:17:21.000000000","message":"please add you name here in case you will do the implementation as well.","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"d2da97a9600859bc7f392e613158cea5bd782d18","unresolved":false,"context_lines":[{"line_number":176,"context_line":"Implementation"},{"line_number":177,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Assignee(s)"},{"line_number":180,"context_line":"-----------"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":10,"id":"db8cb2aa_12331ca6","line":179,"in_reply_to":"36875f89_d0ce61fb","updated":"2024-11-06 20:17:48.000000000","message":"Done","commit_id":"e303b80e3817d9595d0c6d2f3dd17f6b0593e07e"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"b2bcbf094ce15a81b1c0454b954590c4f8a364ee","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"a5d0e132_587ba742","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"updated":"2024-11-22 07:29:17.000000000","message":"Why are there such restrictions? If an existing volume wants to be added to a group, you can check whether it can be added. Why not just allow it?\nFor example, shareA wants to join an anti-affinity group, as long as shareA has a different backend from other shares in the group. In theory shareA could join.","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"54bdb982a234f5ec6cb514c4c3bea0d5f90d02ca","unresolved":false,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5ddbfb4e_7aece077","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"5a7877e5_3c249601","updated":"2024-12-03 13:59:11.000000000","message":"Acknowledged","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"8376e9da_b56b68f3","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"6a2ada4f_bbdca698","updated":"2024-11-28 19:15:25.000000000","message":"I get both points and I believe that yes, it would be an inconsistency if we let a share that is not within the same backend into the share group. I think it should be okay if we do what haixin suggested though: check if the share\u0027s host match, and if it does, that\u0027s fine. If not, then we deny the request. Could even be an API check, but we\u0027d be limited to only comparing the host itself :)","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"e0c6ee00_87a60cd1","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"8376e9da_b56b68f3","updated":"2024-11-29 14:59:40.000000000","message":"I just realised that share-group-id is not valid field when updating Share. I think we can remove the whole point to stay align with current features. So no adding/removing share to share group. wdyt?","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"19936ff059cedd6f934768a1d601d04047c5ef35","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"6a2ada4f_bbdca698","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"a5d0e132_587ba742","updated":"2024-11-22 10:38:41.000000000","message":"yes, in theory shareA cloud join, but in reality it might be failed often. My intension was to have a more predictable workflow, but I am ok go either way.\n\n@gouthampravi@gmail.com @ces.eduardo98@gmail.com @ashrod98@redhat.com wdyt?","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"00df1538_7d66f5fe","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"c378e115_9f086863","updated":"2025-04-24 23:34:28.000000000","message":"Done","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"a5a9b833aa41c2a3006444808f82570e338dfecb","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"5a7877e5_3c249601","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"e0c6ee00_87a60cd1","updated":"2024-12-03 01:39:59.000000000","message":"I don\u0027t have problem. Keep it that way for now","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6bb0da4077649113c2187e7214d5b4fda521aa66","unresolved":true,"context_lines":[{"line_number":59,"context_line":"* Adding/removing share to share group with affinity policy."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  Share can be added to a share group with affinity policy only when it is being"},{"line_number":62,"context_line":"  created. Existing share can not be added to the share group with affinity"},{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"c378e115_9f086863","line":63,"range":{"start_line":62,"start_character":11,"end_line":63,"end_character":58},"in_reply_to":"e0c6ee00_87a60cd1","updated":"2024-12-12 21:41:59.000000000","message":"Sounds okay to me not adding/removing shares from the group.","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"b2bcbf094ce15a81b1c0454b954590c4f8a364ee","unresolved":true,"context_lines":[{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  The scheduler filter will check the affinity policy of the share group and"},{"line_number":69,"context_line":"  make sure the shares are scheduled based on the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"f9a56d77_11bb7838","line":66,"range":{"start_line":66,"start_character":32,"end_line":66,"end_character":58},"updated":"2024-11-22 07:29:17.000000000","message":"The way the new scheduler is implemented is key and needs to be explained in detail. Here are some of my personal understandings. What do you think?\n\n1: create share \u0027share_1\u0027 with affinity policy group \u0027group_1\u0027. all shares in this group must has same backend \u0027backend_1\u0027, The scheduler must schedule the backend \u0027backend_1\u0027.\n\n2: crate share \u0027share_2\u0027 with anti-affinity policy group \u0027group_2\u0027. all shares in this group must has different backend. The scheduler must schedule a backend that is different from all current backends","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"19936ff059cedd6f934768a1d601d04047c5ef35","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  policy unless there is no other share in the share group. Share can be removed"},{"line_number":64,"context_line":"  from the share group with affinity policy."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Add a new scheduler filter to handle the affinity policy."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"  The scheduler filter will check the affinity policy of the share group and"},{"line_number":69,"context_line":"  make sure the shares are scheduled based on the affinity policy."}],"source_content_type":"text/x-rst","patch_set":12,"id":"38596bed_e998ea86","line":66,"range":{"start_line":66,"start_character":32,"end_line":66,"end_character":58},"in_reply_to":"f9a56d77_11bb7838","updated":"2024-11-22 10:38:41.000000000","message":"updated","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"b2bcbf094ce15a81b1c0454b954590c4f8a364ee","unresolved":true,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":".. code-block:: bash"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    openstack share group create --affinity-policy \u003cpolicy\u003e --name \u003cshare-group-name\u003e"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"a4d5481a_17ccfe63","line":94,"range":{"start_line":94,"start_character":4,"end_line":94,"end_character":85},"updated":"2024-11-22 07:29:17.000000000","message":"affinity-policy and name, These two parameters are not required when create share group. so\n\n    openstack share group create [--affinity-policy \u003cpolicy\u003e] [--name \u003cshare-group-name\u003e]","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"19936ff059cedd6f934768a1d601d04047c5ef35","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":".. code-block:: bash"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    openstack share group create --affinity-policy \u003cpolicy\u003e --name \u003cshare-group-name\u003e"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"b1a52811_93a4eceb","line":94,"range":{"start_line":94,"start_character":4,"end_line":94,"end_character":85},"in_reply_to":"a4d5481a_17ccfe63","updated":"2024-11-22 10:38:41.000000000","message":"Done","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"b2bcbf094ce15a81b1c0454b954590c4f8a364ee","unresolved":true,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Create share and specify share group with affinity policy."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  POST /v2/shares"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"4c7fad9a_14f37530","line":124,"range":{"start_line":124,"start_character":2,"end_line":124,"end_character":60},"updated":"2024-11-22 07:29:17.000000000","message":"After shareA is created, does shareA join groupA? Or did you just use groupA\u0027s affinity strategy and not join groupA?","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"19936ff059cedd6f934768a1d601d04047c5ef35","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Create share and specify share group with affinity policy."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  POST /v2/shares"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"c6d67f49_c8ee6c94","line":124,"range":{"start_line":124,"start_character":2,"end_line":124,"end_character":60},"in_reply_to":"4c7fad9a_14f37530","updated":"2024-11-22 10:38:41.000000000","message":"shareA is joining groupA. updated.","commit_id":"cf70c24b6add138326b6ef3728474d4b452f7126"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Manila can create shares with affinity rules using scheduler hints."},{"line_number":21,"context_line":"However, this requires the client to coordinate share creation and specify the"},{"line_number":22,"context_line":"share ID. This approach isn\u0027t ideal for use cases where the share ID isn\u0027t known"},{"line_number":23,"context_line":"beforehand. For instance, in a Kubernetes CSI plugin, shares are defined as PVC"},{"line_number":24,"context_line":"resources, and there\u0027s no guarantee which share will be created first."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"e5ea07ee_58d8c7d7","line":22,"range":{"start_line":22,"start_character":75,"end_line":22,"end_character":80},"updated":"2024-11-28 19:15:25.000000000","message":"nit: please wrap this at 79 characters","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Currently, Manila can create shares with affinity rules using scheduler hints."},{"line_number":21,"context_line":"However, this requires the client to coordinate share creation and specify the"},{"line_number":22,"context_line":"share ID. This approach isn\u0027t ideal for use cases where the share ID isn\u0027t known"},{"line_number":23,"context_line":"beforehand. For instance, in a Kubernetes CSI plugin, shares are defined as PVC"},{"line_number":24,"context_line":"resources, and there\u0027s no guarantee which share will be created first."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"cae8e664_43cd24be","line":22,"range":{"start_line":22,"start_character":75,"end_line":22,"end_character":80},"in_reply_to":"e5ea07ee_58d8c7d7","updated":"2024-11-29 14:59:40.000000000","message":"Done","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":34,"context_line":"Use cases"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Create a share group with affinity policy, and create shares in the share group."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":13,"id":"c18c44f0_8313b82c","line":37,"range":{"start_line":37,"start_character":74,"end_line":37,"end_character":80},"updated":"2024-11-28 19:15:25.000000000","message":"nit: please wrap this at 79 characters.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Use cases"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Create a share group with affinity policy, and create shares in the share group."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":13,"id":"52698f51_f68a9c53","line":37,"range":{"start_line":37,"start_character":74,"end_line":37,"end_character":80},"in_reply_to":"c18c44f0_8313b82c","updated":"2024-11-29 14:59:40.000000000","message":"Done","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"cc7ffb4d_0e73639a","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"updated":"2024-11-28 19:15:25.000000000","message":"I am a bit curious on how would this work... If we have this as an enum this would mean that this only takes `affinity` or `anti-affinity` as a value, but we\u0027d never save what is the share group it has affinity or anti-affinity with... Maybe we should look into a different data type for this.\n\nFor shares, we haven\u0027t added an affinity column to the shares or share instances database. Instead, we have used the shares metadata and saved the affinity/anti-affinity hint as metadata. That might be another approach we can use for this.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"e83b87ac_85821389","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"in_reply_to":"3c52f3b0_83fddf9d","updated":"2024-11-29 14:59:40.000000000","message":"\u003e \"we\u0027d never save what is the share group it has affinity or anti-affinity with... \"\n\n@haix09@chinatelecom.cn is correct. Share table has foreign key share_group_id, and we can easily query the shares in the affinity group. If we keep it in the share metadata, we would need to maintain same info for multiple shares. I think the share group approach is easier.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"053f885d694efb15460a199c9506be14a6dfb515","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"ae314626_3099969f","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"in_reply_to":"44fc2419_3ae03691","updated":"2024-12-02 10:53:53.000000000","message":"Hi Carlos, thanks for clarifying. Could you elaborate your concern on tracking the affinity relationships?\n\nLet me also explain the purpose of additional column. I\u0027d like to extend the capability of the share group, which will  be one of the following. Either a group of share with affinity policy, or a share group with share group type. But not both. Adding the column in DB table will be easier to apply such constraint, I think.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6bb0da4077649113c2187e7214d5b4fda521aa66","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"679d9840_0eca72fe","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"in_reply_to":"ae314626_3099969f","updated":"2024-12-12 21:41:59.000000000","message":"Thank you for explaining. I believe I have cleared out my questions after our discussion in the #openstack-manila channel.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3905cdd1e08c4853c4b4a2cfc6604b36c6efa7df","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3c52f3b0_83fddf9d","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"in_reply_to":"cc7ffb4d_0e73639a","updated":"2024-11-29 06:18:02.000000000","message":"My guess is that since the shares table has the share_group_id attribute, if we set affinity/anti-affinity for group, it is equivalent to having the affinity/anti-affinity attribute for share. Without metadata recording","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"eb2c94017c399c359df624ff29860d6e9d7e9b4a","unresolved":true,"context_lines":[{"line_number":79,"context_line":"Data model impact"},{"line_number":80,"context_line":"-----------------"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"* New field will be added to the share_group table"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":85,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":86,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":87,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"CLI API impact"},{"line_number":90,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":13,"id":"44fc2419_3ae03691","line":87,"range":{"start_line":82,"start_character":0,"end_line":87,"end_character":88},"in_reply_to":"e83b87ac_85821389","updated":"2024-11-29 16:33:24.000000000","message":"Ah, sorry, let me clarify: I meant adding metadata to share groups could be a good way out as well, as we have this approach on shares already. My concern is more on tracking the affinity relationships.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"REST API impact"},{"line_number":102,"context_line":"---------------"},{"line_number":103,"context_line":"* New share group API to create share group with affinity policy."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  POST /v2/share-groups"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3dc24d37_3ef18bb7","line":103,"range":{"start_line":103,"start_character":2,"end_line":103,"end_character":5},"updated":"2024-11-28 19:15:25.000000000","message":"```suggestion\n* Update the share group API to allow creating share groups with \n  an affinity policy.\n```","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"REST API impact"},{"line_number":102,"context_line":"---------------"},{"line_number":103,"context_line":"* New share group API to create share group with affinity policy."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  POST /v2/share-groups"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"f65550f3_e3e455ed","line":103,"range":{"start_line":103,"start_character":2,"end_line":103,"end_character":5},"in_reply_to":"3dc24d37_3ef18bb7","updated":"2024-11-29 14:59:40.000000000","message":"Done","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"4a5685f89806d19547b93e0e898f559ce62bcaba","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"4bd5b612_5466a7c7","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"updated":"2024-11-28 19:15:25.000000000","message":"is this the share group we\u0027ve requested the affinity with? if so, I am not sure we should deny the whole request because we have only one share in creating status. If we have at least one share available, that means we already know the host right? So that would allow us to be sure the affinity policies would work.\n\nI might not have the whole context on this though and might be missing something fundamental :)","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6bb0da4077649113c2187e7214d5b4fda521aa66","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"70770052_afd352a5","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"407ba137_dac7d615","updated":"2024-12-12 21:41:59.000000000","message":"Ack, sounds good!","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"54bdb982a234f5ec6cb514c4c3bea0d5f90d02ca","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"828cdc30_090d6c08","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"407ba137_dac7d615","updated":"2024-12-03 13:59:11.000000000","message":"Done","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"053f885d694efb15460a199c9506be14a6dfb515","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"6653e8ae_fa8586cf","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"44fb0177_20246e84","updated":"2024-12-02 10:53:53.000000000","message":"yes, haixin\u0027s idea should also work","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3905cdd1e08c4853c4b4a2cfc6604b36c6efa7df","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"f863fe16_a5107c9b","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"4bd5b612_5466a7c7","updated":"2024-11-29 06:18:02.000000000","message":"Why is a share in the creating state allowed within a share group? We can restrict only available shares to join the share group.\n\n1: when create share. A share is added to a group only after it is successfully created and becomes available status.\n\n2: when add share to group, share\u0027s status must be available.\n\nBy adding the above restrictions, we can avoid the problem of some share still has creating status in group.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"933892d76f8f1973325f4e739c8a322c36c11c79","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"407ba137_dac7d615","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"6653e8ae_fa8586cf","updated":"2024-12-02 14:46:11.000000000","message":"updated the paragraph and be more specific on when and why Manila may return 400. I added this mainly for automation such as k8s CSI plugin. We don\u0027t want to create many shares in \"error\" state, instead Manila returns 400, and client can retry creation in next consolidation loop.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9c151f10_76dca4b7","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"70770052_afd352a5","updated":"2025-04-24 23:34:28.000000000","message":"Done","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"6469d7bd22e86af319852d5b80e00a013889f408","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"fe4a1171_6bbeac5a","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"84dc7194_07c52692","updated":"2024-11-30 15:49:27.000000000","message":"I think, share3 should be on different host than both share1 and share2 in case it\u0027s anti-affinity. Therefore share3 need to wait for share1 and share2 become available.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"eb2c94017c399c359df624ff29860d6e9d7e9b4a","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"84dc7194_07c52692","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"b6cead83_f34587db","updated":"2024-11-29 16:33:24.000000000","message":"\u003e We could be more specific here, only check the share status for \"anti-affinity\" type of policy. wdyt?\n\nYeah, this could be a good way out. I get that this creation might be sequential but I was considering a scenario where it isn\u0027t, so my point was basically:\n\n- We have a the share group A, with an anti-affinity policy\n- We create share1 within share group A, and it becomes available\n- We create share2 within share group A and it is creating\n- We attempt the creation of share3\n\nIf I understand the proposal correctly, in this scenario, the creation of share3 would fail because the validation would focus on the share that is currently in creating state, even though we already have one share that is available, and we\u0027d know what host we can place the request, that\u0027s why I suggested that we can check if there is at least one share already available and it should be enough.\n\n\u003e Same as above, I noticed that current API does not support adding share to group, we could assign share group id only when creating a share.\n\nMakes sense","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"653718566b2f5d866a3ca679d03aa4002e5277ab","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"b6cead83_f34587db","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"f863fe16_a5107c9b","updated":"2024-11-29 14:59:40.000000000","message":"@ces.eduardo98@gmail.com Yes, it it the affinity share group in the request. The affinity policy can be \"affinity\" or \"anti-affinity\". In the \"anti-affinity\" case, we should wait for the previous share creation finished. The idea is adding share one by one, otherwise we would need to resolve dependencies inside Manila. We could be more specific here, only check the share status for \"anti-affinity\" type of policy. wdyt?\n\n@haix09@chinatelecom.cn Same as above, I noticed that current API does not support adding share to group, we could assign share group id only when creating a share.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"a512923c6891203d4aea5b7202b50a8843e44477","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"* Create share and specify share group with affinity policy. The API will check"},{"line_number":128,"context_line":"  the status of shares in the share group. If any share is in creating status,"},{"line_number":129,"context_line":"  the API will return 400 Bad Request. Otherwise, the share will be created in"},{"line_number":130,"context_line":"  the share group."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"44fb0177_20246e84","line":128,"range":{"start_line":128,"start_character":30,"end_line":128,"end_character":41},"in_reply_to":"fe4a1171_6bbeac5a","updated":"2024-12-02 01:54:01.000000000","message":"if share2 is an empty share, it could become available status soon. But share2 is created from snapshot, It could take a long time. In this scenario, share2 has already assigned a host, even though share2 is still in the creating state.\n\nTherefore, I think it is not necessary to wait for all shares in anti-affinity group to become available, just check that all shares have been allocated hosts.\n\n\nBecause scheduling and assigning hosts is a fast process, if we encounter a share that is in the creating state and does not have a host when verifying an anti-affinity group, we can set a wait time to check once every two seconds for a total of five checks. If no host is assigned to this share, the anti-affinity group is considered to have failed to be verified.","commit_id":"794e4ba59cfe5e49266a2eeeec8d06b658ab7aa5"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"a5a9b833aa41c2a3006444808f82570e338dfecb","unresolved":true,"context_lines":[{"line_number":52,"context_line":"* Modify the share API to add share to the share group with affinity policy."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  The API will check the status of shares in the share group. If any share is"},{"line_number":55,"context_line":"  in creating status, the API will raise an Exception."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Add a new scheduler filter to handle the affinity policy."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"6207d0b6_28cc147a","line":55,"range":{"start_line":55,"start_character":5,"end_line":55,"end_character":20},"updated":"2024-12-03 01:39:59.000000000","message":"Based on the results of our discussion, we should be more concerned about whether the share has already assigned a host, rather than focusing on the status。","commit_id":"9476e85f3e850b7658b7aaaf6f7afc7102d444ab"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"54bdb982a234f5ec6cb514c4c3bea0d5f90d02ca","unresolved":false,"context_lines":[{"line_number":52,"context_line":"* Modify the share API to add share to the share group with affinity policy."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  The API will check the status of shares in the share group. If any share is"},{"line_number":55,"context_line":"  in creating status, the API will raise an Exception."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Add a new scheduler filter to handle the affinity policy."},{"line_number":58,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"6afd05fc_4dc0d076","line":55,"range":{"start_line":55,"start_character":5,"end_line":55,"end_character":20},"in_reply_to":"6207d0b6_28cc147a","updated":"2024-12-03 13:59:11.000000000","message":"Done","commit_id":"9476e85f3e850b7658b7aaaf6f7afc7102d444ab"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"a5a9b833aa41c2a3006444808f82570e338dfecb","unresolved":true,"context_lines":[{"line_number":123,"context_line":"  temporarily. For example, the share group has \"anti-affinity\" policy, another"},{"line_number":124,"context_line":"  share in the group is being created and it has not yet been assigned a"},{"line_number":125,"context_line":"  backend host to. In such cases, the client understands the reason of the"},{"line_number":126,"context_line":"  failure and can take appropriate action. If Manila accepted the request but"},{"line_number":127,"context_line":"  scheduling failed, the share\u0027s status will be set to \"error\"."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":16,"id":"8a291798_ebe96abf","line":126,"range":{"start_line":126,"start_character":18,"end_line":126,"end_character":41},"updated":"2024-12-03 01:39:59.000000000","message":"what is the appropriate action? I think we need to be clear here","commit_id":"9476e85f3e850b7658b7aaaf6f7afc7102d444ab"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"54bdb982a234f5ec6cb514c4c3bea0d5f90d02ca","unresolved":false,"context_lines":[{"line_number":123,"context_line":"  temporarily. For example, the share group has \"anti-affinity\" policy, another"},{"line_number":124,"context_line":"  share in the group is being created and it has not yet been assigned a"},{"line_number":125,"context_line":"  backend host to. In such cases, the client understands the reason of the"},{"line_number":126,"context_line":"  failure and can take appropriate action. If Manila accepted the request but"},{"line_number":127,"context_line":"  scheduling failed, the share\u0027s status will be set to \"error\"."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":16,"id":"2068d6db_5d94a1fb","line":126,"range":{"start_line":126,"start_character":18,"end_line":126,"end_character":41},"in_reply_to":"8a291798_ebe96abf","updated":"2024-12-03 13:59:11.000000000","message":"Done","commit_id":"9476e85f3e850b7658b7aaaf6f7afc7102d444ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"c697cd69_61dc6d60","updated":"2024-12-06 03:05:09.000000000","message":"you’ll need to add an epoxy entry to the index page: https://github.com/openstack/manila-specs/blob/master/doc/source/index.rst#20242-dalmatian-approved-specs","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"50a132fb694ef5b11f0161006e8eb5df318a3829","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fc2bb5f7_5a6050ea","in_reply_to":"c697cd69_61dc6d60","updated":"2024-12-10 13:56:06.000000000","message":"Done","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":true,"context_lines":[{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Share group with affinity policy"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Add affinity policy support for share groups. This feature allows users to"},{"line_number":12,"context_line":"create share groups with affinity policies, which determine the affinity"},{"line_number":13,"context_line":"relationship between shares within the group. These relationships can be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"a275026b_1bfd4699","line":10,"updated":"2024-12-06 03:05:09.000000000","message":"please register and link a blueprint please : https://blueprints.launchpad.net/manila\n\nalso add it as a separate line within the commit message: \n\nPartially implements: bp \u003cblueprint-name\u003e","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"50a132fb694ef5b11f0161006e8eb5df318a3829","unresolved":false,"context_lines":[{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Share group with affinity policy"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Add affinity policy support for share groups. This feature allows users to"},{"line_number":12,"context_line":"create share groups with affinity policies, which determine the affinity"},{"line_number":13,"context_line":"relationship between shares within the group. These relationships can be"}],"source_content_type":"text/x-rst","patch_set":17,"id":"4c25f467_fb3957c5","line":10,"in_reply_to":"a275026b_1bfd4699","updated":"2024-12-10 13:56:06.000000000","message":"Done","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":true,"context_lines":[{"line_number":79,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":80,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":81,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":82,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"CLI API impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"d5025026_d7c65855","line":82,"updated":"2024-12-06 03:05:09.000000000","message":"I’m commenting on a thread Maurice created asking why this can’t be a group type spec (suggesting that we can prevent mutually exclusive specs from being added to a group type) \n\nif we took that route, we could still use this field; just like we capture the value of the specifications like “snapshot_support”, “create_share_from_snapshot_support” etc into the share model..\n\nalso thinking out loud, Nova calls this sorta thing just “policy” though… I wonder if they thought they would have things other than affinity in server group policies… https://docs.openstack.org/nova/latest/user/server-groups.html","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"1c1e8460ee8a8ed0414dc821c7de94b7f45de40a","unresolved":true,"context_lines":[{"line_number":79,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":80,"context_line":"  | Field           | Type                              | Null | Key | Default | Extra |"},{"line_number":81,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":82,"context_line":"  | affinity_policy | enum(\u0027affinity\u0027, \u0027anti-affinity\u0027) | YES  |     | NULL    |       |"},{"line_number":83,"context_line":"  +-----------------+-----------------------------------+------+-----+---------+-------+"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"CLI API impact"}],"source_content_type":"text/x-rst","patch_set":17,"id":"4175f7e4_18b0fcbc","line":82,"in_reply_to":"d5025026_d7c65855","updated":"2024-12-13 03:52:20.000000000","message":"+1, I also have the same question, why not add affinity_policy to group type spce?","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3a278f784fd87843c183ae3c2215d245ce6c0c70","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"cb58fca3_ca4b833a","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"updated":"2024-12-04 01:18:55.000000000","message":"retry recheck the anti-affinity group serveral times. If no host is allocated until timeout(such as 10s), 400 is returned.","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"11230daefd2083b506a3b95892b164e5b400cef8","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"76acc411_78356c37","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"12a87cc6_00d58ea8","updated":"2024-12-06 03:05:09.000000000","message":"how would we implement this sort of error handling? will the api pull up all shares matching the share_group_id and check if there’s only one  share, and it is in “creating” status? it seems racy to do so..\n\nmaybe we should rather have a way to rollback after creation and reschedule if a share violated the policy?","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"6a99014b19abd4dd08d256fe121c8bb824a5d5fa","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"a272cb4e_eec21efe","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"76acc411_78356c37","updated":"2024-12-09 17:57:16.000000000","message":"It\u0027s a good point. I would implement the check in share.api.API.create().  There can be racing between parallel API requests. We could apply a file based locking in this method, i.e. apply the lock at the beginning of the method and release it at the end. It should work as well?","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"29c9a793_d654fd81","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"8f5dd3b9_52d6be4e","updated":"2025-04-24 23:34:28.000000000","message":"yeah, locks are problematic if the critical section is large enough - if a service (api, scheduler, share manager) goes down while performing its role, it can lead to a deadlock. \n\nThinking aloud, when share creation requests come in bursts, is it possible to stagger them _somewhere_ without large locks?\n\n1) If you wanted to stagger them in the API, a DB reader-writer lock can ensure that you know if a prior request to place a share is ongoing. If it is ongoing, you must reject the request with HTTP 400\n2) Alternatively, we could have logic in the scheduler to keep a share\u0027s placement pending until a host has been identified so we can perform affinity/anti-affinity decisions. \n3) Despite the above two, it\u0027s possible we run into a race - we can rollback a share\u0027s creation and set the status to \"error\" (from \"creating\") if we realize affinity/anti-affinity is violated.","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"1c1e8460ee8a8ed0414dc821c7de94b7f45de40a","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"8f5dd3b9_52d6be4e","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"a272cb4e_eec21efe","updated":"2024-12-13 03:52:20.000000000","message":"Local file locks are valid only for one manila service node. There is still concurrency when there are multiple nodes.\n\nIn my recommendation, when creating a share, update the group id only after the share is successfully created and the share status becomes available. This ensures that all share states within the group are available.","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"41aefebaf4c20c1d39be9a91c0e6c04da21ee84f","unresolved":true,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"ee18101c_1554dc58","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"cb58fca3_ca4b833a","updated":"2024-12-04 09:35:49.000000000","message":"Manila can return 400 immediately without timeout, or? It\u0027s the client initiating the request and retrials","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"7ee5f40015a9e4a906fed510cbfb3eaa62fa12f3","unresolved":false,"context_lines":[{"line_number":125,"context_line":"  share placement cannot be immediately processed, such as when creating a"},{"line_number":126,"context_line":"  share in an anti-affinity group where another share is still being assigned"},{"line_number":127,"context_line":"  to a backend host. In these cases, the client should understand the failure"},{"line_number":128,"context_line":"  is temporary and may retry creation if needed. If Manila accepted the request"},{"line_number":129,"context_line":"  but the scheduling process failed, the share\u0027s status will be set to \"error\"."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  POST /v2/shares"}],"source_content_type":"text/x-rst","patch_set":17,"id":"12a87cc6_00d58ea8","line":128,"range":{"start_line":128,"start_character":19,"end_line":128,"end_character":47},"in_reply_to":"ee18101c_1554dc58","updated":"2024-12-04 09:53:42.000000000","message":"it is ok for me. manila return 400 immediately. \nInstead of leaving a share with an error status, 400 is returned.\n\nSo I thought about it again, and it\u0027s okay","commit_id":"6c17ba85d136176282fe79d483800eaa204435dd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b4087c4a8776bc55b128cfcd382b2119b356769b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2375dfba_f7bc9906","updated":"2025-04-24 23:34:28.000000000","message":"Please create a \"flamingo\" folder and rename this file:\n\nspecs/flamingo/share-group-with-affinity-policy.rst","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"1c1e8460ee8a8ed0414dc821c7de94b7f45de40a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Share group with affinity policy"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Add affinity policy support for share groups. This feature allows users to"},{"line_number":12,"context_line":"create share groups with affinity policies, which determine the affinity"},{"line_number":13,"context_line":"relationship between shares within the group. These relationships can be"}],"source_content_type":"text/x-rst","patch_set":18,"id":"2fc03dfd_9a1d87a7","line":10,"updated":"2024-12-13 03:52:20.000000000","message":"as goutham said, we need add bp link here:\n\nLaunchpad blueprint:\n\nhttps://blueprints.launchpad.net/manila/+spec/share-group-affinity-policy","commit_id":"2653079fb84fa6d9d3a54f576f45bab052d101e4"}]}
