)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d3c44a81350ef7285bc5d8f5a1c62d536d90916","unresolved":false,"context_lines":[{"line_number":18,"context_line":"list is reconstructed."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Co-Authored-By: CLIFF PARSONS \u003ccliff.parsons@att.com\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I057b46c4af384fd0836cd973a5998fe3bcb56175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_4d7b2328","line":21,"updated":"2019-12-09 16:24:32.000000000","message":"It\u0027d be good to report a bug for this in case someone later wants to backport the fix.","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"c43a0d4754640d5f82c58267f1902c9c8a2cf5d2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"list is reconstructed."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Co-Authored-By: CLIFF PARSONS \u003ccliff.parsons@att.com\u003e"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I057b46c4af384fd0836cd973a5998fe3bcb56175"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_f9708d43","line":21,"in_reply_to":"3fa7e38b_4d7b2328","updated":"2019-12-09 20:32:25.000000000","message":"DONE: https://bugs.launchpad.net/nova/+bug/1855749","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"}],"nova/api/metadata/vendordata_dynamic.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25aff8ac92b34da3d9f3bfc7079e86e5c1f31327","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # We only create the session if we make a request."},{"line_number":71,"context_line":"        self.session \u003d None"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _get_boot_roles(self):"},{"line_number":74,"context_line":"        \"\"\"Get boot roles from instance system metadata"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        If the boot_roles dictionary in the system metadata were stored in"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_cd2873ef","line":73,"updated":"2019-12-09 16:28:01.000000000","message":"nit: this could be a staticmethod\n\n(later)\n\nActually it\u0027d probably be better to move this and the _format_roles method into nova.compute.utils and then the format/parse methods are next to each other.","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"c43a0d4754640d5f82c58267f1902c9c8a2cf5d2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        # We only create the session if we make a request."},{"line_number":71,"context_line":"        self.session \u003d None"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _get_boot_roles(self):"},{"line_number":74,"context_line":"        \"\"\"Get boot roles from instance system metadata"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        If the boot_roles dictionary in the system metadata were stored in"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_196ec963","line":73,"in_reply_to":"3fa7e38b_cd2873ef","updated":"2019-12-09 20:32:25.000000000","message":"Done","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25aff8ac92b34da3d9f3bfc7079e86e5c1f31327","unresolved":false,"context_lines":[{"line_number":2430,"context_line":"        if modified:"},{"line_number":2431,"context_line":"            instance.save()"},{"line_number":2432,"context_line":""},{"line_number":2433,"context_line":"    def _format_roles(self, role_list, string_limit):"},{"line_number":2434,"context_line":"        \"\"\"Format the boot_roles into a dictionary"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"        If the given role_list translates to a string that is larger than"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0da68bad","line":2433,"updated":"2019-12-09 16:28:01.000000000","message":"nit: this could be a staticmethod\n\n(later)\n\nActually just move this into nova.compute.utils.","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"c43a0d4754640d5f82c58267f1902c9c8a2cf5d2","unresolved":false,"context_lines":[{"line_number":2430,"context_line":"        if modified:"},{"line_number":2431,"context_line":"            instance.save()"},{"line_number":2432,"context_line":""},{"line_number":2433,"context_line":"    def _format_roles(self, role_list, string_limit):"},{"line_number":2434,"context_line":"        \"\"\"Format the boot_roles into a dictionary"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"        If the given role_list translates to a string that is larger than"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b98c552e","line":2433,"in_reply_to":"3fa7e38b_0da68bad","updated":"2019-12-09 20:32:25.000000000","message":"Done","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"25aff8ac92b34da3d9f3bfc7079e86e5c1f31327","unresolved":false,"context_lines":[{"line_number":2434,"context_line":"        \"\"\"Format the boot_roles into a dictionary"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"        If the given role_list translates to a string that is larger than"},{"line_number":2437,"context_line":"        the limit (currently 255), then split the string into smaller"},{"line_number":2438,"context_line":"        strings which are kept as part of the same instance record. For"},{"line_number":2439,"context_line":"        example, if the string is larger than the limit, the resulting"},{"line_number":2440,"context_line":"        database record may look like:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0dd44be9","line":2437,"range":{"start_line":2437,"start_character":18,"end_line":2437,"end_character":33},"updated":"2019-12-09 16:28:01.000000000","message":"nit: without string_limit having a default value this is a bit of tight coupling with the sole caller of the function - maybe just default string_limit\u003d255.","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"c43a0d4754640d5f82c58267f1902c9c8a2cf5d2","unresolved":false,"context_lines":[{"line_number":2434,"context_line":"        \"\"\"Format the boot_roles into a dictionary"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"        If the given role_list translates to a string that is larger than"},{"line_number":2437,"context_line":"        the limit (currently 255), then split the string into smaller"},{"line_number":2438,"context_line":"        strings which are kept as part of the same instance record. For"},{"line_number":2439,"context_line":"        example, if the string is larger than the limit, the resulting"},{"line_number":2440,"context_line":"        database record may look like:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d9911148","line":2437,"range":{"start_line":2437,"start_character":18,"end_line":2437,"end_character":33},"in_reply_to":"3fa7e38b_0dd44be9","updated":"2019-12-09 20:32:25.000000000","message":"Done","commit_id":"0754c97544c5bb7c7fa5c21292a10207966e0516"}],"nova/compute/utils.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"117de886a27e1b0093feb05f04ce0aad17a1932a","unresolved":false,"context_lines":[{"line_number":1547,"context_line":"        key \u003d \"boot_roles\""},{"line_number":1548,"context_line":"        if i \u003e 0:"},{"line_number":1549,"context_line":"            key \u003d key + str(i)"},{"line_number":1550,"context_line":"        substring \u003d instance.system_metadata.get(key, \u0027\u0027)"},{"line_number":1551,"context_line":"        if substring !\u003d \u0027\u0027:"},{"line_number":1552,"context_line":"            boot_roles_string \u003d boot_roles_string + substring"},{"line_number":1553,"context_line":"            i \u003d i + 1"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2158ee54","line":1550,"range":{"start_line":1550,"start_character":8,"end_line":1550,"end_character":17},"updated":"2020-01-10 13:13:49.000000000","message":"nit: roles var would give more context","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"7a6c3b763b920711256ed26b7b833b4c9a7a30ab","unresolved":false,"context_lines":[{"line_number":1547,"context_line":"        key \u003d \"boot_roles\""},{"line_number":1548,"context_line":"        if i \u003e 0:"},{"line_number":1549,"context_line":"            key \u003d key + str(i)"},{"line_number":1550,"context_line":"        substring \u003d instance.system_metadata.get(key, \u0027\u0027)"},{"line_number":1551,"context_line":"        if substring !\u003d \u0027\u0027:"},{"line_number":1552,"context_line":"            boot_roles_string \u003d boot_roles_string + substring"},{"line_number":1553,"context_line":"            i \u003d i + 1"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_198d2634","line":1550,"range":{"start_line":1550,"start_character":8,"end_line":1550,"end_character":17},"in_reply_to":"3fa7e38b_2158ee54","updated":"2020-01-10 16:00:07.000000000","message":"Done","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"117de886a27e1b0093feb05f04ce0aad17a1932a","unresolved":false,"context_lines":[{"line_number":1551,"context_line":"        if substring !\u003d \u0027\u0027:"},{"line_number":1552,"context_line":"            boot_roles_string \u003d boot_roles_string + substring"},{"line_number":1553,"context_line":"            i \u003d i + 1"},{"line_number":1554,"context_line":"        else:"},{"line_number":1555,"context_line":"            done \u003d True"},{"line_number":1556,"context_line":"    return boot_roles_string"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a14cde9c","line":1555,"range":{"start_line":1554,"start_character":0,"end_line":1555,"end_character":23},"updated":"2020-01-10 13:13:49.000000000","message":"nit: while True ... break","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"7a6c3b763b920711256ed26b7b833b4c9a7a30ab","unresolved":false,"context_lines":[{"line_number":1551,"context_line":"        if substring !\u003d \u0027\u0027:"},{"line_number":1552,"context_line":"            boot_roles_string \u003d boot_roles_string + substring"},{"line_number":1553,"context_line":"            i \u003d i + 1"},{"line_number":1554,"context_line":"        else:"},{"line_number":1555,"context_line":"            done \u003d True"},{"line_number":1556,"context_line":"    return boot_roles_string"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d9922e55","line":1555,"range":{"start_line":1554,"start_character":0,"end_line":1555,"end_character":23},"in_reply_to":"3fa7e38b_a14cde9c","updated":"2020-01-10 16:00:07.000000000","message":"Done","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"117de886a27e1b0093feb05f04ce0aad17a1932a","unresolved":false,"context_lines":[{"line_number":1556,"context_line":"    return boot_roles_string"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"def format_roles(role_list, string_limit\u003d255):"},{"line_number":1560,"context_line":"    \"\"\"Format the boot_roles into a dictionary"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"    If the given role_list translates to a string that is larger than the"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c100fa05","line":1559,"range":{"start_line":1559,"start_character":4,"end_line":1559,"end_character":16},"updated":"2020-01-10 13:13:49.000000000","message":"Probably, it\u0027s needed some limit of how many roles we can serialize in total.","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"7a6c3b763b920711256ed26b7b833b4c9a7a30ab","unresolved":false,"context_lines":[{"line_number":1556,"context_line":"    return boot_roles_string"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"def format_roles(role_list, string_limit\u003d255):"},{"line_number":1560,"context_line":"    \"\"\"Format the boot_roles into a dictionary"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"    If the given role_list translates to a string that is larger than the"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_99b836c7","line":1559,"range":{"start_line":1559,"start_character":4,"end_line":1559,"end_character":16},"in_reply_to":"3fa7e38b_c100fa05","updated":"2020-01-10 16:00:07.000000000","message":"In our (AT\u0026T, RBAC) case we have ~100 different roles per user. So anything among this line will work.\n\nYou suggest to disregard roles above some threshold? Do you have an idea in your mind about how big should this limit be, so it would work for everyone now and in the future?","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"145bdd422ef499dea43d5611d07fa0cbd564ced2","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        if roles !\u003d \u0027\u0027:"},{"line_number":1573,"context_line":"            boot_roles_string \u003d boot_roles_string + roles"},{"line_number":1574,"context_line":"            i \u003d i + 1"},{"line_number":1575,"context_line":"        else:"},{"line_number":1576,"context_line":"            break"},{"line_number":1577,"context_line":"    return boot_roles_string"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_21ec5927","line":1575,"range":{"start_line":1575,"start_character":8,"end_line":1575,"end_character":13},"updated":"2020-01-13 12:24:16.000000000","message":"nit: can avoid this else as well","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":1572,"context_line":"        if roles !\u003d \u0027\u0027:"},{"line_number":1573,"context_line":"            boot_roles_string \u003d boot_roles_string + roles"},{"line_number":1574,"context_line":"            i \u003d i + 1"},{"line_number":1575,"context_line":"        else:"},{"line_number":1576,"context_line":"            break"},{"line_number":1577,"context_line":"    return boot_roles_string"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_2743146e","line":1575,"range":{"start_line":1575,"start_character":8,"end_line":1575,"end_character":13},"in_reply_to":"3fa7e38b_21ec5927","updated":"2020-02-05 20:07:31.000000000","message":"Done","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6d37e10c6c54b5132d574e3ef445889fc7e98690","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"                key \u003d key + str(i)"},{"line_number":1614,"context_line":"            roles_dict[key] \u003d boot_roles[start:(start + string_limit)]"},{"line_number":1615,"context_line":"            start \u003d start + string_limit"},{"line_number":1616,"context_line":"    else:"},{"line_number":1617,"context_line":"        key \u003d key_basestring"},{"line_number":1618,"context_line":"        roles_dict[key] \u003d boot_roles"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    return roles_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_9e700d44","line":1618,"range":{"start_line":1616,"start_character":4,"end_line":1618,"end_character":36},"updated":"2020-01-13 07:40:58.000000000","message":"you needn\u0027t this \u0027else\u0027 branch, since at line 1608, you will get 1 segment.","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"                key \u003d key + str(i)"},{"line_number":1614,"context_line":"            roles_dict[key] \u003d boot_roles[start:(start + string_limit)]"},{"line_number":1615,"context_line":"            start \u003d start + string_limit"},{"line_number":1616,"context_line":"    else:"},{"line_number":1617,"context_line":"        key \u003d key_basestring"},{"line_number":1618,"context_line":"        roles_dict[key] \u003d boot_roles"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    return roles_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_67490c8c","line":1618,"range":{"start_line":1616,"start_character":4,"end_line":1618,"end_character":36},"in_reply_to":"3fa7e38b_61e25139","updated":"2020-02-05 20:07:31.000000000","message":"Done","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"                key \u003d key + str(i)"},{"line_number":1614,"context_line":"            roles_dict[key] \u003d boot_roles[start:(start + string_limit)]"},{"line_number":1615,"context_line":"            start \u003d start + string_limit"},{"line_number":1616,"context_line":"    else:"},{"line_number":1617,"context_line":"        key \u003d key_basestring"},{"line_number":1618,"context_line":"        roles_dict[key] \u003d boot_roles"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    return roles_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_47441077","line":1618,"range":{"start_line":1616,"start_character":4,"end_line":1618,"end_character":36},"in_reply_to":"3fa7e38b_9e700d44","updated":"2020-02-05 20:07:31.000000000","message":"Done","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"145bdd422ef499dea43d5611d07fa0cbd564ced2","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"                key \u003d key + str(i)"},{"line_number":1614,"context_line":"            roles_dict[key] \u003d boot_roles[start:(start + string_limit)]"},{"line_number":1615,"context_line":"            start \u003d start + string_limit"},{"line_number":1616,"context_line":"    else:"},{"line_number":1617,"context_line":"        key \u003d key_basestring"},{"line_number":1618,"context_line":"        roles_dict[key] \u003d boot_roles"},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"    return roles_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_61e25139","line":1618,"range":{"start_line":1616,"start_character":4,"end_line":1618,"end_character":36},"in_reply_to":"3fa7e38b_9e700d44","updated":"2020-01-13 12:24:16.000000000","message":"good point, +1 to remove if .. else","commit_id":"057d1763c219caea99a06a261e6a5634fe561bce"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2834205b18df34ec88fb89bb730417ea7949b00e","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"        boot_roles_string \u003d boot_roles_string + roles"},{"line_number":1572,"context_line":"        i \u003d i + 1"},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"    return boot_roles_string"},{"line_number":1575,"context_line":""},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"def format_roles(role_list, max_roles\u003dNone, string_limit\u003d255):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_2a0dbe3f","line":1574,"updated":"2020-02-05 20:13:39.000000000","message":"What if we just built this into the instance object when it is loading sysmeta? We already turn rows into a dict, why not also split and join those things maybe even in a generic manner we can apply to other sysmeta values that end up running long?","commit_id":"ce7797b789386ab5261b54550d0780344ec70795"}],"nova/conf/vendordata_dynamic.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"ad6acf4393ebb91ad9c17c79917cc95e4d08fe92","unresolved":false,"context_lines":[{"line_number":30,"context_line":"The maximum amount of roles to be saved in instance metadata."},{"line_number":31,"context_line":"\"\"\"),"},{"line_number":32,"context_line":"    cfg.IntOpt("},{"line_number":33,"context_line":"        \"boot_roles_string_limit\","},{"line_number":34,"context_line":"        default\u003d255,"},{"line_number":35,"context_line":"        help\u003d\"\"\""},{"line_number":36,"context_line":"The limit on total length of combined roles to be saved in a single"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_076b26ee","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":32},"updated":"2020-02-05 10:35:04.000000000","message":"Not sure this is required as a conf var.","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":30,"context_line":"The maximum amount of roles to be saved in instance metadata."},{"line_number":31,"context_line":"\"\"\"),"},{"line_number":32,"context_line":"    cfg.IntOpt("},{"line_number":33,"context_line":"        \"boot_roles_string_limit\","},{"line_number":34,"context_line":"        default\u003d255,"},{"line_number":35,"context_line":"        help\u003d\"\"\""},{"line_number":36,"context_line":"The limit on total length of combined roles to be saved in a single"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_3953dee0","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":32},"in_reply_to":"3fa7e38b_076b26ee","updated":"2020-02-05 20:07:31.000000000","message":"Done","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"ad6acf4393ebb91ad9c17c79917cc95e4d08fe92","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        default\u003d255,"},{"line_number":35,"context_line":"        help\u003d\"\"\""},{"line_number":36,"context_line":"The limit on total length of combined roles to be saved in a single"},{"line_number":37,"context_line":"database field."},{"line_number":38,"context_line":"\"\"\")"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_c7742ed0","line":37,"range":{"start_line":37,"start_character":9,"end_line":37,"end_character":14},"updated":"2020-02-05 10:35:04.000000000","message":"nit: row","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"ad6acf4393ebb91ad9c17c79917cc95e4d08fe92","unresolved":false,"context_lines":[{"line_number":8498,"context_line":""},{"line_number":8499,"context_line":"        self.stub_out(\u0027nova.compute.api.API._lookup_instance\u0027, fake_lookup)"},{"line_number":8500,"context_line":""},{"line_number":8501,"context_line":"        def fake_format_roles(*args, **kwargs):"},{"line_number":8502,"context_line":"            return {\"boot_roles\": \"\"}"},{"line_number":8503,"context_line":""},{"line_number":8504,"context_line":"        self.stub_out(\u0027nova.compute.utils.format_roles\u0027,"},{"line_number":8505,"context_line":"                      fake_format_roles)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_52b55aef","line":8502,"range":{"start_line":8501,"start_character":0,"end_line":8502,"end_character":37},"updated":"2020-02-05 10:35:04.000000000","message":"Not sure I understand why two fake_format_roles used.","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":8498,"context_line":""},{"line_number":8499,"context_line":"        self.stub_out(\u0027nova.compute.api.API._lookup_instance\u0027, fake_lookup)"},{"line_number":8500,"context_line":""},{"line_number":8501,"context_line":"        def fake_format_roles(*args, **kwargs):"},{"line_number":8502,"context_line":"            return {\"boot_roles\": \"\"}"},{"line_number":8503,"context_line":""},{"line_number":8504,"context_line":"        self.stub_out(\u0027nova.compute.utils.format_roles\u0027,"},{"line_number":8505,"context_line":"                      fake_format_roles)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_d9488a2c","line":8502,"range":{"start_line":8501,"start_character":0,"end_line":8502,"end_character":37},"in_reply_to":"3fa7e38b_52b55aef","updated":"2020-02-05 20:07:31.000000000","message":"Please clarify. Do you mean why do we have 2 different types of this mock? If yes reason is tests like:\n\nnova.tests.unit.compute.test_compute.ComputeAPITestCase.test_rebuild\n\nThat are actually care about what is returned within \"boot_roles\".","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"}],"nova/tests/unit/compute/test_compute_utils.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"117de886a27e1b0093feb05f04ce0aad17a1932a","unresolved":false,"context_lines":[{"line_number":1517,"context_line":"        role_list \u003d [\"role1\", \"role2\", \"role3\", \"role4\", \"role5\", \"role6\"]"},{"line_number":1518,"context_line":"        roles_dict \u003d compute_utils.format_roles(role_list, 15)"},{"line_number":1519,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles\u0027], \"role1,role2,rol\")"},{"line_number":1520,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles1\u0027], \"e3,role4,role5,\")"},{"line_number":1521,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles2\u0027], \"role6\")"},{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    def test_get_boot_roles_from_system_metadata(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_4c1be16d","line":1520,"range":{"start_line":1520,"start_character":52,"end_line":1520,"end_character":69},"updated":"2020-01-10 13:13:49.000000000","message":"nit: this may look unusual for a person looking something in DB","commit_id":"074cbf5e62c0c9003932bb657d5854f9e608b289"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"ad6acf4393ebb91ad9c17c79917cc95e4d08fe92","unresolved":false,"context_lines":[{"line_number":1535,"context_line":"        role_list \u003d [\"r7\", \"r8\", \"r9\", \"r10\", \"r11\"]"},{"line_number":1536,"context_line":"        roles_dict \u003d compute_utils.format_roles(role_list, 15, 100)"},{"line_number":1537,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles\u0027], \"r7,r8,r9,r10,r1\")"},{"line_number":1538,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles1\u0027], \"1\")"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        # Test that a larger role list can be put into the boot_roles"},{"line_number":1541,"context_line":"        # dictionary (split into multiple entries)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_0702460e","line":1538,"range":{"start_line":1538,"start_character":0,"end_line":1538,"end_character":56},"updated":"2020-02-05 10:35:04.000000000","message":"Maybe check no other boot_roles[i]?","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"},{"author":{"_account_id":16274,"name":"Mykola Yakovliev","email":"VegasQ@gmail.com","username":"vegasq"},"change_message_id":"ff84782c017566083ed537c205ce6d63346458cc","unresolved":false,"context_lines":[{"line_number":1535,"context_line":"        role_list \u003d [\"r7\", \"r8\", \"r9\", \"r10\", \"r11\"]"},{"line_number":1536,"context_line":"        roles_dict \u003d compute_utils.format_roles(role_list, 15, 100)"},{"line_number":1537,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles\u0027], \"r7,r8,r9,r10,r1\")"},{"line_number":1538,"context_line":"        self.assertEqual(roles_dict[\u0027boot_roles1\u0027], \"1\")"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        # Test that a larger role list can be put into the boot_roles"},{"line_number":1541,"context_line":"        # dictionary (split into multiple entries)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_b914aeeb","line":1538,"range":{"start_line":1538,"start_character":0,"end_line":1538,"end_character":56},"in_reply_to":"3fa7e38b_0702460e","updated":"2020-02-05 20:07:31.000000000","message":"Done","commit_id":"4091c07aed46ac4cbdfb19dcb3c61f92c9acb53a"}]}
