)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixed the logic that determines whether a share exists before manage a share"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_94083927","line":9,"range":{"start_line":9,"start_character":42,"end_line":9,"end_character":50},"updated":"2020-09-11 13:17:23.000000000","message":"it was raising","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixed the logic that determines whether a share exists before manage a share"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_a031bc0d","line":9,"range":{"start_line":9,"start_character":40,"end_line":9,"end_character":42},"updated":"2020-09-11 13:17:23.000000000","message":"nit: missing blank space","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixed the logic that determines whether a share exists before manage a share"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_1eded7d9","line":9,"range":{"start_line":9,"start_character":42,"end_line":9,"end_character":50},"in_reply_to":"9f560f44_94083927","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixed the logic that determines whether a share exists before manage a share"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_7eec3392","line":9,"range":{"start_line":9,"start_character":40,"end_line":9,"end_character":42},"in_reply_to":"9f560f44_a031bc0d","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_74280585","line":12,"range":{"start_line":12,"start_character":20,"end_line":12,"end_character":22},"updated":"2020-09-11 13:17:23.000000000","message":"nit: please add a blank space","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"when we manage a share use manila client,will meet"},{"line_number":10,"context_line":"ERROR: Invalid share: Share already exists."},{"line_number":11,"context_line":"But this share does not exist in the database, manila prompts that the"},{"line_number":12,"context_line":"share already exists,This is obviously not true."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_bee6cbaf","line":12,"range":{"start_line":12,"start_character":20,"end_line":12,"end_character":22},"in_reply_to":"9f560f44_74280585","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":12,"context_line":"share already exists,This is obviously not true."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"},{"line_number":16,"context_line":"protocol as valid query criteria."},{"line_number":17,"context_line":"And the parameter of export_location_path are not used correctly."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_942159a1","line":15,"range":{"start_line":15,"start_character":47,"end_line":15,"end_character":49},"updated":"2020-09-11 13:17:23.000000000","message":"same as above","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"share already exists,This is obviously not true."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"},{"line_number":16,"context_line":"protocol as valid query criteria."},{"line_number":17,"context_line":"And the parameter of export_location_path are not used correctly."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_feffa332","line":15,"range":{"start_line":15,"start_character":47,"end_line":15,"end_character":49},"in_reply_to":"9f560f44_942159a1","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"},{"line_number":16,"context_line":"protocol as valid query criteria."},{"line_number":17,"context_line":"And the parameter of export_location_path are not used correctly."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug:#1893718"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_744da570","line":17,"range":{"start_line":17,"start_character":42,"end_line":17,"end_character":45},"updated":"2020-09-11 13:17:23.000000000","message":"nit: is","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Analysis of the code found that Manila has a problem in determining"},{"line_number":15,"context_line":"whether the share exists in the query mechanism,It does not use host and"},{"line_number":16,"context_line":"protocol as valid query criteria."},{"line_number":17,"context_line":"And the parameter of export_location_path are not used correctly."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug:#1893718"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f560f44_defc5f41","line":17,"range":{"start_line":17,"start_character":42,"end_line":17,"end_character":45},"in_reply_to":"9f560f44_744da570","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b46f962cb8228ea200feb7c5dfb786676db0ab03","unresolved":false,"context_lines":[{"line_number":2006,"context_line":"    if not filters:"},{"line_number":2007,"context_line":"        filters \u003d {}"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"    status \u003d filters.get(\u0027status\u0027)"},{"line_number":2010,"context_line":"    host \u003d filters.get(\u0027host\u0027)"},{"line_number":2011,"context_line":"    share_proto \u003d filters.get(\u0027share_proto\u0027)"},{"line_number":2012,"context_line":"    share_type_id \u003d filters.get(\u0027share_type_id\u0027)"},{"line_number":2013,"context_line":"    share_id \u003d filters.get(\u0027id\u0027)"},{"line_number":2014,"context_line":"    if status:"},{"line_number":2015,"context_line":"        query \u003d query.filter(models.ShareInstance.status \u003d\u003d status)"},{"line_number":2016,"context_line":"    if host:"},{"line_number":2017,"context_line":"        query \u003d query.filter(models.ShareInstance.host \u003d\u003d host)"},{"line_number":2018,"context_line":"    if share_proto:"},{"line_number":2019,"context_line":"        query \u003d query.filter(models.Share.share_proto \u003d\u003d share_proto)"},{"line_number":2020,"context_line":"    if share_type_id:"},{"line_number":2021,"context_line":"        query \u003d query.filter("},{"line_number":2022,"context_line":"            models.ShareInstance.share_type_id \u003d\u003d share_type_id)"},{"line_number":2023,"context_line":"    if share_id:"},{"line_number":2024,"context_line":"        query \u003d query.filter(models.Share.id \u003d\u003d share_id)"},{"line_number":2025,"context_line":""},{"line_number":2026,"context_line":"    export_location_id \u003d filters.get(\u0027export_location_id\u0027)"},{"line_number":2027,"context_line":"    export_location_path \u003d filters.get(\u0027export_location_path\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_b4441049","line":2024,"range":{"start_line":2009,"start_character":0,"end_line":2024,"end_character":57},"updated":"2020-09-16 13:40:44.000000000","message":"All filters added don\u0027t look related to your fix, but if you want to add all, we\u0027ll need at least some units tests to validate them. At this moment, there is no test using these filters[1].\n\n[1]https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_a3b/749173/6/check/openstack-tox-cover/a3b5002/cover/manila_db_sqlalchemy_api_py.html#t2014","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"6a31987c0b2710485f2a27ff04f2b163d1676cb2","unresolved":false,"context_lines":[{"line_number":2006,"context_line":"    if not filters:"},{"line_number":2007,"context_line":"        filters \u003d {}"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"    status \u003d filters.get(\u0027status\u0027)"},{"line_number":2010,"context_line":"    host \u003d filters.get(\u0027host\u0027)"},{"line_number":2011,"context_line":"    share_proto \u003d filters.get(\u0027share_proto\u0027)"},{"line_number":2012,"context_line":"    share_type_id \u003d filters.get(\u0027share_type_id\u0027)"},{"line_number":2013,"context_line":"    share_id \u003d filters.get(\u0027id\u0027)"},{"line_number":2014,"context_line":"    if status:"},{"line_number":2015,"context_line":"        query \u003d query.filter(models.ShareInstance.status \u003d\u003d status)"},{"line_number":2016,"context_line":"    if host:"},{"line_number":2017,"context_line":"        query \u003d query.filter(models.ShareInstance.host \u003d\u003d host)"},{"line_number":2018,"context_line":"    if share_proto:"},{"line_number":2019,"context_line":"        query \u003d query.filter(models.Share.share_proto \u003d\u003d share_proto)"},{"line_number":2020,"context_line":"    if share_type_id:"},{"line_number":2021,"context_line":"        query \u003d query.filter("},{"line_number":2022,"context_line":"            models.ShareInstance.share_type_id \u003d\u003d share_type_id)"},{"line_number":2023,"context_line":"    if share_id:"},{"line_number":2024,"context_line":"        query \u003d query.filter(models.Share.id \u003d\u003d share_id)"},{"line_number":2025,"context_line":""},{"line_number":2026,"context_line":"    export_location_id \u003d filters.get(\u0027export_location_id\u0027)"},{"line_number":2027,"context_line":"    export_location_path \u003d filters.get(\u0027export_location_path\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_4ed8731d","line":2024,"range":{"start_line":2009,"start_character":0,"end_line":2024,"end_character":57},"in_reply_to":"9f560f44_b4441049","updated":"2020-09-17 08:37:50.000000000","message":"Currently, query the status, host, share_proto, share_type_id and id of share through api layer,At the same time, fuzzy matching is realized,like below:\nhttps://github.com/openstack/manila/blob/5f433b59ba5a9f7e4afce8d7ff82ef519c1fcd80/manila/share/api.py#L1824-L1832\nIt is inefficient to look up everything in a database and then compare them one by one,This part of the code is to give the filtering task to the database to complete.\n\nin this patch i will delete it.in my another patch, \nhttps://review.opendev.org/#/c/734041/\ni add generic fuzzy matching logic to the database layer, \nthen filter share will no need to complete by api layer,After merging the fuzzy matching code, with the above code, the query share list can be completed entirely by the database,Significantly improve query speed","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"}],"manila/share/api.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":773,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":774,"context_line":"            \u0027export_location_path\u0027: share_data[\u0027export_location\u0027],"},{"line_number":775,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":776,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":777,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_80663828","line":774,"range":{"start_line":774,"start_character":36,"end_line":774,"end_character":65},"updated":"2020-09-11 13:17:23.000000000","message":"According to the functional tests, is not always that this will be a string. This could be a dict as well and cause manila to fail in the database, since it will be expecting a string instead of a dict.","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":773,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":774,"context_line":"            \u0027export_location_path\u0027: share_data[\u0027export_location\u0027],"},{"line_number":775,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":776,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":777,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_5af4f1f1","line":774,"range":{"start_line":774,"start_character":36,"end_line":774,"end_character":65},"in_reply_to":"9f560f44_80663828","updated":"2020-09-15 06:27:37.000000000","message":"Yes, I should consider the case where it\u0027s a dic and not a string.","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b46f962cb8228ea200feb7c5dfb786676db0ab03","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        self.share_rpcapi.update_share_replica(context, share_replica)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":"        export_location \u003d ("},{"line_number":773,"context_line":"            share_data[\u0027export_location\u0027][\u0027path\u0027]"},{"line_number":774,"context_line":"            if isinstance(share_data[\u0027export_location\u0027], dict)"},{"line_number":775,"context_line":"            else share_data[\u0027export_location\u0027])"},{"line_number":776,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_5216714b","line":775,"range":{"start_line":772,"start_character":0,"end_line":775,"end_character":47},"updated":"2020-09-16 13:40:44.000000000","message":"It is expected to have the export-path inside share_data[\u0027export_location\u0027] according with[1].\n\nhttps://github.com/openstack/manila/blob/12e9c3586c20e53457911ec5f4ed3045aeba5464/manila/api/v1/share_manage.py#L46","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"6a31987c0b2710485f2a27ff04f2b163d1676cb2","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        self.share_rpcapi.update_share_replica(context, share_replica)"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":"        export_location \u003d ("},{"line_number":773,"context_line":"            share_data[\u0027export_location\u0027][\u0027path\u0027]"},{"line_number":774,"context_line":"            if isinstance(share_data[\u0027export_location\u0027], dict)"},{"line_number":775,"context_line":"            else share_data[\u0027export_location\u0027])"},{"line_number":776,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_a5b212e4","line":775,"range":{"start_line":772,"start_character":0,"end_line":775,"end_character":47},"in_reply_to":"9f560f44_5216714b","updated":"2020-09-17 08:37:50.000000000","message":"hi, Douglas Viroel. I looked again at the logic of this part.\naccording to \nhttps://github.com/openstack/manila/blob/5f433b59ba5a9f7e4afce8d7ff82ef519c1fcd80/manila/db/sqlalchemy/api.py#L3381-L3398\nwe can see that the db accept export_location format can be string, dict, list, tuple, set。if format is not list, tuple, set, it will convert to tuple format in order to go through all the export_location parameters.\nso i think we don\u0027t need to extract path from share_data[\u0027export_location\u0027] here.\nand share_data[\u0027export_location\u0027] get from \nhttps://github.com/openstack/manila/blob/5f433b59ba5a9f7e4afce8d7ff82ef519c1fcd80/manila/api/v1/share_manage.py#L46\nhere the share_data equal the dict of share, so i think it not expected have the export_path.\n\naccording this problem, another question comes to mind, some storage backend, a share may have more than one export_location, but the manila client,\nhttps://github.com/openstack/python-manilaclient/blob/3cac584e70d18fb7765cbe16b025493b1fcc78ce/manilaclient/v2/shell.py#L1311\ndefine export_path be a string,this will lead to a share can only have one  export_location through manila client manage share, In fact, there are multiple export locations for this share under storage backend. so i think this parameter should support list of export_path.","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b46f962cb8228ea200feb7c5dfb786676db0ab03","unresolved":false,"context_lines":[{"line_number":775,"context_line":"            else share_data[\u0027export_location\u0027])"},{"line_number":776,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"},{"line_number":779,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":780,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":781,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_342480af","line":778,"range":{"start_line":778,"start_character":12,"end_line":778,"end_character":35},"updated":"2020-09-16 13:40:44.000000000","message":"+1, good find haixin","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"6a31987c0b2710485f2a27ff04f2b163d1676cb2","unresolved":false,"context_lines":[{"line_number":775,"context_line":"            else share_data[\u0027export_location\u0027])"},{"line_number":776,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"},{"line_number":779,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":780,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":781,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_d3254c5e","line":778,"range":{"start_line":778,"start_character":12,"end_line":778,"end_character":35},"in_reply_to":"9f560f44_342480af","updated":"2020-09-17 08:37:50.000000000","message":"Done","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b46f962cb8228ea200feb7c5dfb786676db0ab03","unresolved":false,"context_lines":[{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"},{"line_number":779,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":780,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":781,"context_line":"        })"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        share_type_id \u003d share_data[\u0027share_type_id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_f20b45d2","line":780,"range":{"start_line":780,"start_character":0,"end_line":780,"end_character":56},"updated":"2020-09-16 13:40:44.000000000","message":"Not related to your change haixin, just a reflection: Isn\u0027t host, export-path and protocol enough to determine that this share already exists? By including the share_type here, open the possibility of managing an already existent share by just providing a different share-type.","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"6a31987c0b2710485f2a27ff04f2b163d1676cb2","unresolved":false,"context_lines":[{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"            \u0027export_location_path\u0027: export_location,"},{"line_number":779,"context_line":"            \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":780,"context_line":"            \u0027share_type_id\u0027: share_data[\u0027share_type_id\u0027]"},{"line_number":781,"context_line":"        })"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        share_type_id \u003d share_data[\u0027share_type_id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_f38cd03a","line":780,"range":{"start_line":780,"start_character":0,"end_line":780,"end_character":56},"in_reply_to":"9f560f44_f20b45d2","updated":"2020-09-17 08:37:50.000000000","message":"good question, here realy not need add share_type_id, this will lead to get already existent share by just providing a different share-type.\nbut i think if share_backend_name in share_type[\u0027extra_specs\u0027],it should compare to share_utils.extract_host(host, level\u003d\u0027backend_name\u0027), to make sure it can be manage success.","commit_id":"07895a380cce7a6a53ba9cf7162003ce1a3b7c09"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"308a4e0fa709509b90f935cb10dc072973201af5","unresolved":false,"context_lines":[{"line_number":816,"context_line":"            host_backend_name \u003d share_utils.extract_host("},{"line_number":817,"context_line":"                share_data[\u0027host\u0027], level\u003d\u0027backend_name\u0027)"},{"line_number":818,"context_line":"            if share_type_backend_name !\u003d host_backend_name:"},{"line_number":819,"context_line":"                msg \u003d _(\"service host not match share type.\")"},{"line_number":820,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        share_data.update({"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_d29ffdff","line":819,"range":{"start_line":819,"start_character":25,"end_line":819,"end_character":58},"updated":"2020-09-17 13:05:46.000000000","message":"nit: Service host does not match share type.","commit_id":"3b203f923493eeb8e04b5575d27146e1a5824cb3"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"2c1584323456530b91704a4e414184d0978044fc","unresolved":false,"context_lines":[{"line_number":816,"context_line":"            host_backend_name \u003d share_utils.extract_host("},{"line_number":817,"context_line":"                share_data[\u0027host\u0027], level\u003d\u0027backend_name\u0027)"},{"line_number":818,"context_line":"            if share_type_backend_name !\u003d host_backend_name:"},{"line_number":819,"context_line":"                msg \u003d _(\"service host not match share type.\")"},{"line_number":820,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"        share_data.update({"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_d30a551c","line":819,"range":{"start_line":819,"start_character":25,"end_line":819,"end_character":58},"in_reply_to":"9f560f44_d29ffdff","updated":"2020-09-18 03:35:09.000000000","message":"Done","commit_id":"3b203f923493eeb8e04b5575d27146e1a5824cb3"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"eff10e55364af0ecfa90a55f9aa9dd87a3f2449b","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                context, share_server[\u0027share_network_subnet_id\u0027])"},{"line_number":817,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d subnet[\u0027share_network_id\u0027]"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if share_type_backend_name:"},{"line_number":820,"context_line":"            host_backend_name \u003d share_utils.extract_host("},{"line_number":821,"context_line":"                share_data[\u0027host\u0027], level\u003d\u0027backend_name\u0027)"},{"line_number":822,"context_line":"            if share_type_backend_name !\u003d host_backend_name:"},{"line_number":823,"context_line":"                msg \u003d _(\"Service host does not match share type.\")"},{"line_number":824,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        share_data.update({"},{"line_number":827,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_87d977f5","line":824,"range":{"start_line":819,"start_character":2,"end_line":824,"end_character":56},"updated":"2020-09-22 21:01:11.000000000","message":"not being covered by unit tests. Could you please add some?","commit_id":"ae758686bc26e6690c4c781b7cf18c22a907d9a4"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"71bfa643ce6d1d17b636b756a4c3b42edf3483ff","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                context, share_server[\u0027share_network_subnet_id\u0027])"},{"line_number":817,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d subnet[\u0027share_network_id\u0027]"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if share_type_backend_name:"},{"line_number":820,"context_line":"            host_backend_name \u003d share_utils.extract_host("},{"line_number":821,"context_line":"                share_data[\u0027host\u0027], level\u003d\u0027backend_name\u0027)"},{"line_number":822,"context_line":"            if share_type_backend_name !\u003d host_backend_name:"},{"line_number":823,"context_line":"                msg \u003d _(\"Service host does not match share type.\")"},{"line_number":824,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        share_data.update({"},{"line_number":827,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_bdd7634f","line":824,"range":{"start_line":819,"start_character":2,"end_line":824,"end_character":56},"in_reply_to":"9f560f44_279fcb02","updated":"2020-09-24 11:18:40.000000000","message":"i think Douglas Viroel is right。\ni will remove this code.","commit_id":"ae758686bc26e6690c4c781b7cf18c22a907d9a4"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3c1113aaf667cb753f884e5b36867ee5cd18f447","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                context, share_server[\u0027share_network_subnet_id\u0027])"},{"line_number":817,"context_line":"            share_data[\u0027share_network_id\u0027] \u003d subnet[\u0027share_network_id\u0027]"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        if share_type_backend_name:"},{"line_number":820,"context_line":"            host_backend_name \u003d share_utils.extract_host("},{"line_number":821,"context_line":"                share_data[\u0027host\u0027], level\u003d\u0027backend_name\u0027)"},{"line_number":822,"context_line":"            if share_type_backend_name !\u003d host_backend_name:"},{"line_number":823,"context_line":"                msg \u003d _(\"Service host does not match share type.\")"},{"line_number":824,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        share_data.update({"},{"line_number":827,"context_line":"            \u0027user_id\u0027: context.user_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f560f44_279fcb02","line":824,"range":{"start_line":819,"start_character":2,"end_line":824,"end_character":56},"in_reply_to":"9f560f44_87d977f5","updated":"2020-09-22 21:06:18.000000000","message":"I believe that the scheduler will handle this one and other extra-specs provided in the share-type. So there is no need to add it here.","commit_id":"ae758686bc26e6690c4c781b7cf18c22a907d9a4"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c532d15cdf1bee38d0d9e263f459ca8c36df56fa","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":"        export_location \u003d ("},{"line_number":773,"context_line":"            share_data[\u0027export_location\u0027][\u0027path\u0027]"},{"line_number":774,"context_line":"            if isinstance(share_data[\u0027export_location\u0027], dict)"},{"line_number":775,"context_line":"            else share_data[\u0027export_location\u0027])"},{"line_number":776,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":777,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_976fc9c2","line":774,"range":{"start_line":773,"start_character":12,"end_line":774,"end_character":62},"updated":"2020-09-23 22:51:52.000000000","message":"This can never be the case..","commit_id":"ccd1cef0b0cd94a6b655499ca69841828612d4f3"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"2d33b911433c69618ce691347479196f1e59758b","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Check whether there\u0027s a share already with the provided options:"},{"line_number":774,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":775,"context_line":"            \u0027export_location_path\u0027: share_data[\u0027export_location_path\u0027],"},{"line_number":776,"context_line":"        })"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"        if shares:"},{"line_number":779,"context_line":"            LOG.error(\"Found an existing share with export location %s!\","}],"source_content_type":"text/x-python","patch_set":15,"id":"9f560f44_a49d66bc","line":776,"range":{"start_line":773,"start_character":8,"end_line":776,"end_character":10},"updated":"2020-09-24 17:31:41.000000000","message":"I\u0027m trying to remember why it was coded the way it is, and that brought me 2 questions\n\n1) if there are 2 backends with shares that were created outside of manila (hence why they are being managed), and they are named the same, isn\u0027t this going to fail? Before, it was filtering on the host, so it was allowable, most backends don\u0027t allow duplicate export locations on the same storage.\n\n2) I\u0027m assuming the performance impact of running that query without filters could potentially timeout, considering that in some environments we\u0027ve already been dealing with pagination issues. Doesn\u0027t it make more sense to search directly in the export locations table?","commit_id":"a6a8c27c102163924911205e3fc69fae91ab9ada"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dd4990204f5f616e20d06c244a1a1e9160b4b987","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Check whether there\u0027s a share already with the provided options:"},{"line_number":774,"context_line":"        shares \u003d self.get_all(context, {"},{"line_number":775,"context_line":"            \u0027export_location_path\u0027: share_data[\u0027export_location_path\u0027],"},{"line_number":776,"context_line":"        })"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"        if shares:"},{"line_number":779,"context_line":"            LOG.error(\"Found an existing share with export location %s!\","}],"source_content_type":"text/x-python","patch_set":15,"id":"9f560f44_277158df","line":776,"range":{"start_line":773,"start_character":8,"end_line":776,"end_character":10},"in_reply_to":"9f560f44_a49d66bc","updated":"2020-09-24 19:43:13.000000000","message":"Thanks, Rodrigo - \n\nbased on our IRC discussion (http://eavesdrop.openstack.org/irclogs/%23openstack-manila/%23openstack-manila.2020-09-24.log.html#t2020-09-24T17:38:08), I agree that we can\u0027t expect the export location to be unique in a deployment; at best we can check if they\u0027re unique to a given host - so I\u0027ve added a host lookup. \n\nwe\u0027ll still achieve a minor tune-up here in terms of optimization since we\u0027re no longer joined loading the shares table and any further joins that are implicit in it.","commit_id":"a6a8c27c102163924911205e3fc69fae91ab9ada"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e2ff5901cecae8df98d62e4a4c465aba8d3b26e6","unresolved":false,"context_lines":[{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Check whether there\u0027s a share already with the provided options:"},{"line_number":774,"context_line":"        already_managed \u003d self.db.share_instances_get_all("},{"line_number":775,"context_line":"            context, filters\u003d{"},{"line_number":776,"context_line":"                \u0027export_location_path\u0027: share_data[\u0027export_location_path\u0027],"},{"line_number":777,"context_line":"                \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"                \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":779,"context_line":"            })"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        if already_managed:"},{"line_number":782,"context_line":"            LOG.error(\"Found an existing share with export location %s!\","}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_b4b462f2","line":779,"range":{"start_line":774,"start_character":0,"end_line":779,"end_character":14},"updated":"2020-09-25 13:05:11.000000000","message":"We still can have duplicated shares here, in the same host, using the same protocol, and with the same export location, but inside different share servers. So i believe that, if the user provides a share_server_id, we should include it in this search.","commit_id":"33d303c2b0ff6344ac7859e51d0b4298265bf798"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"07d00cbcac53785537502ec4fb2459ddf66cd7b2","unresolved":false,"context_lines":[{"line_number":771,"context_line":"    def manage(self, context, share_data, driver_options):"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # Check whether there\u0027s a share already with the provided options:"},{"line_number":774,"context_line":"        already_managed \u003d self.db.share_instances_get_all("},{"line_number":775,"context_line":"            context, filters\u003d{"},{"line_number":776,"context_line":"                \u0027export_location_path\u0027: share_data[\u0027export_location_path\u0027],"},{"line_number":777,"context_line":"                \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":778,"context_line":"                \u0027share_proto\u0027: share_data[\u0027share_proto\u0027],"},{"line_number":779,"context_line":"            })"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        if already_managed:"},{"line_number":782,"context_line":"            LOG.error(\"Found an existing share with export location %s!\","}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_ea0c2e43","line":779,"range":{"start_line":774,"start_character":0,"end_line":779,"end_character":14},"in_reply_to":"9f560f44_b4b462f2","updated":"2020-09-25 18:16:39.000000000","message":"I agree - we should include the share_server_id here","commit_id":"33d303c2b0ff6344ac7859e51d0b4298265bf798"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"9fde70e71a021bc362938c32b011252f9d5d3224","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":777,"context_line":"        }"},{"line_number":778,"context_line":"        share_server_id \u003d share_data.get(\u0027share_server_id\u0027)"},{"line_number":779,"context_line":"        if share_server_id:"},{"line_number":780,"context_line":"            filters[\u0027share_server_id\u0027] \u003d share_data[\u0027share_server_id\u0027]"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        already_managed \u003d self.db.share_instances_get_all(context,"},{"line_number":783,"context_line":"                                                          filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fffc6b78_a01218b0","line":780,"range":{"start_line":779,"start_character":8,"end_line":780,"end_character":70},"updated":"2020-11-19 18:15:29.000000000","message":"LGTM, super tiny nit: based on the code in share_instances_get_all, you could avoid the \"if share_server_id:\" and add to the filter regardless of being None or not.","commit_id":"1b5771ef15da3be52f54f2177c181020d2479a8b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"94c4a70f33bddc24bcf367e39120d49ee43b7cf6","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            \u0027host\u0027: share_data[\u0027host\u0027],"},{"line_number":777,"context_line":"        }"},{"line_number":778,"context_line":"        share_server_id \u003d share_data.get(\u0027share_server_id\u0027)"},{"line_number":779,"context_line":"        if share_server_id:"},{"line_number":780,"context_line":"            filters[\u0027share_server_id\u0027] \u003d share_data[\u0027share_server_id\u0027]"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        already_managed \u003d self.db.share_instances_get_all(context,"},{"line_number":783,"context_line":"                                                          filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fffc6b78_e068a022","line":780,"range":{"start_line":779,"start_character":8,"end_line":780,"end_character":70},"in_reply_to":"fffc6b78_a01218b0","updated":"2020-11-19 18:17:43.000000000","message":"+1 agreed, we can clean this up in a follow up patch","commit_id":"1b5771ef15da3be52f54f2177c181020d2479a8b"}],"releasenotes/notes/bug-1893718-fix-the-logic-that-determines-whether-share-exists-before-manage-share-453b4545e365585f.yaml":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"b08f01268c6ae8f637dc75c3fa236f9f8a6ff4aa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed the logic that determines whether a share exists before manage a"},{"line_number":5,"context_line":"    share. See `Launchpad bug #1893718"},{"line_number":6,"context_line":"    \u003chttps://launchpad.net/bugs/1893718\u003e`_ for more information."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9f560f44_20776cd6","line":5,"range":{"start_line":4,"start_character":73,"end_line":5,"end_character":9},"updated":"2020-09-11 13:17:23.000000000","message":"starting to manage it.","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"},{"author":{"_account_id":30407,"name":"haixin","email":"haixin_haixin@qq.com","username":"haixin"},"change_message_id":"871110d913b11f721fa529b4093ebe1c60c08b5e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed the logic that determines whether a share exists before manage a"},{"line_number":5,"context_line":"    share. See `Launchpad bug #1893718"},{"line_number":6,"context_line":"    \u003chttps://launchpad.net/bugs/1893718\u003e`_ for more information."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9f560f44_7e5ef379","line":5,"range":{"start_line":4,"start_character":73,"end_line":5,"end_character":9},"in_reply_to":"9f560f44_20776cd6","updated":"2020-09-15 06:27:37.000000000","message":"Done","commit_id":"f79d9b8b244651f916f4f16fd187c2525e2f0fa7"}]}
