)]}'
{"nova/api/openstack/wsgi_app.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f5f8423c56fc59dbe586d3494db3788fa26eebf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # fail here."},{"line_number":63,"context_line":"            pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    utils.warn_about_old_compute()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def error_application(exc, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_79810ac3","line":65,"updated":"2020-06-29 17:23:16.000000000","message":"I\u0027m not sure what is the good place put such check in the nova-api service.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b3e837ee907dd773bb405cd2dd9bbe8a61572ac","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # fail here."},{"line_number":63,"context_line":"            pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    utils.warn_about_old_compute()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def error_application(exc, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_1235f2da","line":65,"in_reply_to":"bf51134e_45bb5b0d","updated":"2020-07-06 15:12:11.000000000","message":"@Alex: _update_service_ref called not only for the api service but for every service including compute as well. Also there is an _update_service_ref and an _create_service_ref codepath\n\n@Melanie: Done.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0498164394dcd83edb12e4e15096a7c1de8a6a2c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # fail here."},{"line_number":63,"context_line":"            pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    utils.warn_about_old_compute()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def error_application(exc, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_ca3f8585","line":65,"in_reply_to":"bf51134e_622947f1","updated":"2020-06-30 19:43:42.000000000","message":"I was thinking we probably also should add the check in the case that someone is running the old-style eventlet wsgi service?\n\nhttps://github.com/openstack/nova/blob/d4c857dfcb1ccfa5410de55671e69c722bbc990e/nova/service.py#L407","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"123b086e319c5d47b893470d1f385c1d2c2bfee7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # fail here."},{"line_number":63,"context_line":"            pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    utils.warn_about_old_compute()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def error_application(exc, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_622947f1","line":65,"in_reply_to":"bf51134e_79810ac3","updated":"2020-06-30 13:46:27.000000000","message":"I don\u0027t really think there is a good place, but this seems fine I would think.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"26559e50e0b6508aaf1aac929ccbf1e90064ebc4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            # fail here."},{"line_number":63,"context_line":"            pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    utils.warn_about_old_compute()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def error_application(exc, name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_45bb5b0d","line":65,"in_reply_to":"bf51134e_ca3f8585","updated":"2020-07-01 13:44:51.000000000","message":"Or do this inside _update_service_ref, then all the service have this check.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"}],"nova/conductor/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7f5f8423c56fc59dbe586d3494db3788fa26eebf","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.warn_about_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_f91fdab3","line":124,"updated":"2020-06-29 17:23:16.000000000","message":"This blows if run in a cell conductor.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"123b086e319c5d47b893470d1f385c1d2c2bfee7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.warn_about_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_02d68bf2","line":124,"in_reply_to":"bf51134e_f91fdab3","updated":"2020-06-30 13:46:27.000000000","message":"Because it tries to look up the cells from a place where it has no API database, right?\n\nIn that case, you just want to check the current cell. On option is to check if api_db.connection is None, and if so, run the single-cell version.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1654442c5bed9c655be33078efed05f43623df3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.raise_if_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_cc3d9d2d","line":124,"updated":"2020-07-06 17:28:08.000000000","message":"Do we need this if we\u0027re raising in service?","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"647ad34ab847c4fc07c2058e0871a99ac3c4441e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.raise_if_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_003868d0","line":124,"in_reply_to":"bf51134e_7dbc9adb","updated":"2020-08-26 16:10:47.000000000","message":"Done","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c247c6482af2036256634207fcf9d425b10d54e3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.raise_if_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_7dbc9adb","line":124,"in_reply_to":"bf51134e_b952d765","updated":"2020-07-13 10:55:40.000000000","message":"I thought aborting API and conductor already prevents using the deployment which has too old computes. Aborting computes makes the recovery a bit more work (e.g. restarting all the aborted computes) but I guess every proper deployment has some automation in place. \n\nI will create an abort-very-service PS...","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ee24aff9327d39dbf561810ba676dadc875dd43f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.raise_if_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_f36f4e25","line":124,"in_reply_to":"bf51134e_cc3d9d2d","updated":"2020-07-10 14:10:55.000000000","message":"We raising in WSGIService[1] currently. I can put the check to the nova.service.Service.start() too but that would run for compute services as well. \n\nSo I\u0027m ended up only adding the check to:\n* WSGIService [1]\n* the code path that runs for the old eventlet based API server [2]\n* and here to prevent conductor service to stat up.\n\n[1] https://review.opendev.org/#/c/738482/4/nova/service.py@325\n[2] https://review.opendev.org/#/c/738482/4/nova/api/openstack/wsgi_app.py@91","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a8ce4a4ecb2b7e28b8a1b878602aea78e6108816","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.compute_task_mgr \u003d ComputeTaskManager()"},{"line_number":122,"context_line":"        self.additional_endpoints.append(self.compute_task_mgr)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        utils.raise_if_old_compute()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    # NOTE(hanlind): This can be removed in version 4.0 of the RPC API"},{"line_number":127,"context_line":"    def provider_fw_rule_get_all(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_b952d765","line":124,"in_reply_to":"bf51134e_f36f4e25","updated":"2020-07-10 15:33:45.000000000","message":"Ah, I hadn\u0027t expanded out enough and thought this was in the base. So, I was expecting you were doing this for all services, including compute.\n\nJust to be clear, you want to not abort things like scheduler, metadata, console, etc? I had assumed you were making everything do this. Maybe it\u0027s better to be targeted, I dunno. It definitely makes the \"oh crap, stuff isn\u0027t starting because of a rogue old compute somewhere\" situation less impactful, but in terms of the things we\u0027re trying to protect, it doesn\u0027t really reach full coverage. What are your thoughts here?","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"}],"nova/objects/service.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cae74ee2c8d5af7323be239c0aa6789ce0c0cf7e","unresolved":false,"context_lines":[{"line_number":193,"context_line":"OLDEST_SUPPORTED_SERVICE_VERSION \u003d \u0027ussuri\u0027"},{"line_number":194,"context_line":"SERVICE_VERSION_ALIASES \u003d {"},{"line_number":195,"context_line":"    \u0027ussuri\u0027: 51,"},{"line_number":196,"context_line":"}"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_859e13b6","line":196,"updated":"2020-07-01 13:41:40.000000000","message":"Emm...this is another burden we have to update this every release. How about a variable for the number of releases to upgrade, it should be \u00271\u0027. Then you can check the \u0027service version\u0027 - \u0027minimum service version\u0027 \u003d\u003d \u0027the number of releases to upgrade\u0027","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"86753dda9f22447d0b48c65acac8f1b4bda856dd","unresolved":false,"context_lines":[{"line_number":193,"context_line":"OLDEST_SUPPORTED_SERVICE_VERSION \u003d \u0027ussuri\u0027"},{"line_number":194,"context_line":"SERVICE_VERSION_ALIASES \u003d {"},{"line_number":195,"context_line":"    \u0027ussuri\u0027: 51,"},{"line_number":196,"context_line":"}"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_e558affb","line":196,"in_reply_to":"bf51134e_859e13b6","updated":"2020-07-01 13:47:35.000000000","message":"We bump service_version more often than once per release, so I don\u0027t see how this can be automated.\n\nThis really doesn\u0027t seem overly burdensome to me, FWIW.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7743b799fe6a2ceeaf7ff966683744272b805c77","unresolved":false,"context_lines":[{"line_number":194,"context_line":"# cycle"},{"line_number":195,"context_line":"OLDEST_SUPPORTED_SERVICE_VERSION \u003d \u0027Ussuri\u0027"},{"line_number":196,"context_line":"SERVICE_VERSION_ALIASES \u003d {"},{"line_number":197,"context_line":"    \u0027Ussuri\u0027: 51,"},{"line_number":198,"context_line":"}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f621f24_3121494f","line":197,"updated":"2020-10-29 13:51:22.000000000","message":"Update this to Victoria","commit_id":"63eb81634c41e345890269aa57d911c902ee026d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"92327244b95ef58988e76ac534e07b43c90ff32e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"# cycle"},{"line_number":195,"context_line":"OLDEST_SUPPORTED_SERVICE_VERSION \u003d \u0027Ussuri\u0027"},{"line_number":196,"context_line":"SERVICE_VERSION_ALIASES \u003d {"},{"line_number":197,"context_line":"    \u0027Ussuri\u0027: 51,"},{"line_number":198,"context_line":"}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f621f24_4669a023","line":197,"in_reply_to":"1f621f24_3121494f","updated":"2020-11-04 13:18:51.000000000","message":"Done","commit_id":"63eb81634c41e345890269aa57d911c902ee026d"}],"nova/service.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1654442c5bed9c655be33078efed05f43623df3","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        # outside of oslo.db."},{"line_number":428,"context_line":"        context.CELL_CACHE \u003d {}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        utils.raise_if_old_compute()"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":433,"context_line":"        service_ref \u003d objects.Service.get_by_host_and_binary(ctxt, self.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_2c2d39fd","line":430,"updated":"2020-07-06 17:28:08.000000000","message":"Thinking about this fresh this week, I\u0027m a teensy bit worried that this might be a tad aggressive for anyone doing a rolling upgrade where they have some ancient compute that is still checking in but is effectively not able to participate. Like, some compute node that has been nearly walled off with some yet-to-exit workload running on it. With this abort (which I agree with on principle) they\u0027ll have to stop it or seal it off and then wait a minute for the aging of the timer before they can start anything new.\n\nThat said, I think that\u0027s what we\u0027re going for here, so let\u0027s forge ahead and \"fix it in post\" if someone complains.","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3de2671252fe66a764bc742917fbeff8c62eeeca","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        # outside of oslo.db."},{"line_number":428,"context_line":"        context.CELL_CACHE \u003d {}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        utils.raise_if_old_compute()"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":433,"context_line":"        service_ref \u003d objects.Service.get_by_host_and_binary(ctxt, self.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_f2f793d3","line":430,"in_reply_to":"bf51134e_2c2d39fd","updated":"2020-07-06 22:12:13.000000000","message":"I have a similar concern. I\u0027m thinking about scenarios where someone is running multiple cells and has disabled one or more cells with too old computes in it, or has disabled compute nodes that are too old ... And imagining them unable to run the cluster at all in this state from now on.\n\nI think at the least it might be good to have a reno for this because of the change in behavior?\n\nI\u0027m also curious, was there a bug report or specific incident that inspired this change (re: no Related-Bug in the commit message)? I ask because I think this change might be noticeable, particularly for multi-cell users and I wasn\u0027t sure what brought it about.\n\nPreviously, we have had a ServiceTooOld exception that is raised in particular cases where a service is too old, but we did not (for some reason) seek to block the deployment from running because of it.\n\nTo be clear, I\u0027m not expressing opposition to this change, just trying to think about it more.","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe44777adab89f1e243494485c47359507eb0dd5","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        # outside of oslo.db."},{"line_number":428,"context_line":"        context.CELL_CACHE \u003d {}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        utils.raise_if_old_compute()"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":433,"context_line":"        service_ref \u003d objects.Service.get_by_host_and_binary(ctxt, self.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_a4df790a","line":430,"in_reply_to":"bf51134e_c4e8ad17","updated":"2020-07-08 14:33:39.000000000","message":"\u003e Thanks for the feedback. I appreciate it. Let\u0027s see the scenarios:\n \u003e \n \u003e * There is an old compute (\u003c N-1) that cannot fully participate in\n \u003e RPC any more but the basic things might still work. E.g. status\n \u003e reporting, server create/delete. If this is what is only needed for\n \u003e that deployment then by the current patch we basically break that\n \u003e working deployment.\n \u003e \n \u003e * There is an old and disabled compute in the system. As it is\n \u003e disable we don\u0027t expect that it is used from the controller. If\n \u003e this is a valid use case to keep old computes disable in the\n \u003e system, then we break that use case by this patch. Alternatively we\n \u003e could come up with a rule that only count enabled computes in\n \u003e startup service level check.\n \u003e \n \u003e It feels like this is a policy question.\n \u003e \n \u003e Does nova have a hard policy to only support N -\u003e N + 1 upgrade?\n\nIt has to have that policy right now, and I agree that this enforces that and should.\n\n \u003e If yes, then this patch simply enforces such policy, and by that\n \u003e allows us to freely delete a bunch of compatibility code earlier.\n \u003e \n \u003e If no, then we might need to agree what could be an enforceable\n \u003e policy. Delete compatibility code at N + 2 only? Then I would\n \u003e propose this same change with an abort at N - 2 compute service\n \u003e level. So that I can remove the compatibility code an N + 2 safely.\n \u003e \n \u003e Or alternatively we can keep saying that the policy is that nova\n \u003e only supports N -\u003e N + 1 upgrades, but we do not enforce it but\n \u003e instead we enforce a less strict N - 2 service level check.\n\nI would much rather be strict about it. We only test N-1, we only expect that to work, and we already do things in places where we way \"I added that last cycle so I\u0027m good to depend on it\". The service version checks are mostly used for in-version upgrades so we know when we can enable something that we added in a single release, but need to wait for everything to be upgraded.\n\nI\u0027m for strict enforcement, definitely. I just wanted to note that it was a strict check, and it might catch someone off guard when they realize (likely unintentionally) that some un-upgraded compute is still on the network somewhere causing them problems.\n\nAnyway, please continue with this, I was just making a point earlier. The only reason I didn\u0027t +2 was the question in the other file, which I haven\u0027t seen an answer to.","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2330ac6c8dbe9c20319f8b5422e00d2b534cc272","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        # outside of oslo.db."},{"line_number":428,"context_line":"        context.CELL_CACHE \u003d {}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        utils.raise_if_old_compute()"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":433,"context_line":"        service_ref \u003d objects.Service.get_by_host_and_binary(ctxt, self.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_c4e8ad17","line":430,"in_reply_to":"bf51134e_f23dd32c","updated":"2020-07-08 14:15:24.000000000","message":"Thanks for the feedback. I appreciate it. Let\u0027s see the scenarios:\n\n* There is an old compute (\u003c N-1) that cannot fully participate in RPC any more but the basic things might still work. E.g. status reporting, server create/delete. If this is what is only needed for that deployment then by the current patch we basically break that working deployment.\n\n* There is an old and disabled compute in the system. As it is disable we don\u0027t expect that it is used from the controller. If this is a valid use case to keep old computes disable in the system, then we break that use case by this patch. Alternatively we could come up with a rule that only count enabled computes in startup service level check.\n\nIt feels like this is a policy question. \n\nDoes nova have a hard policy to only support N -\u003e N + 1 upgrade? \n\nIf yes, then this patch simply enforces such policy, and by that allows us to freely delete a bunch of compatibility code earlier. \n\nIf no, then we might need to agree what could be an enforceable policy. Delete compatibility code at N + 2 only? Then I would propose this same change with an abort at N - 2 compute service level. So that I can remove the compatibility code an N + 2 safely.\n\nOr alternatively we can keep saying that the policy is that nova only supports N -\u003e N + 1 upgrades, but we do not enforce it but instead we enforce a less strict N - 2 service level check.","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8e1843498eddc802778ff9b405701b59aaf0e29c","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        # outside of oslo.db."},{"line_number":428,"context_line":"        context.CELL_CACHE \u003d {}"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        utils.raise_if_old_compute()"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":433,"context_line":"        service_ref \u003d objects.Service.get_by_host_and_binary(ctxt, self.host,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_f23dd32c","line":430,"in_reply_to":"bf51134e_f2f793d3","updated":"2020-07-06 22:21:36.000000000","message":"Just a note, I\u0027m the one that suggested that we take this enforcement up a notch. I think I recommended a warning, although I think warnings do go unnoticed at times. I think if we\u0027re going to remove stuff that depends on service version one cycle after we release it, that we need to reeeealy stick to our guns about N-to-N+1-only upgrades and enforcement in code helps with that.\n\nSo, I\u0027m not opposed to the failure, and I think we *should* abort like this, I just wanted to note that it came to mind.","commit_id":"3e00fc74148866d443565b4d13a62c7a9ecc61e4"}],"nova/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b3e837ee907dd773bb405cd2dd9bbe8a61572ac","unresolved":false,"context_lines":[{"line_number":56,"context_line":"from nova.i18n import _"},{"line_number":57,"context_line":"from nova import safe_utils"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"profiler \u003d importutils.try_import(\u0027osprofiler.profiler\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_126332de","line":59,"updated":"2020-07-06 15:12:11.000000000","message":"unnecessary","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"123b086e319c5d47b893470d1f385c1d2c2bfee7","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":1158,"context_line":"    if current_service_version \u003c service.SERVICE_VERSION_ALIASES["},{"line_number":1159,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION]:"},{"line_number":1160,"context_line":"        LOG.warn("},{"line_number":1161,"context_line":"            \"Current Nova version does not support computes older than %s \""},{"line_number":1162,"context_line":"            \"but the minimum compute service level in your system is %d.\","},{"line_number":1163,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION, current_service_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_a2335f62","line":1160,"range":{"start_line":1160,"start_character":12,"end_line":1160,"end_character":16},"updated":"2020-06-30 13:46:27.000000000","message":"I was originally thinking we\u0027d explode and stop the service from starting. Do you think that\u0027s too extreme? I can imagine this warning getting lost in the *flood* of crap we log at startup and thus go unnoticed.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c01153f290f0b488018564090b9203f71cb6b713","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":1158,"context_line":"    if current_service_version \u003c service.SERVICE_VERSION_ALIASES["},{"line_number":1159,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION]:"},{"line_number":1160,"context_line":"        LOG.warn("},{"line_number":1161,"context_line":"            \"Current Nova version does not support computes older than %s \""},{"line_number":1162,"context_line":"            \"but the minimum compute service level in your system is %d.\","},{"line_number":1163,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION, current_service_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_147ed3e2","line":1160,"updated":"2020-06-29 18:44:21.000000000","message":"pep8: N352: LOG.warn is deprecated, please use LOG.warning!","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cae74ee2c8d5af7323be239c0aa6789ce0c0cf7e","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":1158,"context_line":"    if current_service_version \u003c service.SERVICE_VERSION_ALIASES["},{"line_number":1159,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION]:"},{"line_number":1160,"context_line":"        LOG.warn("},{"line_number":1161,"context_line":"            \"Current Nova version does not support computes older than %s \""},{"line_number":1162,"context_line":"            \"but the minimum compute service level in your system is %d.\","},{"line_number":1163,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION, current_service_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_e520af9e","line":1160,"range":{"start_line":1160,"start_character":12,"end_line":1160,"end_character":16},"in_reply_to":"bf51134e_a2335f62","updated":"2020-07-01 13:41:40.000000000","message":"+1 for stop the service","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4b3e837ee907dd773bb405cd2dd9bbe8a61572ac","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        nova_context.get_admin_context(), [\u0027nova-compute\u0027])"},{"line_number":1158,"context_line":"    if current_service_version \u003c service.SERVICE_VERSION_ALIASES["},{"line_number":1159,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION]:"},{"line_number":1160,"context_line":"        LOG.warn("},{"line_number":1161,"context_line":"            \"Current Nova version does not support computes older than %s \""},{"line_number":1162,"context_line":"            \"but the minimum compute service level in your system is %d.\","},{"line_number":1163,"context_line":"            service.OLDEST_SUPPORTED_SERVICE_VERSION, current_service_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_329d96bb","line":1160,"range":{"start_line":1160,"start_character":12,"end_line":1160,"end_character":16},"in_reply_to":"bf51134e_e520af9e","updated":"2020-07-06 15:12:11.000000000","message":"OK, lets kill the service. Done.","commit_id":"52ebec58efce1f4e50d10c3ba29d314ddaa80f15"}]}
