)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"605ffb3d7e92218022d6234263154cc8ec77617f","unresolved":true,"context_lines":[{"line_number":26,"context_line":"        }"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":"}`"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: Ic42d8a0c1d22e77ae64e0ca014607b28fd336467"},{"line_number":31,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"fb20f5f2_37b85134","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":0},"updated":"2021-09-03 00:02:52.000000000","message":"Implements: bp/affinity-antiaffinity-filter","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"edb77946cb4be5e9d467f4e573a2c56b71cc1772","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        }"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":"}`"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: Ic42d8a0c1d22e77ae64e0ca014607b28fd336467"},{"line_number":31,"context_line":"Co-authored-by: Maurice Escher \u003cmaurice.escher@sap.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"f52247f9_66e50216","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":0},"in_reply_to":"fb20f5f2_37b85134","updated":"2021-09-03 07:26:10.000000000","message":"Done","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"ed7d1c502abad31ee3b70546c326b589af627b93","unresolved":true,"context_lines":[{"line_number":2205,"context_line":"    One or more scheduler_hints key and value pairs as a dictionary"},{"line_number":2206,"context_line":"    of strings. e.g. keys are same_host, different_host."},{"line_number":2207,"context_line":"  in: body"},{"line_number":2208,"context_line":"  required: true"},{"line_number":2209,"context_line":"  type: object"},{"line_number":2210,"context_line":"  min_version: 2.65"},{"line_number":2211,"context_line":"security_service_dns_ip:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5a37772f_63fee3c1","line":2208,"range":{"start_line":2208,"start_character":12,"end_line":2208,"end_character":16},"updated":"2021-08-31 02:31:29.000000000","message":"false\ni don\u0027t think user have to add scheduler_hints when crate share.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a0315396bd3e68b9a3c94178bc96dc7203752d4e","unresolved":false,"context_lines":[{"line_number":2205,"context_line":"    One or more scheduler_hints key and value pairs as a dictionary"},{"line_number":2206,"context_line":"    of strings. e.g. keys are same_host, different_host."},{"line_number":2207,"context_line":"  in: body"},{"line_number":2208,"context_line":"  required: true"},{"line_number":2209,"context_line":"  type: object"},{"line_number":2210,"context_line":"  min_version: 2.65"},{"line_number":2211,"context_line":"security_service_dns_ip:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7313109b_b6fb2897","line":2208,"range":{"start_line":2208,"start_character":12,"end_line":2208,"end_character":16},"in_reply_to":"5a37772f_63fee3c1","updated":"2021-08-31 17:08:22.000000000","message":"Done","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2203,"context_line":"scheduler_hints:"},{"line_number":2204,"context_line":"  description: |"},{"line_number":2205,"context_line":"    One or more scheduler_hints key and value pairs as a dictionary"},{"line_number":2206,"context_line":"    of strings. e.g. keys are same_host, different_host."},{"line_number":2207,"context_line":"  in: body"},{"line_number":2208,"context_line":"  required: false"},{"line_number":2209,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5c3d16ca_90b49ea4","line":2206,"range":{"start_line":2206,"start_character":55,"end_line":2206,"end_character":56},"updated":"2021-09-02 06:15:02.000000000","message":"and values must be a comma separated list of Share IDs.","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":2203,"context_line":"scheduler_hints:"},{"line_number":2204,"context_line":"  description: |"},{"line_number":2205,"context_line":"    One or more scheduler_hints key and value pairs as a dictionary"},{"line_number":2206,"context_line":"    of strings. e.g. keys are same_host, different_host."},{"line_number":2207,"context_line":"  in: body"},{"line_number":2208,"context_line":"  required: false"},{"line_number":2209,"context_line":"  type: object"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ce6c10ce_fee51db4","line":2206,"range":{"start_line":2206,"start_character":55,"end_line":2206,"end_character":56},"in_reply_to":"5c3d16ca_90b49ea4","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"}],"api-ref/source/samples/share-create-request.json":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":14,"context_line":"            \"aim\": \"doc\""},{"line_number":15,"context_line":"        },"},{"line_number":16,"context_line":"        \"scheduler_hints\": {"},{"line_number":17,"context_line":"            \"same_host\": \"share_uuid_1,share_uuid_2\","},{"line_number":18,"context_line":"            \"different_host\": \"share_uuid_3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    }"}],"source_content_type":"application/json","patch_set":11,"id":"860444da_9ef68625","line":17,"range":{"start_line":17,"start_character":26,"end_line":17,"end_character":38},"updated":"2021-09-02 06:15:02.000000000","message":"use real UUIDs here, this is a real-ish example of a request","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":14,"context_line":"            \"aim\": \"doc\""},{"line_number":15,"context_line":"        },"},{"line_number":16,"context_line":"        \"scheduler_hints\": {"},{"line_number":17,"context_line":"            \"same_host\": \"share_uuid_1,share_uuid_2\","},{"line_number":18,"context_line":"            \"different_host\": \"share_uuid_3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    }"}],"source_content_type":"application/json","patch_set":11,"id":"bca35065_aceaf4e7","line":17,"range":{"start_line":17,"start_character":26,"end_line":17,"end_character":38},"in_reply_to":"860444da_9ef68625","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"}],"manila/api/openstack/api_version_request.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c3340f5c739162a4a2bba7c70ee96824d1a70017","unresolved":true,"context_lines":[{"line_number":171,"context_line":"             actions on the share network\u0027s endpoint:"},{"line_number":172,"context_line":"             \u0027update_security_service\u0027, \u0027update_security_service_check\u0027 and"},{"line_number":173,"context_line":"             \u0027add_security_service_check\u0027."},{"line_number":174,"context_line":"    * 2.65 - Added Share Affinity/Anti-Affinity Scheduler Filters."},{"line_number":175,"context_line":"\"\"\""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":13,"id":"a85a74dd_d73c74a1","line":174,"range":{"start_line":174,"start_character":13,"end_line":174,"end_character":65},"updated":"2021-09-02 22:28:25.000000000","message":"Added ability to set scheduler hints via the share create API","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"edb77946cb4be5e9d467f4e573a2c56b71cc1772","unresolved":false,"context_lines":[{"line_number":171,"context_line":"             actions on the share network\u0027s endpoint:"},{"line_number":172,"context_line":"             \u0027update_security_service\u0027, \u0027update_security_service_check\u0027 and"},{"line_number":173,"context_line":"             \u0027add_security_service_check\u0027."},{"line_number":174,"context_line":"    * 2.65 - Added Share Affinity/Anti-Affinity Scheduler Filters."},{"line_number":175,"context_line":"\"\"\""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":13,"id":"54332fd6_ec322828","line":174,"range":{"start_line":174,"start_character":13,"end_line":174,"end_character":65},"in_reply_to":"a85a74dd_d73c74a1","updated":"2021-09-03 07:26:10.000000000","message":"Done","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"}],"manila/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c3340f5c739162a4a2bba7c70ee96824d1a70017","unresolved":true,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"2.65"},{"line_number":362,"context_line":"----"},{"line_number":363,"context_line":"  Added Share Affinity/Anti-Affinity Scheduler Filters. These scheduler"},{"line_number":364,"context_line":"  filters are applicable during share creation and share migration."}],"source_content_type":"text/x-rst","patch_set":13,"id":"0481e3af_43d3ff0f","line":363,"range":{"start_line":363,"start_character":47,"end_line":363,"end_character":54},"updated":"2021-09-02 22:28:25.000000000","message":"This doesn\u0027t impact the API as much as the ability to specify \"scheduler_hints\" in the request body of the POST /shares request","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"edb77946cb4be5e9d467f4e573a2c56b71cc1772","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"2.65"},{"line_number":362,"context_line":"----"},{"line_number":363,"context_line":"  Added Share Affinity/Anti-Affinity Scheduler Filters. These scheduler"},{"line_number":364,"context_line":"  filters are applicable during share creation and share migration."}],"source_content_type":"text/x-rst","patch_set":13,"id":"5889141f_b05fdb22","line":363,"range":{"start_line":363,"start_character":47,"end_line":363,"end_character":54},"in_reply_to":"0481e3af_43d3ff0f","updated":"2021-09-03 07:26:10.000000000","message":"Done","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"}],"manila/api/v1/shares.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":413,"context_line":"        if share_network_id:"},{"line_number":414,"context_line":"            kwargs[\u0027share_network_id\u0027] \u003d share_network_id"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d share.get(\u0027scheduler_hints\u0027)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        new_share \u003d self.share_api.create(context,"},{"line_number":419,"context_line":"                                          share_proto,"}],"source_content_type":"text/x-python","patch_set":11,"id":"68e8b790_1533685a","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":64},"updated":"2021-09-02 06:15:02.000000000","message":"You\u0027ll need to ensure this is only provided with API version 2.65 and beyond - this change must be made in the v2 API wrapper: manila/api/v2/shares.py \n\nThere are several examples currently where we\u0027re preventing the use of a request body parameter in older API versions: https://github.com/openstack/manila/blob/13d9e2c1e0818c7c6440e39840cdff1a21c8d0df/manila/api/v2/shares.py#L181-L201","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        if share_network_id:"},{"line_number":414,"context_line":"            kwargs[\u0027share_network_id\u0027] \u003d share_network_id"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        kwargs[\u0027scheduler_hints\u0027] \u003d share.get(\u0027scheduler_hints\u0027)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        new_share \u003d self.share_api.create(context,"},{"line_number":419,"context_line":"                                          share_proto,"}],"source_content_type":"text/x-python","patch_set":11,"id":"11b1376a_8691254d","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":64},"in_reply_to":"68e8b790_1533685a","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"}],"manila/api/v2/shares.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c3340f5c739162a4a2bba7c70ee96824d1a70017","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            raise exc.HTTPUnprocessableEntity()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        share \u003d body[\u0027share\u0027]"},{"line_number":187,"context_line":"        scheduler_hints \u003d share.get(\u0027scheduler_hints\u0027)"},{"line_number":188,"context_line":"        return self._create(req, body,"},{"line_number":189,"context_line":"                            check_create_share_from_snapshot_support\u003dTrue,"},{"line_number":190,"context_line":"                            check_availability_zones_extra_spec\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":13,"id":"8d91a0de_50616ed3","line":187,"range":{"start_line":187,"start_character":26,"end_line":187,"end_character":54},"updated":"2021-09-02 22:28:25.000000000","message":"share.pop(\u0027scheduler_hints\u0027, None)\n\njust to be safe","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"edb77946cb4be5e9d467f4e573a2c56b71cc1772","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            raise exc.HTTPUnprocessableEntity()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        share \u003d body[\u0027share\u0027]"},{"line_number":187,"context_line":"        scheduler_hints \u003d share.get(\u0027scheduler_hints\u0027)"},{"line_number":188,"context_line":"        return self._create(req, body,"},{"line_number":189,"context_line":"                            check_create_share_from_snapshot_support\u003dTrue,"},{"line_number":190,"context_line":"                            check_availability_zones_extra_spec\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":13,"id":"e4eb7674_f63afb79","line":187,"range":{"start_line":187,"start_character":26,"end_line":187,"end_character":54},"in_reply_to":"8d91a0de_50616ed3","updated":"2021-09-03 07:26:10.000000000","message":"Done","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"}],"manila/db/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c3340f5c739162a4a2bba7c70ee96824d1a70017","unresolved":true,"context_lines":[{"line_number":772,"context_line":""},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"def share_metadata_get_item(context, share_id, key):"},{"line_number":775,"context_line":"    \"\"\"Get metatem for given key and for a given share..\"\"\""},{"line_number":776,"context_line":"    return IMPL.share_metadata_get_item(context, share_id, key)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"8a325563_5c2c19c4","line":775,"range":{"start_line":775,"start_character":11,"end_line":775,"end_character":18},"updated":"2021-09-02 22:28:25.000000000","message":"meta item, metadata item, or metadatum","commit_id":"0562c747fabf61ae8c016f1877e255458211a5eb"}],"manila/scheduler/filters/affinity.py":[{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":70,"context_line":"            if share_uuids is None:"},{"line_number":71,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if not isinstance(share_uuids, (tuple, list)):"},{"line_number":74,"context_line":"            share_uuids \u003d share_uuids.split(\",\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"4593d4d4_b19bd890","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":54},"updated":"2021-08-28 09:14:46.000000000","message":"the formate of share_uuids must be string.\nlike uuid1,uuid2,uuid3...\nbecause this value get from db.\nit is that format when write to db in api layer.\n\nso we can delete this line,no need to check again.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if share_uuids is None:"},{"line_number":71,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if not isinstance(share_uuids, (tuple, list)):"},{"line_number":74,"context_line":"            share_uuids \u003d share_uuids.split(\",\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"d5e44c34_341d5793","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":54},"in_reply_to":"4593d4d4_b19bd890","updated":"2021-08-29 19:00:25.000000000","message":"Done","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        filtered_hosts \u003d []"},{"line_number":79,"context_line":"        for uuid in share_uuids:"},{"line_number":80,"context_line":"            if not uuidutils.is_uuid_like(uuid):"},{"line_number":81,"context_line":"                raise exception.InvalidUUID(uuid)"},{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                share \u003d self.share_api.get(context, uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fd096ed8_21fc11e3","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":48},"updated":"2021-08-28 09:14:46.000000000","message":"it must be uuit formate, since we have check it in api layer.\nDon\u0027t allow write db if not uuid formate. so this check is not necessary.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        filtered_hosts \u003d []"},{"line_number":79,"context_line":"        for uuid in share_uuids:"},{"line_number":80,"context_line":"            if not uuidutils.is_uuid_like(uuid):"},{"line_number":81,"context_line":"                raise exception.InvalidUUID(uuid)"},{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                share \u003d self.share_api.get(context, uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bb43cc43_bf5b18c0","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":48},"in_reply_to":"fd096ed8_21fc11e3","updated":"2021-08-29 19:00:25.000000000","message":"Done","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":90,"context_line":"                [instance.get(\u0027host\u0027) for instance in instances])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if self._filter_type \u003d\u003d AFFINITY_FILTER:"},{"line_number":93,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":94,"context_line":"                set.intersection(*map(set, filtered_hosts)))"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":97,"context_line":"                set.union(*map(set, filtered_hosts)))"}],"source_content_type":"text/x-python","patch_set":7,"id":"15fd3cf9_a41f9a8e","line":94,"range":{"start_line":93,"start_character":11,"end_line":94,"end_character":60},"updated":"2021-08-28 09:14:46.000000000","message":"maybe some problem here, for example:\n\u003e\u003e\u003efiltered_hosts \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027, \u0027host1\u0027]\n\u003e\u003e\u003eresult \u003d list(set.intersection(*map(set, filtered_hosts)))\n\u003e\u003e\u003eresult\n[\u0027o\u0027, \u0027s\u0027, \u0027h\u0027, \u0027t\u0027]\n\ni guess what you want to get is [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]\nso \nfilter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list(set(filtered_hosts))\ncan get what we want.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":true,"context_lines":[{"line_number":90,"context_line":"                [instance.get(\u0027host\u0027) for instance in instances])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if self._filter_type \u003d\u003d AFFINITY_FILTER:"},{"line_number":93,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":94,"context_line":"                set.intersection(*map(set, filtered_hosts)))"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":97,"context_line":"                set.union(*map(set, filtered_hosts)))"}],"source_content_type":"text/x-python","patch_set":7,"id":"85d98b50_82ec7a07","line":94,"range":{"start_line":93,"start_character":11,"end_line":94,"end_character":60},"in_reply_to":"15fd3cf9_a41f9a8e","updated":"2021-08-29 19:00:25.000000000","message":"Its, filtered_hosts \u003d [[\u0027host1\u0027], [\u0027host2\u0027], [\u0027host3\u0027], [\u0027host1\u0027]]\n\nso, current logic applies correctly.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"e1f168cb00d8ad2767dac9f8e9aef6b1e4002726","unresolved":true,"context_lines":[{"line_number":90,"context_line":"                [instance.get(\u0027host\u0027) for instance in instances])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if self._filter_type \u003d\u003d AFFINITY_FILTER:"},{"line_number":93,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":94,"context_line":"                set.intersection(*map(set, filtered_hosts)))"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":97,"context_line":"                set.union(*map(set, filtered_hosts)))"}],"source_content_type":"text/x-python","patch_set":7,"id":"2a359485_542795ee","line":94,"range":{"start_line":93,"start_character":11,"end_line":94,"end_character":60},"in_reply_to":"85d98b50_82ec7a07","updated":"2021-08-30 02:30:07.000000000","message":"yes, it is ok.i just miss the element of filtered_hosts is aslo list.\nthe logic here is very good, i think we need to explain it here to make it easier\nto understand the code. \nif different host in same_host filter, it get empty list, that means no allowed host\nto create share.\n\u003e\u003e\u003efiltered_hosts \u003d [[\u0027host1\u0027], [\u0027host2\u0027], [\u0027host3\u0027], [\u0027host1\u0027]]\n\u003e\u003e\u003eresult \u003d list(set.intersection(*map(set, filtered_hosts)))\n\u003e\u003e\u003eresult\n[]\n\n\u003e\u003e\u003efiltered_hosts2 \u003d [[\u0027host1\u0027], [\u0027host1\u0027], [\u0027host1\u0027], [\u0027host1\u0027]]\n\u003e\u003e\u003eresult \u003d list(set.intersection(*map(set, filtered_hosts2)))\n\u003e\u003e\u003eresult\n[\u0027host1\u0027]","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":93,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":94,"context_line":"                set.intersection(*map(set, filtered_hosts)))"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":97,"context_line":"                set.union(*map(set, filtered_hosts)))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        return filter_properties"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"f78d94d4_71fff6e8","line":97,"range":{"start_line":96,"start_character":12,"end_line":97,"end_character":53},"updated":"2021-08-28 09:14:46.000000000","message":"maybe have same problem.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":true,"context_lines":[{"line_number":93,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":94,"context_line":"                set.intersection(*map(set, filtered_hosts)))"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d list("},{"line_number":97,"context_line":"                set.union(*map(set, filtered_hosts)))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        return filter_properties"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"32898d49_4387607c","line":97,"range":{"start_line":96,"start_character":12,"end_line":97,"end_character":53},"in_reply_to":"f78d94d4_71fff6e8","updated":"2021-08-29 19:00:25.000000000","message":"same as above","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"e1f168cb00d8ad2767dac9f8e9aef6b1e4002726","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            if share_uuids is None:"},{"line_number":70,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"},{"line_number":73,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"e6b31425_56195b80","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":67},"updated":"2021-08-30 02:30:07.000000000","message":"share_uuids get from db. \nIt is impossible to contain brackets, since you have remote it in api layer.\nso no need to remove again.","commit_id":"1fe3dae21e9d33404073b31b315dbead9ad68e43"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"036b51090cefdee0ab1478107f6556a3bd158792","unresolved":true,"context_lines":[{"line_number":69,"context_line":"            if share_uuids is None:"},{"line_number":70,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"},{"line_number":73,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"295e7b4c_655ed8cc","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":67},"in_reply_to":"e6b31425_56195b80","updated":"2021-08-30 18:49:37.000000000","message":"\u003eshare_uuids get from db.\nthis is during share migration where we fill in filter_properties. During share creation scheduler_hints are coming as it is from API without any modification. We can skip to check invalid UUID as its done in API layer, but shares separation/splitting needs to be done here as well.","commit_id":"1fe3dae21e9d33404073b31b315dbead9ad68e43"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"ed7d1c502abad31ee3b70546c326b589af627b93","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if hints is None:"},{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dc0a63a1_0b94ea8e","line":66,"range":{"start_line":66,"start_character":12,"end_line":66,"end_character":38},"updated":"2021-08-31 02:31:29.000000000","message":"i check again, i don\u0027t think end user have to specify \u0027scheduler_hints\u0027 parameter,This is just to help the user select only optional segments for the back end, not mandatory. if not specify this parameter, The previous default schedule will be experienced.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3a47bf6b139cab7204d21918e562180595566bb5","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if hints is None:"},{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba01bafa_e3be8d6d","line":66,"range":{"start_line":66,"start_character":12,"end_line":66,"end_character":38},"in_reply_to":"c3e2a3f7_093ebc29","updated":"2021-09-01 01:27:46.000000000","message":"Thank you for your explanation, i am fine with this method. +1","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a0315396bd3e68b9a3c94178bc96dc7203752d4e","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if hints is None:"},{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"c3e2a3f7_093ebc29","line":66,"range":{"start_line":66,"start_character":12,"end_line":66,"end_character":38},"in_reply_to":"dc0a63a1_0b94ea8e","updated":"2021-08-31 17:08:22.000000000","message":"Hi,\nYes, scheduler_hints are optional and if not specified, the hosts will be returned to scheduler as per remaining filters. The SchedulerHintsNotSet exception do not do anything and on catching it (means hints are None), we skip filters i.e. previous default schedule will be used. check line 42.|\nTested with 4 backends and all possible combinations with/without option.\n\n\nIf you still want to me remove SchedulerHintsNotSet and code as you suggested, please reply. I am fine with that too.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"ed7d1c502abad31ee3b70546c326b589af627b93","unresolved":true,"context_lines":[{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"},{"line_number":70,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a776e446_82905a0c","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":35},"updated":"2021-08-31 02:31:29.000000000","message":"i think user can only specify same_host or different_host. not have to specify both.\nIt might be too much trouble for the user to specify both.For example,\nSometimes the user just wants to create a share with the same backend as the specified share, so the user doesn\u0027t have to worry about which share has a different backend\n\n\nI have a modification method for your reference,we can discuss about it.\n\n    def _validate(self, filter_properties):\n        context \u003d filter_properties[\u0027context\u0027]\n        hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)\n\n        if hints is None:\n            return\n        else:\n            share_uuids \u003d hints.get(self._filter_type)\n            if share_uuids:\n                share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)\n                share_uuids \u003d share_uuids.split(\",\")\n\n                filter_properties[\u0027scheduler_hints\u0027][self._filter_type] \u003d []\n\n                filtered_hosts \u003d []\n                for uuid in share_uuids:\n                    try:\n                        share \u003d self.share_api.get(context, uuid)\n                    except exception.NotFound:\n                        raise exception.ShareNotFound(uuid)\n                    instances \u003d share.get(\u0027instances\u0027)\n                    if len(instances) \u003d\u003d 0:\n                        raise exception.ShareInstanceNotFound(\n                            share_instance_id\u003duuid)\n                    filtered_hosts.append(\n                        [instance.get(\u0027host\u0027) for instance in instances])\n\n                if self._filter_type \u003d\u003d AFFINITY_FILTER:\n                    filter_properties[\u0027scheduler_hints\u0027][\n                        self._filter_type] \u003d list(\n                        set.intersection(*map(set, filtered_hosts)))\n                else:\n                    filter_properties[\u0027scheduler_hints\u0027][\n                        self._filter_type] \u003d list(\n                        set.union(*map(set, filtered_hosts)))\n\n                return filter_properties","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3a47bf6b139cab7204d21918e562180595566bb5","unresolved":true,"context_lines":[{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"},{"line_number":70,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"cb08a81a_6f6d67fc","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":35},"in_reply_to":"4ad9422c_d6237c81","updated":"2021-09-01 01:27:46.000000000","message":"this method is fine.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a0315396bd3e68b9a3c94178bc96dc7203752d4e","unresolved":true,"context_lines":[{"line_number":66,"context_line":"            raise SchedulerHintsNotSet"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            share_uuids \u003d hints.get(self._filter_type)"},{"line_number":69,"context_line":"            if share_uuids is None:"},{"line_number":70,"context_line":"                raise SchedulerHintsNotSet"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"4ad9422c_d6237c81","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":35},"in_reply_to":"a776e446_82905a0c","updated":"2021-08-31 17:08:22.000000000","message":"I agree that user might specify either same backend or different backend, but not both. Let\u0027s see what others think.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3ff7b9ce4eae75a1e9983ede7b94a57ce5792393","unresolved":true,"context_lines":[{"line_number":99,"context_line":"class AffinityFilter(AffinityBaseFilter):"},{"line_number":100,"context_line":"    _filter_type \u003d AFFINITY_FILTER"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def host_passes(self, host_state, filter_properties):"},{"line_number":103,"context_line":"        allowed_hosts \u003d \\"},{"line_number":104,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type]"},{"line_number":105,"context_line":"        return host_state.host in allowed_hosts"}],"source_content_type":"text/x-python","patch_set":10,"id":"68dab051_35f0f037","line":102,"range":{"start_line":102,"start_character":4,"end_line":102,"end_character":19},"updated":"2021-08-31 02:37:21.000000000","message":"modification method for your reference：\n\n    def host_passes(self, host_state, filter_properties):\n        scheduler_hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)\n        if not scheduler_hints:\n            return True\n        elif not scheduler_hints.get(self._filter_type):\n            return True\n        allowed_hosts \u003d \\\n            filter_properties[\u0027scheduler_hints\u0027][self._filter_type]\n        return host_state.host in allowed_hosts","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"ed7d1c502abad31ee3b70546c326b589af627b93","unresolved":true,"context_lines":[{"line_number":108,"context_line":"class AntiAffinityFilter(AffinityBaseFilter):"},{"line_number":109,"context_line":"    _filter_type \u003d ANTI_AFFINITY_FILTER"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def host_passes(self, host_state, filter_properties):"},{"line_number":112,"context_line":"        forbidden_hosts \u003d \\"},{"line_number":113,"context_line":"            filter_properties[\u0027scheduler_hints\u0027][self._filter_type]"},{"line_number":114,"context_line":"        return host_state.host not in forbidden_hosts"}],"source_content_type":"text/x-python","patch_set":10,"id":"87513d02_047a5de6","line":111,"range":{"start_line":111,"start_character":4,"end_line":111,"end_character":19},"updated":"2021-08-31 02:31:29.000000000","message":"def host_passes(self, host_state, filter_properties):\n        scheduler_hints \u003d filter_properties.get(\u0027scheduler_hints\u0027)\n        if not scheduler_hints:\n            return True\n        elif not scheduler_hints.get(self._filter_type):\n            return True\n        forbidden_hosts \u003d \\\n            filter_properties[\u0027scheduler_hints\u0027][self._filter_type]\n        return host_state.host not in forbidden_hosts","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"ed7d1c502abad31ee3b70546c326b589af627b93","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        return host_state.host not in forbidden_hosts"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class SchedulerHintsNotSet(Exception):"},{"line_number":118,"context_line":"    pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7e2036a6_efa6c711","line":117,"range":{"start_line":117,"start_character":6,"end_line":117,"end_character":26},"updated":"2021-08-31 02:31:29.000000000","message":"no need this exception.","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a0315396bd3e68b9a3c94178bc96dc7203752d4e","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        return host_state.host not in forbidden_hosts"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class SchedulerHintsNotSet(Exception):"},{"line_number":118,"context_line":"    pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"8a3fd08b_9e3d0fa1","line":117,"range":{"start_line":117,"start_character":6,"end_line":117,"end_character":26},"in_reply_to":"7e2036a6_efa6c711","updated":"2021-08-31 17:08:22.000000000","message":"Will remove once clarify/Ok (with existing code also skips filters on not passing hints).","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"3a47bf6b139cab7204d21918e562180595566bb5","unresolved":true,"context_lines":[{"line_number":114,"context_line":"        return host_state.host not in forbidden_hosts"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class SchedulerHintsNotSet(Exception):"},{"line_number":118,"context_line":"    pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fbb99615_8c5e451d","line":117,"range":{"start_line":117,"start_character":6,"end_line":117,"end_character":26},"in_reply_to":"8a3fd08b_9e3d0fa1","updated":"2021-09-01 01:27:46.000000000","message":"it is ok. we can use it with this method","commit_id":"92b9c50c223ffb4c124b68f5da1faa88610a2787"}],"manila/share/api.py":[{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":2067,"context_line":""},{"line_number":2068,"context_line":"    def _save_scheduler_hints(self, context, share, share_uuids, key):"},{"line_number":2069,"context_line":"        if not isinstance(share_uuids, list):"},{"line_number":2070,"context_line":"            share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2071,"context_line":""},{"line_number":2072,"context_line":"        val_uuids \u003d None"},{"line_number":2073,"context_line":"        for uuid in share_uuids:"}],"source_content_type":"text/x-python","patch_set":7,"id":"dcff954b_cf3bd0bc","line":2070,"range":{"start_line":2070,"start_character":12,"end_line":2070,"end_character":48},"updated":"2021-08-28 09:14:46.000000000","message":"here must be \u003cclass \u0027str\u0027\u003e. for example:\nshare_uuids \u003d \u0027[uuid1,uuid2,uuid3]\u0027\nafter split(\",\")\nshare_uuids[0] will be \u0027[uuid\u0027\nThis is clearly not what the user intended, so i think shoud try to\nDelete the opening and ending brackets if it exists.","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":true,"context_lines":[{"line_number":2067,"context_line":""},{"line_number":2068,"context_line":"    def _save_scheduler_hints(self, context, share, share_uuids, key):"},{"line_number":2069,"context_line":"        if not isinstance(share_uuids, list):"},{"line_number":2070,"context_line":"            share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2071,"context_line":""},{"line_number":2072,"context_line":"        val_uuids \u003d None"},{"line_number":2073,"context_line":"        for uuid in share_uuids:"}],"source_content_type":"text/x-python","patch_set":7,"id":"65742016_126d46fd","line":2070,"range":{"start_line":2070,"start_character":12,"end_line":2070,"end_character":48},"in_reply_to":"dcff954b_cf3bd0bc","updated":"2021-08-29 19:00:25.000000000","message":"sure, earlier I had tested with \"manila create ... --scheduler-hints same_host\u003duuid1,uuid2,uuid3\"\n\nwith same_host\u003d[uuid1,uuid2,uuid3], remove of brackets is needed, Updated PR","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"27f9c1990c23fd4477739759d2c0633d7389dae8","unresolved":true,"context_lines":[{"line_number":2139,"context_line":"                self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2140,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":"    def delete_scheduler_hints(self, context, share):"},{"line_number":2143,"context_line":"        self._delete_scheduler_hints(context, share, AFFINITY_KEY)"},{"line_number":2144,"context_line":"        self._delete_scheduler_hints(context, share, ANTI_AFFINITY_KEY)"},{"line_number":2145,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"a243d163_9113a348","line":2142,"range":{"start_line":2142,"start_character":8,"end_line":2142,"end_character":30},"updated":"2021-08-28 09:14:46.000000000","message":"when unmange share also need delete_scheduler_hints","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"be254513f2871d482d47e7d3803023c4b8e3451e","unresolved":false,"context_lines":[{"line_number":2139,"context_line":"                self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2140,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2141,"context_line":""},{"line_number":2142,"context_line":"    def delete_scheduler_hints(self, context, share):"},{"line_number":2143,"context_line":"        self._delete_scheduler_hints(context, share, AFFINITY_KEY)"},{"line_number":2144,"context_line":"        self._delete_scheduler_hints(context, share, ANTI_AFFINITY_KEY)"},{"line_number":2145,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3d03e095_5fd85cc9","line":2142,"range":{"start_line":2142,"start_character":8,"end_line":2142,"end_character":30},"in_reply_to":"a243d163_9113a348","updated":"2021-08-29 19:00:25.000000000","message":"Done","commit_id":"6aea4096c19649b151c366c69008a3f27c0ffbb1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2067,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2068,"context_line":""},{"line_number":2069,"context_line":"    def _save_scheduler_hints(self, context, share, share_uuids, key):"},{"line_number":2070,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"},{"line_number":2071,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        val_uuids \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"8c619b8f_0381c5c9","line":2070,"range":{"start_line":2070,"start_character":22,"end_line":2070,"end_character":67},"updated":"2021-09-02 06:15:02.000000000","message":"consider this as a long CSV string, no need for end users to provide the preceding and succeeding \"[]\"\n\nyour example in the api-ref/source/samples/share-create-request.json file shows what the CSV looks like","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2068,"context_line":""},{"line_number":2069,"context_line":"    def _save_scheduler_hints(self, context, share, share_uuids, key):"},{"line_number":2070,"context_line":"        share_uuids \u003d share_uuids.replace(\u0027[\u0027, \u0027\u0027).replace(\u0027]\u0027, \u0027\u0027)"},{"line_number":2071,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        val_uuids \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"590c462c_f99ff03d","line":2070,"range":{"start_line":2070,"start_character":22,"end_line":2070,"end_character":67},"in_reply_to":"8c619b8f_0381c5c9","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2071,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        val_uuids \u003d None"},{"line_number":2074,"context_line":"        for uuid in share_uuids:"},{"line_number":2075,"context_line":"            if not uuidutils.is_uuid_like(uuid):"},{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"4078e78b_cc206f30","line":2078,"range":{"start_line":2074,"start_character":0,"end_line":2078,"end_character":39},"updated":"2021-09-02 06:15:02.000000000","message":"this validation must occur before updating any of the metadata.. currently, it is possible for you to have updated a few shares, but fail and bail out because one of the UUIDs down the list is invalid. \n\nPerhaps have a \"validate_scheduler_hints\" method that precedes the \"save_scheduler_hints\" method; we\u0027ll spend a bit more time - however, the time complexity is still O(n), which is a decent price to pay for correctness","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":2071,"context_line":"        share_uuids \u003d share_uuids.split(\",\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":"        val_uuids \u003d None"},{"line_number":2074,"context_line":"        for uuid in share_uuids:"},{"line_number":2075,"context_line":"            if not uuidutils.is_uuid_like(uuid):"},{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"66b4f2ea_621837e4","line":2078,"range":{"start_line":2074,"start_character":0,"end_line":2078,"end_character":39},"in_reply_to":"4078e78b_cc206f30","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""},{"line_number":2082,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"abfaed4e_96fea710","line":2079,"range":{"start_line":2079,"start_character":19,"end_line":2079,"end_character":38},"updated":"2021-09-02 06:15:02.000000000","message":"(exception.NotFound, exception.Forbidden)\n\n\nif a user has no access to a given share, the \"get\" method will raise exception.Forbidden; it\u0027s appropriate for such errors to be bubbled up as \"ShareNotFound\"","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"71f6d925ad86698f8e3b731aa0f1b4e607e80e86","unresolved":false,"context_lines":[{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""},{"line_number":2082,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"020abe5c_57b99394","line":2079,"range":{"start_line":2079,"start_character":19,"end_line":2079,"end_character":38},"in_reply_to":"2f194b01_5cff3e4c","updated":"2021-09-02 19:35:10.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":true,"context_lines":[{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""},{"line_number":2082,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"f9cc0f73_620e4a43","line":2079,"range":{"start_line":2079,"start_character":19,"end_line":2079,"end_character":38},"in_reply_to":"abfaed4e_96fea710","updated":"2021-09-02 17:43:42.000000000","message":"I did not find any Forbidden exception.","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"295287a7d03058222bf80452a346398bcf403e9d","unresolved":true,"context_lines":[{"line_number":2076,"context_line":"                raise exception.InvalidUUID(uuid\u003duuid)"},{"line_number":2077,"context_line":"            try:"},{"line_number":2078,"context_line":"                self.get(context, uuid)"},{"line_number":2079,"context_line":"            except exception.NotFound:"},{"line_number":2080,"context_line":"                raise exception.ShareNotFound(share_id\u003duuid)"},{"line_number":2081,"context_line":""},{"line_number":2082,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"2f194b01_5cff3e4c","line":2079,"range":{"start_line":2079,"start_character":19,"end_line":2079,"end_character":38},"in_reply_to":"f9cc0f73_620e4a43","updated":"2021-09-02 17:48:04.000000000","message":"Ah yes, the \"get\" method raises PolicyNotAuthorized - you\u0027ll need to handle that the same way as exception.NotFound..","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2086,"context_line":"                item \u003d {key: share[\u0027id\u0027]}"},{"line_number":2087,"context_line":"            else:"},{"line_number":2088,"context_line":"                existing_uuids \u003d result.get(key, \"\")"},{"line_number":2089,"context_line":"                item \u003d {key: existing_uuids + \",\" + share[\u0027id\u0027]}"},{"line_number":2090,"context_line":"            self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2091,"context_line":"            if not val_uuids:"},{"line_number":2092,"context_line":"                val_uuids \u003d uuid"}],"source_content_type":"text/x-python","patch_set":11,"id":"d7d1ef2c_1ef411ba","line":2089,"range":{"start_line":2089,"start_character":16,"end_line":2089,"end_character":64},"updated":"2021-09-02 06:15:02.000000000","message":"suggest splitting and reconstructing this:\n\n item \u003d {key: \u0027,\u0027.join(existing_uuids.split(\u0027,\u0027) + [share[\u0027id\u0027]])}","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":2086,"context_line":"                item \u003d {key: share[\u0027id\u0027]}"},{"line_number":2087,"context_line":"            else:"},{"line_number":2088,"context_line":"                existing_uuids \u003d result.get(key, \"\")"},{"line_number":2089,"context_line":"                item \u003d {key: existing_uuids + \",\" + share[\u0027id\u0027]}"},{"line_number":2090,"context_line":"            self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2091,"context_line":"            if not val_uuids:"},{"line_number":2092,"context_line":"                val_uuids \u003d uuid"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a8537be_c14263d8","line":2089,"range":{"start_line":2089,"start_character":16,"end_line":2089,"end_character":64},"in_reply_to":"d7d1ef2c_1ef411ba","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"02922cc86f45c44f71bfdc13d2cf9cd9251e60b7","unresolved":true,"context_lines":[{"line_number":2125,"context_line":"            except exception.ShareMetadataNotFound:"},{"line_number":2126,"context_line":"                continue"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"            val_uuids \u003d result.get(key, \"\").split(\",\")"},{"line_number":2129,"context_line":"            new_val_uuids \u003d None"},{"line_number":2130,"context_line":"            for value_uuid in val_uuids:"},{"line_number":2131,"context_line":"                if value_uuid !\u003d share[\u0027id\u0027]:"},{"line_number":2132,"context_line":"                    if not new_val_uuids:"},{"line_number":2133,"context_line":"                        new_val_uuids \u003d value_uuid"},{"line_number":2134,"context_line":"                    else:"},{"line_number":2135,"context_line":"                        new_val_uuids \u003d new_val_uuids + \",\" + value_uuid"},{"line_number":2136,"context_line":"            if not new_val_uuids:"},{"line_number":2137,"context_line":"                self.db.share_metadata_delete(context, uuid, key)"},{"line_number":2138,"context_line":"            else:"},{"line_number":2139,"context_line":"                item \u003d {key: new_val_uuids}"},{"line_number":2140,"context_line":"                self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2141,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"    def delete_scheduler_hints(self, context, share):"}],"source_content_type":"text/x-python","patch_set":11,"id":"39fda889_ecc0ae3b","line":2140,"range":{"start_line":2128,"start_character":12,"end_line":2140,"end_character":71},"updated":"2021-09-02 06:15:02.000000000","message":"suggest a easier rewrite:\n\n\n new_val_uuids \u003d [val_uuid for val_uuid \n                  in result.get(key, \"\").split(\",\")\n                  if val_uuid !\u003d share[\u0027id\u0027]]\n if not new_val_uuids:\n    self.db.share_metadata_delete(context, uuid, key)\n else:\n    item \u003d {key: \u0027,\u0027.join(new_val_uuids)}\n    self.db.share_metadata_update_item(context, uuid, item)","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"bf198b93ff75c00bf452724a46a279977c8abd01","unresolved":false,"context_lines":[{"line_number":2125,"context_line":"            except exception.ShareMetadataNotFound:"},{"line_number":2126,"context_line":"                continue"},{"line_number":2127,"context_line":""},{"line_number":2128,"context_line":"            val_uuids \u003d result.get(key, \"\").split(\",\")"},{"line_number":2129,"context_line":"            new_val_uuids \u003d None"},{"line_number":2130,"context_line":"            for value_uuid in val_uuids:"},{"line_number":2131,"context_line":"                if value_uuid !\u003d share[\u0027id\u0027]:"},{"line_number":2132,"context_line":"                    if not new_val_uuids:"},{"line_number":2133,"context_line":"                        new_val_uuids \u003d value_uuid"},{"line_number":2134,"context_line":"                    else:"},{"line_number":2135,"context_line":"                        new_val_uuids \u003d new_val_uuids + \",\" + value_uuid"},{"line_number":2136,"context_line":"            if not new_val_uuids:"},{"line_number":2137,"context_line":"                self.db.share_metadata_delete(context, uuid, key)"},{"line_number":2138,"context_line":"            else:"},{"line_number":2139,"context_line":"                item \u003d {key: new_val_uuids}"},{"line_number":2140,"context_line":"                self.db.share_metadata_update_item(context, uuid, item)"},{"line_number":2141,"context_line":"        self.db.share_metadata_delete(context, share[\u0027id\u0027], key)"},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"    def delete_scheduler_hints(self, context, share):"}],"source_content_type":"text/x-python","patch_set":11,"id":"14ba75ae_8045bbe7","line":2140,"range":{"start_line":2128,"start_character":12,"end_line":2140,"end_character":71},"in_reply_to":"39fda889_ecc0ae3b","updated":"2021-09-02 17:43:42.000000000","message":"Done","commit_id":"cc1fd71b97ce7ea5902fab0570dd43c5551dd5d3"}]}
