)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"fcb98f3d0c1008f10a1fa25851b0ac08c2c5964c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"dd869f83_c66d98c5","updated":"2024-08-02 06:47:25.000000000","message":"I\u0027m not sure it\u0027s good way to update the DB schema of the instance_system_metadata table without any IRC discussion first. But I\u0027d like to get feedbacks to the approach from code owner and reviewers of the boot_roles.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"5c6a6316e9e539a84a86a52b130b371cf87a4919","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"412067d4_d37330f1","updated":"2024-08-20 17:11:24.000000000","message":"Thanks, sean. I will push another commit to change the way to store role list as we talked in the mailing list.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"c07e7c51600b406a70860361ebf8c149625b08d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4ab7a0f7_20b5a893","updated":"2024-08-21 06:16:35.000000000","message":"Thank sean. Added the releasenote for this change.","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f168b2cbc657b58cf066e18f38eabbd5ed3215","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bb798349_dbcf92a2","updated":"2024-08-20 18:38:20.000000000","message":"if you respin a small release note might be nice if you think other operators would be interested in this fix.\n\ngiven there is no upgrade impact and nothing for them to configure however\nits not required.","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c13620dc89d0ec1f1ce43033792733e5df5060fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a4e910b4_d4e0b960","updated":"2024-08-21 14:46:05.000000000","message":"Maybe I\u0027m missing something, but this seems like an upgrade breakage, so -1 for visibility.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eb9c1d6dd49824417146529481f68b31f4bb3337","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"42409677_7036696a","updated":"2024-08-21 11:30:05.000000000","message":"this still looks good to me, thanks for the release note +2","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"1496a26f9abe0a0b1e76eca8a06fea622a10112a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5981c86b_b40e3c99","updated":"2024-12-13 03:12:36.000000000","message":"Thanks for the feedback.  I replied our deployment usecase, too.","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"85713820bb12f6972adb0c50422c2b141dcd4060","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1dc2aadf_47bcce8a","updated":"2024-11-15 02:42:56.000000000","message":"recheck","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"685a8cbc75725daedd0c62cba548cc8b0ab96f2a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"650b92f7_d65a19dd","updated":"2024-11-15 11:27:14.000000000","message":"the patch still dose not have an form of data might for old instance to update them to the new form. without that we would be stuck support both versions for ever.\n\nwe could do that but i kind fo feel like we shoudl be checking for the new form on load and adding the new values and saving it back. with that said you are trying to fix a specific bug,  in the current form any new instance that could be represented with the legacy way will be and it can move to the unpatched hosts.\n\nany instance that could not be supported on the unpatched hosts will still not have boot roles available but will on the patched nodes.\n\nthe patched nodes will be able to read both form so this  will only be a factor while mixing patched and unpatched nodes in the same cluster.\n\nim wondering how others feel about that?\n\nthis change should be backportable to all stabel branches which can mitigate that impact but i dont see a way to support instances with a large number of boot roles on unpachted nodes.","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"1496a26f9abe0a0b1e76eca8a06fea622a10112a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b3ef5536_853216e9","in_reply_to":"650b92f7_d65a19dd","updated":"2024-12-13 03:12:36.000000000","message":"Backport to the stable branch works fine in our deployment case when we run the rolling upgrade. The following scenario is acceptable because applying backport patch is easy to deploy.\n\n1. Update old version nova code in all HV\n2. Run rolling upgrade to all HV one by one","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"dc5cb83969b42f9ed7e6ce958d3b1fdac3aa962a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"411576e5_d3f90e33","updated":"2024-12-16 01:42:26.000000000","message":"recheck","commit_id":"05b4f903e8272d7bd5d7d38ba0a4dd3dcd11add3"}],"nova/api/metadata/vendordata_dynamic.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f168b2cbc657b58cf066e18f38eabbd5ed3215","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    def get_boot_roles(self, system_metadata):"},{"line_number":68,"context_line":"        role_count \u003d system_metadata.get(\u0027boot_roles_count\u0027, None)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if role_count:"},{"line_number":71,"context_line":"            roles \u003d [system_metadata[\"boot_role_%s\" % i]"},{"line_number":72,"context_line":"                     for i in range(int(role_count))]"},{"line_number":73,"context_line":"            boot_roles \u003d \u0027,\u0027.join(roles)"}],"source_content_type":"text/x-python","patch_set":3,"id":"41db6f42_a999d160","line":70,"updated":"2024-08-20 18:38:20.000000000","message":"super nit: \n```suggestion\n        boot_roles \u003d \u0027\u0027\n        if role_count is not None:\n```\n\nwe are not ment to use equality to compare agaisnt None but it will work as intended in this specific case hence a nit not a -1\n\nno need to repin for this but if you respin for something else feel free to adress this too.\n\ni also do not like to initalise variables only in branches of ifs\n\nso we genrally od this more like c and predeclare the vaiable.\n\nwe have been burnt in mor complex ifs before where a variable was only not set in one of 4 branches.\n\nagain in this case its safe but if we added an elif it might now be so still just a nit.","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"c07e7c51600b406a70860361ebf8c149625b08d8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def get_boot_roles(self, system_metadata):"},{"line_number":68,"context_line":"        role_count \u003d system_metadata.get(\u0027boot_roles_count\u0027, None)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if role_count:"},{"line_number":71,"context_line":"            roles \u003d [system_metadata[\"boot_role_%s\" % i]"},{"line_number":72,"context_line":"                     for i in range(int(role_count))]"},{"line_number":73,"context_line":"            boot_roles \u003d \u0027,\u0027.join(roles)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ed4f395e_05bc34c2","line":70,"in_reply_to":"41db6f42_a999d160","updated":"2024-08-21 06:16:35.000000000","message":"Done. I added a releasenote so applied the suggetion.","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c13620dc89d0ec1f1ce43033792733e5df5060fa","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        self.session \u003d None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_boot_roles(self, system_metadata):"},{"line_number":68,"context_line":"        role_count \u003d system_metadata.get(\u0027boot_roles_count\u0027, None)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        boot_roles \u003d \u0027\u0027"},{"line_number":71,"context_line":"        if role_count is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"79493824_68318f04","line":68,"updated":"2024-08-21 14:46:05.000000000","message":"This seems unnecessary to me. Why not just process all `system_metadata` keys and grab those that start with `startswith(\u0027boot_role\u0027)`? That will also grab the original one, and you can split on `\u0027,\u0027` explicitly, which will work for both.\n\nI just hate to see us basically encode two incompatible conventions in the `system_metadata` that may live forever and require this handling for the same amount of time.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3f8b7083a903d7fba7ad173c8aa428a24a20d8fd","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        self.session \u003d None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_boot_roles(self, system_metadata):"},{"line_number":68,"context_line":"        role_count \u003d system_metadata.get(\u0027boot_roles_count\u0027, None)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        boot_roles \u003d \u0027\u0027"},{"line_number":71,"context_line":"        if role_count is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a063f10_9aa217d8","line":68,"in_reply_to":"79493824_68318f04","updated":"2024-08-21 15:57:34.000000000","message":"i guess we could but my orginal tought on the count was as a way to detect if we had moved to the new way of doing it and convert old instnace on the fly going going forward.\n\nthat convertion is not in the current code.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d705fd5ced667387e375f2012af0d61d415a8b2d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.session \u003d None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_boot_roles(self, system_metadata):"},{"line_number":68,"context_line":"        role_count \u003d system_metadata.get(\u0027boot_roles_count\u0027, None)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        boot_roles \u003d \u0027\u0027"},{"line_number":71,"context_line":"        if role_count is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"c0929686_6652b976","line":68,"in_reply_to":"9a063f10_9aa217d8","updated":"2024-09-17 15:30:16.000000000","message":"Done","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d28b71d8caf7651fbcc8748380bc7f3cb05da64a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"e3e95f7c_ce8f944f","line":92,"updated":"2024-08-21 12:06:14.000000000","message":"for others, this is the only place in the code base where the boot_roles are ever read.\n\nso im fine with get_boot_roles being defiend here instead of as a property on the instance. the system_metadata is a fields.DictOfNullableStringsField(), so it cant be a property on the system_metadata\n\nwe can always move get_boot_roles to be a property on the instance in the future if we ever have another usecase for it.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3f8b7083a903d7fba7ad173c8aa428a24a20d8fd","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5d179b97_ca5578d1","line":92,"in_reply_to":"4692421f_3dec25bc","updated":"2024-08-21 15:57:34.000000000","message":"hum i guess the upgade issue is not form here where we are readign the data as the get_boot_role falls back.\n\nits form where we are storing the info in the db","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"9a924eaa59fdc36929c5d164c1d53ad48ff69ea7","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"aaf5cf58_9eb6a0f2","line":92,"in_reply_to":"5d179b97_ca5578d1","updated":"2024-08-22 07:07:04.000000000","message":"Let me double check this conversation topic. This is a comment to introduce a new property, named \"boot-roles\", into the objects.instance.Instance object, isn\u0027t it?","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"44af509dbc2ba6bf67dcf1750b035a8c578b5127","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"e28cb7b4_0b3e05d5","line":92,"in_reply_to":"aaf5cf58_9eb6a0f2","updated":"2024-08-22 13:11:12.000000000","message":"the issue dan is highlighting is you are not settign the old one.\n\nso if the vm is booted on a patched node and you move it to an unpatched node then it will not be able to lookup the boot roles because the old code only looks for boot_roles.\n\n\nwhile we reuire the contoler services are updated before the compute we do not require operators to upgrade all computes at once so we need to supprot a mix of nodes with this patch and with out it.\n\nand since it is common to live migrate workloads and do a rolling upgrade we need to ensure that instnace created on patch nodes work on unpatched nodes\n\nhttps://review.opendev.org/c/openstack/nova/+/925163/4/nova/compute/manager.py is how we can enable that.\n\nwe need to check the lenght and add the old key if it will fit.\n\nthat will allow unpatched host to read the boot roles from vms created on patched hosts.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d705fd5ced667387e375f2012af0d61d415a8b2d","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"f2a80614_74bab76d","line":92,"in_reply_to":"e28cb7b4_0b3e05d5","updated":"2024-09-17 15:30:16.000000000","message":"Thank you for the details. I updated the manager code to handle the old node case. Please check it.","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c13620dc89d0ec1f1ce43033792733e5df5060fa","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":90,"context_line":"                    \u0027boot-roles\u0027: self.get_boot_roles("},{"line_number":91,"context_line":"                        self.instance.system_metadata)"},{"line_number":92,"context_line":"                    }"},{"line_number":93,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":94,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":95,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"4692421f_3dec25bc","line":92,"in_reply_to":"e3e95f7c_ce8f944f","updated":"2024-08-21 14:46:05.000000000","message":"How is this not an upgrade/compatibility concern? If I boot on a new compute node, migrate to an old one, then this will be wrong right?","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"}],"nova/compute/manager.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f168b2cbc657b58cf066e18f38eabbd5ed3215","unresolved":true,"context_lines":[{"line_number":2583,"context_line":""},{"line_number":2584,"context_line":"        # NOTE(mikal): cache the keystone roles associated with the instance"},{"line_number":2585,"context_line":"        # at boot time for later reference"},{"line_number":2586,"context_line":"        if len(CONF.api.vendordata_dynamic_targets) \u003e 0:"},{"line_number":2587,"context_line":"            boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2588,"context_line":"                          for i in range(len(context.roles))}"},{"line_number":2589,"context_line":"            boot_roles[\u0027boot_roles_count\u0027] \u003d len(context.roles)"}],"source_content_type":"text/x-python","patch_set":3,"id":"92b3fb64_cd0a15fe","line":2586,"updated":"2024-08-20 18:38:20.000000000","message":"+1\nwhile this if is technically not required\nthis data is only used if dynamic vendor data is enabled and\nIt is almost never used\n\nso in practice, we can stop storing this and reduce the size of the table for 99% of deployments.","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"c07e7c51600b406a70860361ebf8c149625b08d8","unresolved":false,"context_lines":[{"line_number":2583,"context_line":""},{"line_number":2584,"context_line":"        # NOTE(mikal): cache the keystone roles associated with the instance"},{"line_number":2585,"context_line":"        # at boot time for later reference"},{"line_number":2586,"context_line":"        if len(CONF.api.vendordata_dynamic_targets) \u003e 0:"},{"line_number":2587,"context_line":"            boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2588,"context_line":"                          for i in range(len(context.roles))}"},{"line_number":2589,"context_line":"            boot_roles[\u0027boot_roles_count\u0027] \u003d len(context.roles)"}],"source_content_type":"text/x-python","patch_set":3,"id":"27b0d7d3_903553f9","line":2586,"in_reply_to":"92b3fb64_cd0a15fe","updated":"2024-08-21 06:16:35.000000000","message":"Done","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3f8b7083a903d7fba7ad173c8aa428a24a20d8fd","unresolved":true,"context_lines":[{"line_number":2587,"context_line":"            boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2588,"context_line":"                          for i in range(len(context.roles))}"},{"line_number":2589,"context_line":"            boot_roles[\u0027boot_roles_count\u0027] \u003d len(context.roles)"},{"line_number":2590,"context_line":"            instance.system_metadata.update(boot_roles)"},{"line_number":2591,"context_line":""},{"line_number":2592,"context_line":"        self._check_device_tagging(requested_networks, block_device_mapping)"},{"line_number":2593,"context_line":"        self._check_trusted_certs(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f2463506_ed8414c3","line":2590,"updated":"2024-08-21 15:57:34.000000000","message":"so the upgrade issue for an instance booted on a new host and migrated to an old host is from here\n\n\nso what we can do to fix that is  check the follwoing\n```\nlegacy_boot_roles  \u003d \u0027,\u0027.join(context.roles))\nif len(legacy_boot_roles) \u003c 255:\n  boot_roles[\u0027boot_roles\u0027] \u003d legacy_boot_roles\n  \n```","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d705fd5ced667387e375f2012af0d61d415a8b2d","unresolved":false,"context_lines":[{"line_number":2587,"context_line":"            boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2588,"context_line":"                          for i in range(len(context.roles))}"},{"line_number":2589,"context_line":"            boot_roles[\u0027boot_roles_count\u0027] \u003d len(context.roles)"},{"line_number":2590,"context_line":"            instance.system_metadata.update(boot_roles)"},{"line_number":2591,"context_line":""},{"line_number":2592,"context_line":"        self._check_device_tagging(requested_networks, block_device_mapping)"},{"line_number":2593,"context_line":"        self._check_trusted_certs(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f85fc3c_230f9fe0","line":2590,"in_reply_to":"f2463506_ed8414c3","updated":"2024-09-17 15:30:16.000000000","message":"Done","commit_id":"5f0e7ca933fd081acf13163350dcab1f73eb03c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"685a8cbc75725daedd0c62cba548cc8b0ab96f2a","unresolved":true,"context_lines":[{"line_number":2585,"context_line":"        # at boot time for later reference"},{"line_number":2586,"context_line":"        if len(CONF.api.vendordata_dynamic_targets) \u003e 0:"},{"line_number":2587,"context_line":"            legacy_boot_roles \u003d \u0027,\u0027.join(context.roles)"},{"line_number":2588,"context_line":"            if len(legacy_boot_roles) \u003c 255:"},{"line_number":2589,"context_line":"                boot_roles \u003d {\u0027boot_roles\u0027: legacy_boot_roles}"},{"line_number":2590,"context_line":"            else:"},{"line_number":2591,"context_line":"                boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2592,"context_line":"                              for i in range(len(context.roles))}"},{"line_number":2593,"context_line":"            instance.system_metadata.update(boot_roles)"},{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"        self._check_device_tagging(requested_networks, block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d0d3dcde_f1bddb1d","line":2592,"range":{"start_line":2588,"start_character":10,"end_line":2592,"end_character":65},"updated":"2024-11-15 11:27:14.000000000","message":"this should work but we may want to move toward always setting it in the new form\n\n```suggestion\n            boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]\n                          for i in range(len(context.roles))}\n            if len(legacy_boot_roles) \u003c 255:\n                boot_roles[\u0027boot_roles\u0027] \u003d legacy_boot_roles\n```","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"1496a26f9abe0a0b1e76eca8a06fea622a10112a","unresolved":false,"context_lines":[{"line_number":2585,"context_line":"        # at boot time for later reference"},{"line_number":2586,"context_line":"        if len(CONF.api.vendordata_dynamic_targets) \u003e 0:"},{"line_number":2587,"context_line":"            legacy_boot_roles \u003d \u0027,\u0027.join(context.roles)"},{"line_number":2588,"context_line":"            if len(legacy_boot_roles) \u003c 255:"},{"line_number":2589,"context_line":"                boot_roles \u003d {\u0027boot_roles\u0027: legacy_boot_roles}"},{"line_number":2590,"context_line":"            else:"},{"line_number":2591,"context_line":"                boot_roles \u003d {\u0027boot_role_%s\u0027 % i: context.roles[i]"},{"line_number":2592,"context_line":"                              for i in range(len(context.roles))}"},{"line_number":2593,"context_line":"            instance.system_metadata.update(boot_roles)"},{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"        self._check_device_tagging(requested_networks, block_device_mapping)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ce0b2e2_384bdc95","line":2592,"range":{"start_line":2588,"start_character":10,"end_line":2592,"end_character":65},"in_reply_to":"d0d3dcde_f1bddb1d","updated":"2024-12-13 03:12:36.000000000","message":"Done","commit_id":"07aedc88f04fcea72d2c2e07ce14055dc2e00a91"}],"nova/db/main/migrations/versions/10262320e2ad_change_system_metadata_to_text.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7850637338cf9ddb37125abafce018712a3b29a0","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                \u0027value\u0027,"},{"line_number":37,"context_line":"                existing_type\u003dsa.String(255),"},{"line_number":38,"context_line":"                type_\u003dsa.Text()"},{"line_number":39,"context_line":"            )"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce3ca1f1_0e6d01d2","line":39,"updated":"2024-08-13 09:48:13.000000000","message":"-1 this is a very expensive data migration as it woudl move teh data to be store as indivgual files on disk.\n\nthis is not somethign we shoudl do lightly.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"b395e934ca42d82c1cd4fbc8cb96e0dc6622c15d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                \u0027value\u0027,"},{"line_number":37,"context_line":"                existing_type\u003dsa.String(255),"},{"line_number":38,"context_line":"                type_\u003dsa.Text()"},{"line_number":39,"context_line":"            )"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":2,"id":"a55f9f44_64087046","line":39,"in_reply_to":"2d196037_28da629c","updated":"2024-08-20 17:13:05.000000000","message":"Done","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"5c6a6316e9e539a84a86a52b130b371cf87a4919","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                \u0027value\u0027,"},{"line_number":37,"context_line":"                existing_type\u003dsa.String(255),"},{"line_number":38,"context_line":"                type_\u003dsa.Text()"},{"line_number":39,"context_line":"            )"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def downgrade():"}],"source_content_type":"text/x-python","patch_set":2,"id":"2d196037_28da629c","line":39,"in_reply_to":"ce3ca1f1_0e6d01d2","updated":"2024-08-20 17:11:24.000000000","message":"Thank you. I will change the way to use system_metadata to store the role information instead of changing table definition.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7850637338cf9ddb37125abafce018712a3b29a0","unresolved":true,"context_lines":[{"line_number":47,"context_line":"                \u0027value\u0027,"},{"line_number":48,"context_line":"                existing_type\u003dsa.Text(),"},{"line_number":49,"context_line":"                type_\u003dsa.String(255)"},{"line_number":50,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":2,"id":"bc5d72f4_43662478","line":50,"updated":"2024-08-13 09:48:13.000000000","message":"we dont actully supprot downgrades in nova so this is technially not needed.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"5c6a6316e9e539a84a86a52b130b371cf87a4919","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                \u0027value\u0027,"},{"line_number":48,"context_line":"                existing_type\u003dsa.Text(),"},{"line_number":49,"context_line":"                type_\u003dsa.String(255)"},{"line_number":50,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fac0019_16d6a0f3","line":50,"in_reply_to":"bc5d72f4_43662478","updated":"2024-08-20 17:11:24.000000000","message":"Got it.","commit_id":"47ba27bdca458937da2b9576257201652bfeff5d"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f168b2cbc657b58cf066e18f38eabbd5ed3215","unresolved":false,"context_lines":[{"line_number":9075,"context_line":"                    \u0027image_something_else\u0027: \u0027meow\u0027,"},{"line_number":9076,"context_line":"                    \u0027preserved\u0027: \u0027preserve this!\u0027,"},{"line_number":9077,"context_line":"                    \u0027image_base_image_ref\u0027: image_ref,"},{"line_number":9078,"context_line":"                    \u0027boot_roles\u0027: \u0027\u0027"},{"line_number":9079,"context_line":"                },"},{"line_number":9080,"context_line":"                sys_meta"},{"line_number":9081,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":3,"id":"b810b61b_448d1259","side":"PARENT","line":9078,"updated":"2024-08-20 18:38:20.000000000","message":"ack this is becasue we do not emulsate enabling dynmic vendor data in this test","commit_id":"5b91e78308abdf4ca35f7d9ee936a20bd66e9521"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42f168b2cbc657b58cf066e18f38eabbd5ed3215","unresolved":false,"context_lines":[{"line_number":8919,"context_line":"    def test_build_and_run_instance_with_boot_role_list(self,"},{"line_number":8920,"context_line":"            mock_instance_update, mock_notify_instance_create, mock_claim):"},{"line_number":8921,"context_line":"        self.flags(vendordata_dynamic_targets\u003d[\u0027test@http://127.0.0.1:123\u0027],"},{"line_number":8922,"context_line":"                   group\u003d\u0027api\u0027)"},{"line_number":8923,"context_line":"        self.context.roles \u003d [\u0027role1\u0027, \u0027role2\u0027]"},{"line_number":8924,"context_line":"        with test.nested("},{"line_number":8925,"context_line":"                mock.patch.object(self.compute,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c2001b27_92d530f1","line":8922,"updated":"2024-08-20 18:38:20.000000000","message":"+1 and you have added test coverage for this edge case explicitly","commit_id":"62ddd7e949f28984446643f789ed40d32193999d"}]}
