)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5cc44a3b5348b1af982b3f38e83d5bb8bc01a9dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4884ceec_9148c8f0","updated":"2025-09-05 09:56:32.000000000","message":"I have couple of thing inline. But the direction looks good to me.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b65797a14287d2a95f4e9a00cdcdb9b20983e111","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8c4aa359_8d08fdb9","updated":"2025-09-05 16:49:39.000000000","message":"The original fix for this is closer to how I want this to work. I\u0027m disappointed we abandoned that work in exchange for this one that came hours later due to arguments about who thought of it first.","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"deb7fd84c34ca193aa082052c71585ee629b843c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7b25cd65_ed04a787","in_reply_to":"8c4aa359_8d08fdb9","updated":"2025-09-06 02:14:13.000000000","message":"that is not what happend\n\ni could not give a crap about who tought of it first.\ni never asked sylvian to abandon there and was just going to rebase my patch on theres to include the extra testing and loging mine had.\n\nthe abanonded ters before i event had the change to say that on irc.\n\nmy problem was that my time was wasted because i droped everyting to work on somethign that was ment to not be a prioryity to fix until after RC1 was shipped because it apprently became a priortiy. and even those i had said i would work on it another another efforrt was done. the first time i found out that sylvain was even thinking of fixing it themsleve was 4 hours after i said i was working on it when thy pushed a path and mentioned it on irc.\n\nas i said i dont care about who wrote the code. i care that i said i would fix it now and also said \"work on it this/next week\" i.e. im going to set asside to work on any review feedback or follow up work and after all of that the first time sylvain said they were actully going to work when they push an incomplete patch.\n\nwhen i looked at the other patch it did not have working unit test ro the fallback to call the the rpc when the data was not in the stats, both of which i alreay had implemnted in my version before i saw that sylvain had even created another patch.\n\ni was runnign the unit and functional tests locally and tracing the code flow which is why it took me longer to push my v1. if i skiped that i had the functional change done hours before i was just verifying it was correct before pushing.\n\nso please dont try to frame this as being abotu ownership fo the code or who had the idea. that is not the case at all at least form my side i never said i cared about that i said i was annoyed that my time was wasted and sylvain and you both assumed it was about the code. im pretty hurt by the fact you think i would be that petty about cdoe authorship or that that was actully what the argument was about.","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"79d9f56979424bbc08cdc31b3277fe84dbd5f7ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"91249d33_6efafb77","updated":"2025-09-09 05:56:12.000000000","message":"LGTM now.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa2a0e363c3b242ddf2884d8dfa40ccb107059aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"993863c7_422fe349","updated":"2025-09-09 17:07:52.000000000","message":"My comments were fixed. The patch looks good to me.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ffbf3f27f60921a4e566c4b00a41980af598a6a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"eee0dff4_95a28864","updated":"2025-09-10 07:27:02.000000000","message":"recheck grenade failed Details: {\u0027type\u0027: \u0027PortNotFound\u0027, \u0027message\u0027: \u0027Port c2cda14a-b0cc-42cb-a09f-af9637c27d92 could not be found.\u0027, \u0027detail\u0027: \u0027\u0027}","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"68b7a407_4f0ce75b","updated":"2025-09-08 13:30:54.000000000","message":"thanks for having worked hard on that one.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":true,"context_lines":[{"line_number":3903,"context_line":"hypervisor_uptime:"},{"line_number":3904,"context_line":"  description: |"},{"line_number":3905,"context_line":"    The response format of this api depends on the virt driver in use on a"},{"line_number":3906,"context_line":"    given host. The libvirt driver returns the output of the `uptime` command"},{"line_number":3907,"context_line":"    directly, the z/VM driver returns the `ILP` time. All other drivers"},{"line_number":3908,"context_line":"    always return `null`. Note this value is cached and updated periodically."},{"line_number":3909,"context_line":""},{"line_number":3910,"context_line":"  in: body"},{"line_number":3911,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"073df624_fcaff542","line":3908,"range":{"start_line":3906,"start_character":16,"end_line":3908,"end_character":24},"updated":"2025-09-08 13:30:54.000000000","message":"I\u0027m afraid one could know which hypervisor that compute node runs but given the default policy is admin-only, we can reasonably expose that information (and we\u0027re actually already exposing it, we\u0027re just documenting what we expose)","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63266441dac182d82b9ecf2b1d39c53251b943e9","unresolved":true,"context_lines":[{"line_number":3903,"context_line":"hypervisor_uptime:"},{"line_number":3904,"context_line":"  description: |"},{"line_number":3905,"context_line":"    The response format of this api depends on the virt driver in use on a"},{"line_number":3906,"context_line":"    given host. The libvirt driver returns the output of the `uptime` command"},{"line_number":3907,"context_line":"    directly, the z/VM driver returns the `ILP` time. All other drivers"},{"line_number":3908,"context_line":"    always return `null`. Note this value is cached and updated periodically."},{"line_number":3909,"context_line":""},{"line_number":3910,"context_line":"  in: body"},{"line_number":3911,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"f8ed4445_47c10da8","line":3908,"range":{"start_line":3906,"start_character":16,"end_line":3908,"end_character":24},"in_reply_to":"073df624_fcaff542","updated":"2025-09-08 13:55:38.000000000","message":"well we have the hypervisor type string as well in the same api response.\nso while we do not state winch virt driver is in use we do say the hypervior type is zvm or qemu\n\nyou have to knwo that hypervior_type\u003dqemu actully make to the libvirt virt driver but as an admin you will be aware of this in general.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":true,"context_lines":[{"line_number":3906,"context_line":"    given host. The libvirt driver returns the output of the `uptime` command"},{"line_number":3907,"context_line":"    directly, the z/VM driver returns the `ILP` time. All other drivers"},{"line_number":3908,"context_line":"    always return `null`. Note this value is cached and updated periodically."},{"line_number":3909,"context_line":""},{"line_number":3910,"context_line":"  in: body"},{"line_number":3911,"context_line":"  required: true"},{"line_number":3912,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"761fb53d_4ec20539","line":3909,"updated":"2025-09-08 13:30:54.000000000","message":"nit: extra line","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63266441dac182d82b9ecf2b1d39c53251b943e9","unresolved":true,"context_lines":[{"line_number":3906,"context_line":"    given host. The libvirt driver returns the output of the `uptime` command"},{"line_number":3907,"context_line":"    directly, the z/VM driver returns the `ILP` time. All other drivers"},{"line_number":3908,"context_line":"    always return `null`. Note this value is cached and updated periodically."},{"line_number":3909,"context_line":""},{"line_number":3910,"context_line":"  in: body"},{"line_number":3911,"context_line":"  required: true"},{"line_number":3912,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"18555313_cd7c1b71","line":3909,"in_reply_to":"761fb53d_4ec20539","updated":"2025-09-08 13:55:38.000000000","message":"ack. il correct this if asked to respin","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"nova/api/openstack/compute/hypervisors.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5cc44a3b5348b1af982b3f38e83d5bb8bc01a9dd","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":50,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _view_hypervisor("},{"line_number":53,"context_line":"        self, hypervisor, service, detail, req, servers\u003dNone,"},{"line_number":54,"context_line":"        with_servers\u003dFalse,"},{"line_number":55,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc2ea03d_778522ad","line":52,"updated":"2025-09-05 09:56:32.000000000","message":"ahh so both listing hypervisors and showing a single hypervisor goes through this call (probably this was related to the situation that the uptime RPC was executed in any case). I\u0027m fine fixing it for all the APIs. We could have kept the RPC for a single hypervisor show but we don\u0027t have to.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9752905cf8c3f31c83c8576f813e2275f02a74ae","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":50,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _view_hypervisor("},{"line_number":53,"context_line":"        self, hypervisor, service, detail, req, servers\u003dNone,"},{"line_number":54,"context_line":"        with_servers\u003dFalse,"},{"line_number":55,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7931046e_47c9210a","line":52,"in_reply_to":"99591bda_81cd0881","updated":"2025-09-05 18:07:17.000000000","message":"Acknowledged","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        self.host_api \u003d compute.HostAPI()"},{"line_number":50,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _view_hypervisor("},{"line_number":53,"context_line":"        self, hypervisor, service, detail, req, servers\u003dNone,"},{"line_number":54,"context_line":"        with_servers\u003dFalse,"},{"line_number":55,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":1,"id":"99591bda_81cd0881","line":52,"in_reply_to":"fc2ea03d_778522ad","updated":"2025-09-05 11:28:51.000000000","message":"thats fair\n\ni could uplevel it and take do_prc as a parmater but i think i would prefer to keep both consistent and avoid the rpc in that case as well.\n\nthe ksipign for ironic/vmware on show is still a nice performance impromvent even in the single host case beasue we know they do not implemnt the function and will return NotImplemetedError","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"1e1668df77ace71f6aa463938f315eec945ccd86","unresolved":true,"context_lines":[{"line_number":100,"context_line":"            uptime \u003d None"},{"line_number":101,"context_line":"            support_uptime \u003d o_fields.HVType.LIBVIRT_TYPES + \\"},{"line_number":102,"context_line":"                (o_fields.HVType.ZVM,)"},{"line_number":103,"context_line":"            if \"stats\" in hypervisor and \"uptime\" in hypervisor.stats:"},{"line_number":104,"context_line":"                uptime \u003d hypervisor.stats.get(\"uptime\")"},{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"}],"source_content_type":"text/x-python","patch_set":1,"id":"4eb9b8e5_403c43fa","line":103,"updated":"2025-09-05 08:07:19.000000000","message":"Does the `hypervisor` also work like a dict? Other code here uses `getattr()`.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":100,"context_line":"            uptime \u003d None"},{"line_number":101,"context_line":"            support_uptime \u003d o_fields.HVType.LIBVIRT_TYPES + \\"},{"line_number":102,"context_line":"                (o_fields.HVType.ZVM,)"},{"line_number":103,"context_line":"            if \"stats\" in hypervisor and \"uptime\" in hypervisor.stats:"},{"line_number":104,"context_line":"                uptime \u003d hypervisor.stats.get(\"uptime\")"},{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"}],"source_content_type":"text/x-python","patch_set":1,"id":"ea31e8fc_5d914b02","line":103,"in_reply_to":"4eb9b8e5_403c43fa","updated":"2025-09-05 11:28:51.000000000","message":"no it does not but it is a compute node object. and nova object inherit form oslo.versioned obejct which implement __contains__\n\nthis is the canonical way to test ifa feild is set in an ovo.\n\nyou can use hasattr but that is less prefered. internally __contains__ is doing that.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            uptime \u003d None"},{"line_number":101,"context_line":"            support_uptime \u003d o_fields.HVType.LIBVIRT_TYPES + \\"},{"line_number":102,"context_line":"                (o_fields.HVType.ZVM,)"},{"line_number":103,"context_line":"            if \"stats\" in hypervisor and \"uptime\" in hypervisor.stats:"},{"line_number":104,"context_line":"                uptime \u003d hypervisor.stats.get(\"uptime\")"},{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"}],"source_content_type":"text/x-python","patch_set":1,"id":"6b463ff5_05d64a04","line":103,"in_reply_to":"ea31e8fc_5d914b02","updated":"2025-09-05 16:35:05.000000000","message":"by the way as a general rule we try to avoid raw getattr, hasattr and setattr in nova and openstack in general\n\nthere are case where we are forced to use them but it make static analysis harder and it often more error prone.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5cc44a3b5348b1af982b3f38e83d5bb8bc01a9dd","unresolved":true,"context_lines":[{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            if uptime is None and hypervisor.hypervisor_type in support_uptime:"},{"line_number":109,"context_line":"                try:"},{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c7cb0f75_ef3a7f17","line":108,"updated":"2025-09-05 09:56:32.000000000","message":"I think we missing test coverage for the hypervisor API where the request is 2.88 and uptime is used from the stats and RPC is not called.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            if uptime is None and hypervisor.hypervisor_type in support_uptime:"},{"line_number":109,"context_line":"                try:"},{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ea44c3b0_984d8295","line":108,"in_reply_to":"c7cb0f75_ef3a7f17","updated":"2025-09-05 11:28:51.000000000","message":"yep i can add some additional explicit test cases i just fixed the failing ones yesterday to get some initial feedback\nalso this can be anb elif instead of an if i forgot to make that change before i pushed.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            if uptime is None and hypervisor.hypervisor_type in support_uptime:"},{"line_number":109,"context_line":"                try:"},{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"502e195c_2d44ed61","line":108,"in_reply_to":"ea44c3b0_984d8295","updated":"2025-09-05 16:35:05.000000000","message":"Done","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"1e1668df77ace71f6aa463938f315eec945ccd86","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ddab66c_4b8f63e8","line":113,"updated":"2025-09-05 08:07:19.000000000","message":"Do we still want to catch `NotImplemetedError` when we already have an allow-list of hypervisor types?","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"7dc75fc219c859bf78bcd02d3ac2d614414e7f9c","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e2c8933_fade2c48","line":113,"range":{"start_line":113,"start_character":24,"end_line":113,"end_character":43},"updated":"2025-09-05 07:53:32.000000000","message":"I think, we won\u0027t raise NotImplementedError ever, because of checking supported hypervisor condition (hypverisor.hypervisor_type in support_uptime) which return true only if it is supported.\n\nDo you wanted it to be (hypervisor.hypervisor_type not in support_uptime) ?","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ad3dab9_fe5d87ab","line":113,"in_reply_to":"5ddab66c_4b8f63e8","updated":"2025-09-05 11:28:51.000000000","message":"technically no i didn\u0027t want to remove it just in case.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9752905cf8c3f31c83c8576f813e2275f02a74ae","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c57e89e_d8bf9bc6","line":113,"in_reply_to":"6ad3dab9_fe5d87ab","updated":"2025-09-05 18:07:17.000000000","message":"now that we are not filtering on virt driver this si requried again druing upgrade in v3+","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"b8a8d5ef_94b6d526","line":113,"range":{"start_line":113,"start_character":24,"end_line":113,"end_character":43},"in_reply_to":"7e2c8933_fade2c48","updated":"2025-09-05 11:28:51.000000000","message":"no as i said above i didnt remove it incase i missed something.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":111,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"},{"line_number":112,"context_line":"                except ("},{"line_number":113,"context_line":"                        NotImplementedError,"},{"line_number":114,"context_line":"                        exception.ComputeServiceUnavailable,"},{"line_number":115,"context_line":"                        exception.HostMappingNotFound,"},{"line_number":116,"context_line":"                        exception.HostNotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"282df92c_d81e8bb6","line":113,"range":{"start_line":113,"start_character":24,"end_line":113,"end_character":43},"in_reply_to":"b8a8d5ef_94b6d526","updated":"2025-09-05 16:35:05.000000000","message":"Acknowledged","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b65797a14287d2a95f4e9a00cdcdb9b20983e111","unresolved":true,"context_lines":[{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            elif (uptime is None and"},{"line_number":109,"context_line":"                  hypervisor.hypervisor_type in support_uptime):"},{"line_number":110,"context_line":"                try:"},{"line_number":111,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":112,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c67ea83_63f55e4b","line":109,"updated":"2025-09-05 16:49:39.000000000","message":"This is not the logic I want. I want it to make the RPC call if the key is not in the dict (which implies that the compute is not new enough to be sending this information), otherwise never. You know, the way the original fix for this issue does it, per the review that happened before this was posted:\n\nhttps://review.opendev.org/c/openstack/nova/+/959571/3/nova/api/openstack/compute/hypervisors.py\n\nThe RT should always put it in there even if the driver does not, and it would be easier to just do that in `update_available_resource()` with the result of the driver\u0027s uptime call instead of making each driver fill out the `stats[\u0027uptime\u0027]` field.","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eb10e63a928fdd2021411fb027ccf458e1f1c627","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            elif (uptime is None and"},{"line_number":109,"context_line":"                  hypervisor.hypervisor_type in support_uptime):"},{"line_number":110,"context_line":"                try:"},{"line_number":111,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":112,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9b60987f_d25437b8","line":109,"in_reply_to":"0e2f39bf_c52537e5","updated":"2025-09-05 17:56:06.000000000","message":"Done","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63321ce6855952bc85e5850935689d1b1d6fe561","unresolved":true,"context_lines":[{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            elif (uptime is None and"},{"line_number":109,"context_line":"                  hypervisor.hypervisor_type in support_uptime):"},{"line_number":110,"context_line":"                try:"},{"line_number":111,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":112,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ddde0068_a6515f05","line":109,"in_reply_to":"8c67ea83_63f55e4b","updated":"2025-09-05 17:01:29.000000000","message":"so that will not fix it for VMware or ironic or other driver unless we change them also so it does not actually address the slow down in those cases.\n\nif you want to change the meaning of uptime to being the uptime of the host for the compute service instead of the uptime of the hypervisor we could.\n\nfor libvirt it would be the seam but not for VMware or ironic or any other remotely managed compute node.\n\nthat is why i objected to doing it in the resource tracker or compute manager originally.\n\nif other agree that we shoudl change the meaning of the API then im find with doing that but that is less backward compatible and will change the output for other drivers.","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"409dbafdbcc64280b1f0754f744b525e72975039","unresolved":true,"context_lines":[{"line_number":106,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":107,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":108,"context_line":"            elif (uptime is None and"},{"line_number":109,"context_line":"                  hypervisor.hypervisor_type in support_uptime):"},{"line_number":110,"context_line":"                try:"},{"line_number":111,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":112,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"0e2f39bf_c52537e5","line":109,"in_reply_to":"ddde0068_a6515f05","updated":"2025-09-05 17:03:52.000000000","message":"i see you men this comment \n\nhttps://review.opendev.org/c/openstack/nova/+/959571/comment/e17a47b5_529e84ed/\n\nyou wnat to defautl to None in the resouce tracker.\n\ni can do that.","commit_id":"6c9d1c6bbcfa73a508b9aca5503f8ebbd0bf53dd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eb10e63a928fdd2021411fb027ccf458e1f1c627","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":103,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":104,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":105,"context_line":"            elif uptime is None:"},{"line_number":106,"context_line":"                try:"},{"line_number":107,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":108,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"97e03aeb_2549bdaa","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":16},"updated":"2025-09-05 17:56:06.000000000","message":"nit this coudl not just be an else i guess.","commit_id":"42825c30b4d648c0f1b5a435da2381abc4351786"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2924e3e38455650acc45f9146996a53360383189","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            # This RPC is only implemented by the libvirt and ZVM virt drivers"},{"line_number":103,"context_line":"            # everything else will return NotImplementedError so there is no"},{"line_number":104,"context_line":"            # point in taking the performance hit if it will always fail."},{"line_number":105,"context_line":"            elif uptime is None:"},{"line_number":106,"context_line":"                try:"},{"line_number":107,"context_line":"                    uptime \u003d self.host_api.get_host_uptime("},{"line_number":108,"context_line":"                        req.environ[\u0027nova.context\u0027], hypervisor.host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b85f2769_188444fb","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":16},"in_reply_to":"97e03aeb_2549bdaa","updated":"2025-09-05 18:00:50.000000000","message":"Done","commit_id":"42825c30b4d648c0f1b5a435da2381abc4351786"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"                   \u0027used_vcpus\u0027: ucpu,"},{"line_number":1185,"context_line":"                   \u0027pci_stats\u0027: pci_stats,"},{"line_number":1186,"context_line":"                   \u0027stats\u0027: cn.stats or {}"},{"line_number":1187,"context_line":"                   })"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def _resource_change(self, compute_node):"},{"line_number":1190,"context_line":"        \"\"\"Check to see if any resources have changed.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"291ebe20_1a89d4e5","line":1187,"updated":"2025-09-08 13:30:54.000000000","message":"great catch to add that in the logs.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"nova/compute/stats.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            # setdefault will update the dict if and only if"},{"line_number":43,"context_line":"            # uptime is not set then return the value."},{"line_number":44,"context_line":"            # since we dont need it we just discard the result"},{"line_number":45,"context_line":"            stats.setdefault(\u0027uptime\u0027, None)"},{"line_number":46,"context_line":"            self.update(stats)"},{"line_number":47,"context_line":"            return"},{"line_number":48,"context_line":"        raise ValueError(_(\u0027Unexpected type adding stats\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ae9e56e6_501657db","line":45,"updated":"2025-09-08 13:30:54.000000000","message":"right, that makes it default to all virt drivers rather than being silently pushed only by a few drivers","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63266441dac182d82b9ecf2b1d39c53251b943e9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            # setdefault will update the dict if and only if"},{"line_number":43,"context_line":"            # uptime is not set then return the value."},{"line_number":44,"context_line":"            # since we dont need it we just discard the result"},{"line_number":45,"context_line":"            stats.setdefault(\u0027uptime\u0027, None)"},{"line_number":46,"context_line":"            self.update(stats)"},{"line_number":47,"context_line":"            return"},{"line_number":48,"context_line":"        raise ValueError(_(\u0027Unexpected type adding stats\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"508de7e8_2901ed63","line":45,"in_reply_to":"ae9e56e6_501657db","updated":"2025-09-08 13:55:38.000000000","message":"right i originally didn\u0027t want to do that as i didn\u0027t want to send invalid data\nbut im OK with dans suggestion to send None as the sentential.\n\nit marginally increase the db and rpc payload size but not enough that it shoudl really affect things even for deployment with 10,000s fo compute nodes like like ironic.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"nova/objects/fields.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a39600494cfd5ecac7c87554041fcf2a4398200d","unresolved":true,"context_lines":[{"line_number":422,"context_line":"    # we actually report qemu for kvm but we will include it for completeness."},{"line_number":423,"context_line":"    LIBVIRT_TYPES \u003d ("},{"line_number":424,"context_line":"        QEMU, KVM, LXC, UML, OPENVZ, PARALLELS, VIRTUOZZO,"},{"line_number":425,"context_line":"    )"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def coerce(self, obj, attr, value):"},{"line_number":428,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fbdde8e_5c0b6ad5","line":425,"updated":"2025-09-05 18:02:22.000000000","message":"this is also not needed any more so ill clean that up too","commit_id":"1f676b175e2b617127fe7411c5d19232817c77ef"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"80a795933afe4f5412777ab1a796370338cabf75","unresolved":false,"context_lines":[{"line_number":422,"context_line":"    # we actually report qemu for kvm but we will include it for completeness."},{"line_number":423,"context_line":"    LIBVIRT_TYPES \u003d ("},{"line_number":424,"context_line":"        QEMU, KVM, LXC, UML, OPENVZ, PARALLELS, VIRTUOZZO,"},{"line_number":425,"context_line":"    )"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def coerce(self, obj, attr, value):"},{"line_number":428,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"80475ca4_5fbac5c9","line":425,"in_reply_to":"3fbdde8e_5c0b6ad5","updated":"2025-09-05 18:04:36.000000000","message":"Done","commit_id":"1f676b175e2b617127fe7411c5d19232817c77ef"}],"nova/tests/unit/api/openstack/compute/test_hypervisors.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    # uptime for v2.88+ tests which expect it"},{"line_number":209,"context_line":"    for hyper_dict in DETAIL_HYPERS_DICTS:"},{"line_number":210,"context_line":"        if \u0027stats\u0027 in hyper_dict:"},{"line_number":211,"context_line":"            del hyper_dict[\u0027stats\u0027]"},{"line_number":212,"context_line":"    DETAIL_HYPERS_DICTS[0].update({\u0027state\u0027: \u0027up\u0027,"},{"line_number":213,"context_line":"                           \u0027status\u0027: \u0027enabled\u0027,"},{"line_number":214,"context_line":"                           \u0027service\u0027: dict(id\u003d1, host\u003d\u0027compute1\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"02769850_823d8d97","line":211,"updated":"2025-09-08 13:30:54.000000000","message":"yeah, that\u0027s unfortunate to write such conditional, but given we directly return the mock object to the fake API, we need to wipe it out","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63266441dac182d82b9ecf2b1d39c53251b943e9","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    # uptime for v2.88+ tests which expect it"},{"line_number":209,"context_line":"    for hyper_dict in DETAIL_HYPERS_DICTS:"},{"line_number":210,"context_line":"        if \u0027stats\u0027 in hyper_dict:"},{"line_number":211,"context_line":"            del hyper_dict[\u0027stats\u0027]"},{"line_number":212,"context_line":"    DETAIL_HYPERS_DICTS[0].update({\u0027state\u0027: \u0027up\u0027,"},{"line_number":213,"context_line":"                           \u0027status\u0027: \u0027enabled\u0027,"},{"line_number":214,"context_line":"                           \u0027service\u0027: dict(id\u003d1, host\u003d\u0027compute1\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"57f53a83_9a99e170","line":211,"in_reply_to":"02769850_823d8d97","updated":"2025-09-08 13:55:38.000000000","message":"ya avoiding this would require refactoring the tests a lot more then i think is wise if we want to backport this and minimise conflcits.\n\nwe are using TEST_HYPERS both to emulate the hypervior data form teh db and the api responce\n\nits also used via an indrection though TEST_HYPERS_OBJ in fake_compute_node_statistics\n\nhttps://review.opendev.org/c/openstack/nova/+/959604/5/nova/tests/unit/api/openstack/compute/test_hypervisors.py#154\n\ni tried unwinding that orgianlly and i didnt like how much change it requried in teh test so i was happy to follow your solution here.\n\nthanks for the recommendion to do it this way.\ni had spent 2 hour trying other solutions and was getting no where fast.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[{"line_number":22996,"context_line":""},{"line_number":22997,"context_line":"        drvr \u003d HostStateTestCase.FakeConnection()"},{"line_number":22998,"context_line":""},{"line_number":22999,"context_line":"        res \u003d drvr.get_available_resource(\"compute1\")"},{"line_number":23000,"context_line":"        self.assertEqual(res[\"vcpus\"], 1)"},{"line_number":23001,"context_line":"        self.assertEqual(res[\"memory_mb\"], 497)"},{"line_number":23002,"context_line":"        self.assertEqual(res[\"local_gb\"], 100)"}],"source_content_type":"text/x-python","patch_set":5,"id":"e6dc4eb8_1a922fbe","line":22999,"range":{"start_line":22999,"start_character":8,"end_line":22999,"end_character":11},"updated":"2025-09-08 13:30:54.000000000","message":"this was unnecessary change, leading to all of modifications in the subsequent lines but OK, let\u0027s not nitpick on that one.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"63266441dac182d82b9ecf2b1d39c53251b943e9","unresolved":false,"context_lines":[{"line_number":22996,"context_line":""},{"line_number":22997,"context_line":"        drvr \u003d HostStateTestCase.FakeConnection()"},{"line_number":22998,"context_line":""},{"line_number":22999,"context_line":"        res \u003d drvr.get_available_resource(\"compute1\")"},{"line_number":23000,"context_line":"        self.assertEqual(res[\"vcpus\"], 1)"},{"line_number":23001,"context_line":"        self.assertEqual(res[\"memory_mb\"], 497)"},{"line_number":23002,"context_line":"        self.assertEqual(res[\"local_gb\"], 100)"}],"source_content_type":"text/x-python","patch_set":5,"id":"52be27fb_53617d08","line":22999,"range":{"start_line":22999,"start_character":8,"end_line":22999,"end_character":11},"in_reply_to":"e6dc4eb8_1a922fbe","updated":"2025-09-08 13:55:38.000000000","message":"i cnaged it to reflect that get_available_resource\n\nreturns a resouce dict not stats as stats is a subfiled in teh returnd dict\nbut your correct\n\ni could have done stats[\u0027stats\u0027]\ni feel like this  was eaiser to read but yes that is why the other lines are modifed indeed.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3f21b2c93df4c1c33bc30bd839373926030916a5","unresolved":false,"context_lines":[{"line_number":23023,"context_line":"        self.assertEqual(objects.NUMATopology.obj_from_db_obj("},{"line_number":23024,"context_line":"                            res[\u0027numa_topology\u0027]),"},{"line_number":23025,"context_line":"                         HostStateTestCase.numa_topology)"},{"line_number":23026,"context_line":"        self.assertEqual(res[\u0027stats\u0027][\u0027uptime\u0027], drvr.get_host_uptime())"},{"line_number":23027,"context_line":""},{"line_number":23028,"context_line":""},{"line_number":23029,"context_line":"class TestUpdateProviderTree(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"570ca6a6_208ce98f","line":23026,"updated":"2025-09-08 13:30:54.000000000","message":"note to reviewers : this is the only extra coverage we do.","commit_id":"567dbe1867602d544945b3584c3885ac146b6535"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"473a03c00439e2d3b425598886911d1edc3e45bd","unresolved":true,"context_lines":[{"line_number":10376,"context_line":"        else:"},{"line_number":10377,"context_line":"            data[\u0027numa_topology\u0027] \u003d None"},{"line_number":10378,"context_line":""},{"line_number":10379,"context_line":"        data[\u0027stats\u0027] \u003d {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":10380,"context_line":"        return data"},{"line_number":10381,"context_line":""},{"line_number":10382,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b55d5cee_132cadc9","line":10379,"updated":"2025-09-05 05:09:00.000000000","message":"these stats should be stored in the compute node object here\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L849-L850\nhttps://github.com/openstack/nova/blob/master/nova/compute/stats.py#L40\n\nbut i need to confirm if they are later updated and if i need to modify\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/compute_node.py#L387\nor elsewhere.\ni dont think i do since it should be called form here\nhttps://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L1008\n\ni think i want to add them to the final resouce view perodic debug log\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L1168-L1185\n\nand i need to deploy this in my local devstack and actully test this end to end to confirm that the uptime actully change over time in the db and it works as expected in the api.\n\nthis is all a bit more indirect then i would noremlally like\nsince its relying on \n\nhttps://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L757C8-L769C48\n```\n # if there is already a compute node just use resources\n        # to initialize\n        if nodename in self.compute_nodes:\n            cn \u003d self.compute_nodes[nodename]\n            if \u0027service_id\u0027 not in cn or cn.service_id is None:\n                LOG.debug(\u0027Setting ComputeNode %s service_id to %i\u0027,\n                          cn.uuid, self.service_ref.id)\n                cn.service_id \u003d self.service_ref.id\n            elif cn.service_id !\u003d self.service_ref.id:\n                LOG.warning(\u0027Moving ComputeNode %s from service %i to %i\u0027,\n                            cn.uuid, cn.service_id, self.service_ref.id)\n                cn.service_id \u003d self.service_ref.id\n            self._copy_resources(cn, resources)\n```            \n            \nto call _copy_resources on each iterations which modifes the compute node object whic then gets picked up here\nhttps://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L1060\n\nbefore being saved back here via _update\n\nhttps://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L1096\nhttps://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L1402-L1435\n\n\nso this should all work but the uptime get to the db by the driver adding it to the resouce returned to the reosuce tracker which modifes but does not save the stats into its in memory compute node object which gets persited laer by the compute manger form the perodic task.\n\nthat flow is fine but relying on mutatin to propagate becuase\n\ncn \u003d self.compute_nodes[nodename] returns a refonec to the cn object that\nself._copy_resources(cn, resources) mutates in place was a litlle surprising.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":10376,"context_line":"        else:"},{"line_number":10377,"context_line":"            data[\u0027numa_topology\u0027] \u003d None"},{"line_number":10378,"context_line":""},{"line_number":10379,"context_line":"        data[\u0027stats\u0027] \u003d {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":10380,"context_line":"        return data"},{"line_number":10381,"context_line":""},{"line_number":10382,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"82070299_1a3ea5db","line":10379,"in_reply_to":"5c8cfd24_e40aa642","updated":"2025-09-05 16:35:05.000000000","message":"Done","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"1e1668df77ace71f6aa463938f315eec945ccd86","unresolved":true,"context_lines":[{"line_number":10376,"context_line":"        else:"},{"line_number":10377,"context_line":"            data[\u0027numa_topology\u0027] \u003d None"},{"line_number":10378,"context_line":""},{"line_number":10379,"context_line":"        data[\u0027stats\u0027] \u003d {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":10380,"context_line":"        return data"},{"line_number":10381,"context_line":""},{"line_number":10382,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"beae4f3b_bec57c47","line":10379,"in_reply_to":"b55d5cee_132cadc9","updated":"2025-09-05 08:07:19.000000000","message":"I don\u0027t think https://github.com/openstack/nova/blob/9f156aa954fb57eeaf407cc13a0f782b8af1a5d3/nova/compute/resource_tracker.py#L1008 needs to be changed. It looks to me like the intention of this method is to update specific attributes on the ComputeNode directly provided by the driver. `stats` on the other hand is handled internally by the resource-tracker and, as you found, too, set on the ComputeNode object directly and then applied via `save()` whenever `_resource_change()` returns `True` in `_update()`.\n\nI followed the code, too, and came to the same conclusion as you: it should work. `stats` is not cleared anywhere else either.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":10376,"context_line":"        else:"},{"line_number":10377,"context_line":"            data[\u0027numa_topology\u0027] \u003d None"},{"line_number":10378,"context_line":""},{"line_number":10379,"context_line":"        data[\u0027stats\u0027] \u003d {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":10380,"context_line":"        return data"},{"line_number":10381,"context_line":""},{"line_number":10382,"context_line":"    def check_instance_shared_storage_local(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c8cfd24_e40aa642","line":10379,"in_reply_to":"beae4f3b_bec57c47","updated":"2025-09-05 11:28:51.000000000","message":"thanks for confirming.\n\ni will be testing this locally properly today.\n\ni think im still going to update the debug print for the \"final resource view\"\nto add the printing but ill likely just resolve this comment after that is done.\n\nthere is some degree of technial debt here btu i dotn think i shoudl expand the scope to do more then impove debug logging in this change.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"}],"nova/virt/zvm/driver.py":[{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"1e1668df77ace71f6aa463938f315eec945ccd86","unresolved":true,"context_lines":[{"line_number":132,"context_line":"                                     obj_fields.HVType.ZVM,"},{"line_number":133,"context_line":"                                     obj_fields.VMMode.HVM)],"},{"line_number":134,"context_line":"            \u0027numa_topology\u0027: None,"},{"line_number":135,"context_line":"           \u0027stats\u0027: {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":136,"context_line":"        }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        LOG.debug(\"Getting available resource for %(host)s:%(nodename)s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"f29d2e26_b886c83f","line":135,"updated":"2025-09-05 08:07:19.000000000","message":"I think this is missing a space of indentation","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                                     obj_fields.HVType.ZVM,"},{"line_number":133,"context_line":"                                     obj_fields.VMMode.HVM)],"},{"line_number":134,"context_line":"            \u0027numa_topology\u0027: None,"},{"line_number":135,"context_line":"           \u0027stats\u0027: {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":136,"context_line":"        }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        LOG.debug(\"Getting available resource for %(host)s:%(nodename)s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"f84b2716_3e2daf4a","line":135,"in_reply_to":"c0d72984_5d3c100c","updated":"2025-09-05 16:35:05.000000000","message":"Done","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":132,"context_line":"                                     obj_fields.HVType.ZVM,"},{"line_number":133,"context_line":"                                     obj_fields.VMMode.HVM)],"},{"line_number":134,"context_line":"            \u0027numa_topology\u0027: None,"},{"line_number":135,"context_line":"           \u0027stats\u0027: {\u0027uptime\u0027: self.get_host_uptime()}"},{"line_number":136,"context_line":"        }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        LOG.debug(\"Getting available resource for %(host)s:%(nodename)s\","}],"source_content_type":"text/x-python","patch_set":1,"id":"c0d72984_5d3c100c","line":135,"in_reply_to":"f29d2e26_b886c83f","updated":"2025-09-05 11:28:51.000000000","message":"same but when i looked at it last night i was hoping this was just on my ipad 😊\nill fix this i just dont know why autopep8 and python is soke with this in general\ni guess because its in a dict.","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"}],"releasenotes/notes/bug-2122036-hypervisor-uptime-performance-optimization-6f3a2c8e5d9b1a4e.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5cc44a3b5348b1af982b3f38e83d5bb8bc01a9dd","unresolved":true,"context_lines":[{"line_number":15,"context_line":"      actually support it (libvirt and z/VM), avoiding unnecessary calls to"},{"line_number":16,"context_line":"      other hypervisor types that would always return NotImplementedError"},{"line_number":17,"context_line":"    * Preferring cached uptime data from the database over RPC calls when"},{"line_number":18,"context_line":"      available"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    This change significantly reduces response times for the hypervisor detail"},{"line_number":21,"context_line":"    API in large deployments while maintaining backward compatibility."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"db8c57c5_9a6306e0","line":18,"updated":"2025-09-05 09:56:32.000000000","message":"do we want a word here or in the API ref explaining that the freshness of the uptime value returned by the API depends on the frequency of the compute periodic that is configurable via [DEFAULT]update_resources_interval on the compute?","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d730ea3119312d58463a3071bfef69ff49cad3b6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      actually support it (libvirt and z/VM), avoiding unnecessary calls to"},{"line_number":16,"context_line":"      other hypervisor types that would always return NotImplementedError"},{"line_number":17,"context_line":"    * Preferring cached uptime data from the database over RPC calls when"},{"line_number":18,"context_line":"      available"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    This change significantly reduces response times for the hypervisor detail"},{"line_number":21,"context_line":"    API in large deployments while maintaining backward compatibility."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"0255ffc0_e61ba382","line":18,"in_reply_to":"0adce2d6_3d41aaf2","updated":"2025-09-05 16:35:05.000000000","message":"Done","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"261114bd1279cd3af1ead9340238a8766c212361","unresolved":true,"context_lines":[{"line_number":15,"context_line":"      actually support it (libvirt and z/VM), avoiding unnecessary calls to"},{"line_number":16,"context_line":"      other hypervisor types that would always return NotImplementedError"},{"line_number":17,"context_line":"    * Preferring cached uptime data from the database over RPC calls when"},{"line_number":18,"context_line":"      available"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    This change significantly reduces response times for the hypervisor detail"},{"line_number":21,"context_line":"    API in large deployments while maintaining backward compatibility."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"0adce2d6_3d41aaf2","line":18,"in_reply_to":"db8c57c5_9a6306e0","updated":"2025-09-05 11:28:51.000000000","message":"oh good point i actully shoudl probaly update the api ref to note that this is a potially cached responce abut sure i can add a mention of the interval here too","commit_id":"8e0cabab88e855bde6f68186bb073c0906f2a919"}]}
