)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a4dba30998ea52fbd0065ac2caacf45188d9de0f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7295d33f_5d37f6e7","updated":"2026-06-08 12:50:44.000000000","message":"Doesn\u0027t this conflict with resize operation in nova which leaves the original domain definition in the source compute node ?\nI\u0027m afraid we likely get metrics from both source and dest in that case until resize confirm (or revert) is executed.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":20676,"name":"daniel.pawlik","display_name":"Daniel Pawlik","email":"dpawlik@redhat.com","username":"daniel.pawlik"},"change_message_id":"3de7daa97224ef8ccc3ff8fbe8be80e38f3886ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7c27e694_267cdfba","updated":"2026-06-09 07:01:55.000000000","message":"Looks good. Additional tests could be added in following PS.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9e296cd47ecaebaffc2a79e7367434c2b9129839","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e7bac5cd_b501ca20","in_reply_to":"00869ed0_54f29392","updated":"2026-06-12 14:58:51.000000000","message":"OK. Let\u0027s add a new option to explicitly enable metrics for shutoff instances.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"e2291a48d61ae511334d6bc55ee7d2e35d16ff2a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5c7e9b08_0e6710c6","in_reply_to":"3765331d_b4702773","updated":"2026-06-08 13:55:25.000000000","message":"Ill test this use case","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"a76c0e4e99e9180701211fec0c96b20d0de7234c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"be68563d_ff8f236c","in_reply_to":"3765331d_b4702773","updated":"2026-06-08 14:07:07.000000000","message":"Thanks. If you can spin up the env for testing and can cover\n\n - resize (please wait for enough time before you execute resize confirm)\n - cold migration (this is equivalent to resize)\n - live migration\n\nthen that would be nice.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"cd440fb2e3e7d06c7ccd38d0261a984e5277e824","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3765331d_b4702773","in_reply_to":"7295d33f_5d37f6e7","updated":"2026-06-08 12:58:24.000000000","message":"good call, that\u0027d be nice to know what happens in that case","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"606e9d269d7f9150063a22f5626f2098a3c5dffd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f3e7d285_11381151","in_reply_to":"a390d4ee_ae276f58","updated":"2026-06-12 13:14:44.000000000","message":"Thanks for these inputs.\n\n\u003e Live migration: we can get \"duplicated\" metrics for a short while if the compute node where the machine is ending is scraped before the one where the machine has left, but they will belong to different series\n\nCould you please help me understand what \"different series\" mean hear ? If that is specific concept in prometheus then we should also consider how the change affects gnocchi, too.\n\n\u003e What we are showing, which is the same VM being SHUTOFF in two different nodes is actually true and this status would create two different series on a dashboard which will be overlapped\n\nThese are overlapped but are not identical due to different cpu/memory size. \n\nWhile I agree capturing these metrics about stopped instances would be useful, I\u0027m still concerned with potentially breaking existing metric aggregate usage in the wild due to these duplication. I wonder if we can make the new behavior opt-in ?","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"91a8c1ac6e114e289375d065c2b9c44c26263720","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a390d4ee_ae276f58","in_reply_to":"be68563d_ff8f236c","updated":"2026-06-09 12:13:36.000000000","message":"I have spinned up a devstack environment with one controller and two computes. And tried the three operations.\n\nLive migration: we can get \"duplicated\" metrics for a short while if the compute node where the machine is ending is scraped before the one where the machine has left, but they will belong to different series, and thus all that I comment later for resize/cold migration applies.\n\nResize/cold migration: i treat them as the same because they are basically the same operation. We stop the VM, request the migration and then the new VM is created in the new compute node. This creates \"duplicated\" metrics for two powered off VMs until the user confirms the migration. In that moment, Nova deletes the first node\u0027s VM and metrics stop coming.\n\nI don\u0027t see this as a problem, and that is why I put the \"duplicated\" term between quotation marks. The metrics are not really duplicated, as the \"instance\" label is different. That label handles the compute node that originated the metric. This makes Prometheus to consider both metrics to be different and start a different series for the VM in a different node.\n\nWhat we are showing, which is the same VM being SHUTOFF in two different nodes is actually true and this status would create two different series on a dashboard which will be overlapped (if the dashboard is showing one of the SHUTOFF metrics, such as power.state). This is NOT an error and I dont see it as an issue, as it is a real description of the system. \n\nDuring a resize or a cold migration, the VM cannot be started while it is in VERIFY_RESIZE state, so we get two SHUTOFF metrics series for the same VM but in different nodes. When the user confirms the migration, the machine in the origin node is deleted and only the one in the new node can be started, which then will be giving unique metrics as the other one has been removed and thus Ceilometer does not get any more metrics.\n\nIMHO, this is the adequate behaviour and gives correct and useful information to the operator about the status of the cluster.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"39ac57ee5ffce7d7d72a3db6f41535eea46d1bc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7dfc58fd_379dada8","in_reply_to":"e7bac5cd_b501ca20","updated":"2026-06-15 12:40:29.000000000","message":"Done","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"137dadc30adeea1c23cf3302efa709d95a1bf8e3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"00869ed0_54f29392","in_reply_to":"f3e7d285_11381151","updated":"2026-06-12 13:18:11.000000000","message":"At the end, even if the \"series\" is only Prometheus related lingo, and Gnocchi could also handle duplicated metrics, this might be aa really big behaviour change so I concur it would be better to make it opt-in, just to make our users be safe that in case something goes wrong within their own specifics, they can always continue as usual.","commit_id":"77584894b00465aa4979c5d108d08e76cf0429b1"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"2b64e0b21c81c0b2258c22f5192b50ae9149dd15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b07f0a1a_7321db4d","updated":"2026-06-16 17:07:02.000000000","message":"Thanks","commit_id":"ab1981d47b896f886bb6d5e2f3af1770e6a62f09"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"d6894d70747806a4a81de47d9e50cb9500d863bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3694d3b6_c6d981c5","updated":"2026-06-17 05:56:31.000000000","message":"thank you","commit_id":"ab1981d47b896f886bb6d5e2f3af1770e6a62f09"}],"ceilometer/compute/discovery.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"85946c3c5f677705feeff14fb651023ae45afdd6","unresolved":true,"context_lines":[{"line_number":63,"context_line":"                    \"of resource_update_interval. This option is only used \""},{"line_number":64,"context_line":"                    \"for agent polling to Nova API, so it will work only \""},{"line_number":65,"context_line":"                    \"when \u0027instance_discovery_method\u0027 is set to \u0027naive\u0027.\"),"},{"line_number":66,"context_line":"    cfg.BoolOpt(\u0027report_stopped_vm_metrics\u0027,"},{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba9e5033_3341903b","line":66,"range":{"start_line":66,"start_character":17,"end_line":66,"end_character":42},"updated":"2026-06-15 15:28:10.000000000","message":"Can we rename this to report_stopped_instance_metrics , to make the naming more consistent ?","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"afd3a3f298edde866132f5b3919501bfc0df9bd2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \"of resource_update_interval. This option is only used \""},{"line_number":64,"context_line":"                    \"for agent polling to Nova API, so it will work only \""},{"line_number":65,"context_line":"                    \"when \u0027instance_discovery_method\u0027 is set to \u0027naive\u0027.\"),"},{"line_number":66,"context_line":"    cfg.BoolOpt(\u0027report_stopped_vm_metrics\u0027,"},{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ebd0bd30_009be20b","line":66,"range":{"start_line":66,"start_character":17,"end_line":66,"end_character":42},"in_reply_to":"ba9e5033_3341903b","updated":"2026-06-16 10:22:28.000000000","message":"Done","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"85946c3c5f677705feeff14fb651023ae45afdd6","unresolved":true,"context_lines":[{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""},{"line_number":70,"context_line":"                     \"stopped (SHUTOFF) VMs. Disabled by default.\"),"},{"line_number":71,"context_line":"    cfg.BoolOpt(\u0027fetch_extra_metadata\u0027,"},{"line_number":72,"context_line":"                default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d\"Whether or not additional instance attributes that \""}],"source_content_type":"text/x-python","patch_set":2,"id":"c2ac4efb_c8dbaa7f","line":70,"range":{"start_line":70,"start_character":45,"end_line":70,"end_character":65},"updated":"2026-06-15 15:28:10.000000000","message":"This is probably redundant because the default value is automatically rendered by oslo.config .","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"85946c3c5f677705feeff14fb651023ae45afdd6","unresolved":true,"context_lines":[{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""},{"line_number":70,"context_line":"                     \"stopped (SHUTOFF) VMs. Disabled by default.\"),"},{"line_number":71,"context_line":"    cfg.BoolOpt(\u0027fetch_extra_metadata\u0027,"},{"line_number":72,"context_line":"                default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d\"Whether or not additional instance attributes that \""}],"source_content_type":"text/x-python","patch_set":2,"id":"a8d89ee8_baafb199","line":70,"range":{"start_line":70,"start_character":40,"end_line":70,"end_character":43},"updated":"2026-06-15 15:28:10.000000000","message":"We probably have to document that this will work only when \u0027instance_discovery_method\u0027 is set to \u0027libvirt_metadata\u0027.","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"afd3a3f298edde866132f5b3919501bfc0df9bd2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""},{"line_number":70,"context_line":"                     \"stopped (SHUTOFF) VMs. Disabled by default.\"),"},{"line_number":71,"context_line":"    cfg.BoolOpt(\u0027fetch_extra_metadata\u0027,"},{"line_number":72,"context_line":"                default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d\"Whether or not additional instance attributes that \""}],"source_content_type":"text/x-python","patch_set":2,"id":"5163b1ff_e2059741","line":70,"range":{"start_line":70,"start_character":40,"end_line":70,"end_character":43},"in_reply_to":"a8d89ee8_baafb199","updated":"2026-06-16 10:22:28.000000000","message":"Good catch!","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"afd3a3f298edde866132f5b3919501bfc0df9bd2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                default\u003dFalse,"},{"line_number":68,"context_line":"                help\u003d\"Report a minimal set of metrics (power.state, vcpus, \""},{"line_number":69,"context_line":"                     \"memory, disk.device.capacity, disk.device.usage) for \""},{"line_number":70,"context_line":"                     \"stopped (SHUTOFF) VMs. Disabled by default.\"),"},{"line_number":71,"context_line":"    cfg.BoolOpt(\u0027fetch_extra_metadata\u0027,"},{"line_number":72,"context_line":"                default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d\"Whether or not additional instance attributes that \""}],"source_content_type":"text/x-python","patch_set":2,"id":"a3378f8f_64612af8","line":70,"range":{"start_line":70,"start_character":45,"end_line":70,"end_character":65},"in_reply_to":"c2ac4efb_c8dbaa7f","updated":"2026-06-16 10:22:28.000000000","message":"Done","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"}],"ceilometer/compute/virt/libvirt/inspector.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"85946c3c5f677705feeff14fb651023ae45afdd6","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        if self.conf.compute.report_stopped_vm_metrics:"},{"line_number":195,"context_line":"            domain \u003d self._lookup_by_uuid(instance)"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            domain \u003d self._get_domain_not_shut_off_or_raise(instance)"},{"line_number":198,"context_line":"        for device in self._get_disk_devices(domain):"},{"line_number":199,"context_line":"            block_info \u003d domain.blockInfo(device)"},{"line_number":200,"context_line":"            # if vm mount cdrom, libvirt will align by 4K bytes, capacity may"}],"source_content_type":"text/x-python","patch_set":2,"id":"478bc4af_34cef53d","line":197,"range":{"start_line":197,"start_character":26,"end_line":197,"end_character":59},"updated":"2026-06-15 15:28:10.000000000","message":"I wonder refactoring this method to `_get_domain(instance, raise_if_shutoff)` allows us to reduce duplicated logic ? See https://review.opendev.org/c/openstack/ceilometer/+/993391","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"afd3a3f298edde866132f5b3919501bfc0df9bd2","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        if self.conf.compute.report_stopped_vm_metrics:"},{"line_number":195,"context_line":"            domain \u003d self._lookup_by_uuid(instance)"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            domain \u003d self._get_domain_not_shut_off_or_raise(instance)"},{"line_number":198,"context_line":"        for device in self._get_disk_devices(domain):"},{"line_number":199,"context_line":"            block_info \u003d domain.blockInfo(device)"},{"line_number":200,"context_line":"            # if vm mount cdrom, libvirt will align by 4K bytes, capacity may"}],"source_content_type":"text/x-python","patch_set":2,"id":"573efe5d_accb63c3","line":197,"range":{"start_line":197,"start_character":26,"end_line":197,"end_character":59},"in_reply_to":"478bc4af_34cef53d","updated":"2026-06-16 10:22:28.000000000","message":"This is a very good suggestion, and your supporting DNM patch has been utterly useful. I think you are absolutely right, and I have implemented what you suggested to make everything more","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"53c12ee83d095bc5043fc8e378b2269b55593b1c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if self.conf.compute.report_stopped_vm_metrics:"},{"line_number":195,"context_line":"            domain \u003d self._lookup_by_uuid(instance)"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            domain \u003d self._get_domain_not_shut_off_or_raise(instance)"},{"line_number":198,"context_line":"        for device in self._get_disk_devices(domain):"},{"line_number":199,"context_line":"            block_info \u003d domain.blockInfo(device)"},{"line_number":200,"context_line":"            # if vm mount cdrom, libvirt will align by 4K bytes, capacity may"}],"source_content_type":"text/x-python","patch_set":2,"id":"30bfdc0b_5183689a","line":197,"range":{"start_line":197,"start_character":26,"end_line":197,"end_character":59},"in_reply_to":"573efe5d_accb63c3","updated":"2026-06-16 10:22:54.000000000","message":"Done","commit_id":"feeb9ea240bb1bb3b718dc1816c3fb417092dabc"}]}
