)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d91136eb533d1bcf1fbca7b57fe85316a226a3bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0309a4cd_2c9297dc","updated":"2025-11-28 18:39:06.000000000","message":"I like the caching mechanism, but other changes actually change the behaviour of the code.","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0a22e0b431913907956ba1b9950296f19a431ff3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b8675064_6634d7bb","updated":"2025-12-01 07:28:26.000000000","message":"Thank you for inputs Cyril, addressed your review comments.","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"971736e21252f15c766d78fdcc7cb9c9794315d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6ace760d_79a7f629","updated":"2025-12-22 07:15:07.000000000","message":"Thank you for review Cyril, made changes as per your suggesiton.","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"497659de0dd0e58ddc40ede9232a4f4e46c3b131","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e699ae4a_867c2707","updated":"2025-12-01 10:44:25.000000000","message":"recheck failed to create volume","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"340a21bb5e36b296cc627f8539a17174221377c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9302425d_b51b3117","updated":"2026-01-07 13:43:26.000000000","message":"Thank you for review cyril, made changes as per your suggestion.","commit_id":"b5bb7927143b670587a8d34e3bb5287c1cdc483a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"a6142db45444770a81bc7baa001c5e4ffbfc8daf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e8368a4b_a9aafe77","updated":"2025-12-22 09:37:48.000000000","message":"recheck","commit_id":"b5bb7927143b670587a8d34e3bb5287c1cdc483a"}],"glance/common/property_utils.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d91136eb533d1bcf1fbca7b57fe85316a226a3bf","unresolved":true,"context_lines":[{"line_number":129,"context_line":"        #   glance/tests/etc/property-protections.conf"},{"line_number":130,"context_line":"        global CONFIG"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for section in list(CONFIG.sections()):"},{"line_number":133,"context_line":"            if section.startswith(\u0027os_glance\u0027) and section !\u003d \u0027os_glance.*\u0027:"},{"line_number":134,"context_line":"                CONFIG.remove_section(section)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1032282c_90269ef5","line":132,"range":{"start_line":132,"start_character":28,"end_line":132,"end_character":43},"updated":"2025-11-28 18:39:06.000000000","message":"I don\u0027t think using list() here changes anything (except maybe using a bit more RAM :p).","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0a22e0b431913907956ba1b9950296f19a431ff3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        #   glance/tests/etc/property-protections.conf"},{"line_number":130,"context_line":"        global CONFIG"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for section in list(CONFIG.sections()):"},{"line_number":133,"context_line":"            if section.startswith(\u0027os_glance\u0027) and section !\u003d \u0027os_glance.*\u0027:"},{"line_number":134,"context_line":"                CONFIG.remove_section(section)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7896e6b7_7f959720","line":132,"range":{"start_line":132,"start_character":28,"end_line":132,"end_character":43},"in_reply_to":"1032282c_90269ef5","updated":"2025-12-01 07:28:26.000000000","message":"Acknowledged","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d91136eb533d1bcf1fbca7b57fe85316a226a3bf","unresolved":true,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        # Check if section already exists to avoid re-injection"},{"line_number":137,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # We want to insert the [os_glance.*] section at the top of the config,"},{"line_number":141,"context_line":"        # so it is not shadowed by sections such as [.*]. To do this, we:"}],"source_content_type":"text/x-python","patch_set":3,"id":"d8ad25fb_4b5f97af","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":18},"updated":"2025-11-28 18:39:06.000000000","message":"So in order to be more efficient, we could check whether the section already exists while looping through all sections in the code just above. \n\nAlso, this is a change in behaviour:\n\n1) The os_glance.* section must be well defined. If the user provides the following section:\n\n    [os_glance.*]\n    create\u003d\u0027!\u0027\n    read\u003d\u0027!\u0027\n    update\u003d\u0027!\u0027\n    delete\u003d\u0027!\u0027\n\nThen this code will keep this section with \"wrong\" parameters.\n\n2) The os_glance.* section must be at the top, otherwise it can be shadowed. If the user provides the following config:\n\n    [.*]\n    // some stuff\n    [os_glance.*]\n    // some stuff\n\nThen the values for the os_glance.* will never be used.\n\nI suggest not modifying this code since:\n1) we want to make sure the os_glance.* section is always well-defined\n2) we need this section to be at the top\n3) users should not have to define that section anyway","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0a22e0b431913907956ba1b9950296f19a431ff3","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        # Check if section already exists to avoid re-injection"},{"line_number":137,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # We want to insert the [os_glance.*] section at the top of the config,"},{"line_number":141,"context_line":"        # so it is not shadowed by sections such as [.*]. To do this, we:"}],"source_content_type":"text/x-python","patch_set":3,"id":"60ebb79d_6de1a5a5","line":138,"range":{"start_line":138,"start_character":0,"end_line":138,"end_character":18},"in_reply_to":"d8ad25fb_4b5f97af","updated":"2025-12-01 07:28:26.000000000","message":"good catch, making sure that if os_glance.* is present with expected values then do not reinject it.","commit_id":"33451a04eb9ee1085fe79896905656e4edeaf7d5"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"7b74ea7709068302287400d25d3a530247fe314a","unresolved":true,"context_lines":[{"line_number":141,"context_line":"            \u0027read\u0027: \u0027@\u0027,"},{"line_number":142,"context_line":"            \u0027update\u0027: \u0027@\u0027,"},{"line_number":143,"context_line":"            \u0027delete\u0027: \u0027@\u0027,"},{"line_number":144,"context_line":"        }"},{"line_number":145,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":146,"context_line":"            section \u003d CONFIG[\u0027os_glance.*\u0027]"},{"line_number":147,"context_line":"            if (section.get(\u0027create\u0027) \u003d\u003d \u0027@\u0027 and"}],"source_content_type":"text/x-python","patch_set":4,"id":"25ef1482_3036ecea","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":9},"updated":"2025-12-22 00:22:53.000000000","message":"It is weird to declare this here and only use it way later. Maybe remove expected_values and revert the change at line 167?","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"971736e21252f15c766d78fdcc7cb9c9794315d4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            \u0027read\u0027: \u0027@\u0027,"},{"line_number":142,"context_line":"            \u0027update\u0027: \u0027@\u0027,"},{"line_number":143,"context_line":"            \u0027delete\u0027: \u0027@\u0027,"},{"line_number":144,"context_line":"        }"},{"line_number":145,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":146,"context_line":"            section \u003d CONFIG[\u0027os_glance.*\u0027]"},{"line_number":147,"context_line":"            if (section.get(\u0027create\u0027) \u003d\u003d \u0027@\u0027 and"}],"source_content_type":"text/x-python","patch_set":4,"id":"f496b791_f63034a0","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"25ef1482_3036ecea","updated":"2025-12-22 07:15:07.000000000","message":"Done","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"7b74ea7709068302287400d25d3a530247fe314a","unresolved":true,"context_lines":[{"line_number":148,"context_line":"                    section.get(\u0027read\u0027) \u003d\u003d \u0027@\u0027 and"},{"line_number":149,"context_line":"                    section.get(\u0027update\u0027) \u003d\u003d \u0027@\u0027 and"},{"line_number":150,"context_line":"                    section.get(\u0027delete\u0027) \u003d\u003d \u0027@\u0027):"},{"line_number":151,"context_line":"                # Section exists with correct values, no need to inject"},{"line_number":152,"context_line":"                return"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Remove os_glance.* if it exists (with wrong values) or doesn\u0027t exist"}],"source_content_type":"text/x-python","patch_set":4,"id":"2322bb9d_c6054335","line":151,"range":{"start_line":151,"start_character":38,"end_line":151,"end_character":45},"updated":"2025-12-22 00:22:53.000000000","message":"Yes, the section exists, but the config might look something like this:\n\n    [.*]\n    create \u003d !\n    read \u003d !\n    update \u003d !\n    delete \u003d !\n    [os_glance.*]\n    create \u003d @\n    read \u003d @\n    update \u003d @\n    delete \u003d @\n\nIn which case the os_glance.* section will be shadowed. We really want to have that section at the very top, which is why I wrote all this weird code to get it there, before all other sections.","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"971736e21252f15c766d78fdcc7cb9c9794315d4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                    section.get(\u0027read\u0027) \u003d\u003d \u0027@\u0027 and"},{"line_number":149,"context_line":"                    section.get(\u0027update\u0027) \u003d\u003d \u0027@\u0027 and"},{"line_number":150,"context_line":"                    section.get(\u0027delete\u0027) \u003d\u003d \u0027@\u0027):"},{"line_number":151,"context_line":"                # Section exists with correct values, no need to inject"},{"line_number":152,"context_line":"                return"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Remove os_glance.* if it exists (with wrong values) or doesn\u0027t exist"}],"source_content_type":"text/x-python","patch_set":4,"id":"f9bd75dd_c6eba5ab","line":151,"range":{"start_line":151,"start_character":38,"end_line":151,"end_character":45},"in_reply_to":"2322bb9d_c6054335","updated":"2025-12-22 07:15:07.000000000","message":"Acknowledged","commit_id":"9ebdce0dfcb0aa2187b952a4484661fa23456962"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"c7f4d060bb1fa9742c769120d8b8184c3e939c98","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Remove os_glance.* if it exists"},{"line_number":139,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":140,"context_line":"            CONFIG.remove_section(\u0027os_glance.*\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # We want to insert the [os_glance.*] section at the top of the config,"},{"line_number":143,"context_line":"        # so it is not shadowed by sections such as [.*]. To do this, we:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2bee5995_70741015","line":140,"range":{"start_line":140,"start_character":47,"end_line":140,"end_character":48},"updated":"2026-01-07 12:50:47.000000000","message":"So at line 135 we made sure *not* to remove this section, and now we make sure to remove it. We might as well have removed it in the for loop abovce, right?\n\nSo basically, this function should be left untouched.","commit_id":"b5bb7927143b670587a8d34e3bb5287c1cdc483a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"340a21bb5e36b296cc627f8539a17174221377c0","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Remove os_glance.* if it exists"},{"line_number":139,"context_line":"        if \u0027os_glance.*\u0027 in CONFIG.sections():"},{"line_number":140,"context_line":"            CONFIG.remove_section(\u0027os_glance.*\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # We want to insert the [os_glance.*] section at the top of the config,"},{"line_number":143,"context_line":"        # so it is not shadowed by sections such as [.*]. To do this, we:"}],"source_content_type":"text/x-python","patch_set":5,"id":"91592fe9_97cabd8e","line":140,"range":{"start_line":140,"start_character":47,"end_line":140,"end_character":48},"in_reply_to":"2bee5995_70741015","updated":"2026-01-07 13:43:26.000000000","message":"Done","commit_id":"b5bb7927143b670587a8d34e3bb5287c1cdc483a"}]}
