)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ec663c2f5461fbbaab422c9fdea64116ad5d68ca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     75c84100 (Merge \"Skip unscheduled volumes in Cinder collector\")"},{"line_number":2,"context_line":"Author:     jgilaber \u003cjgilaber@redhat.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2025-09-18 15:56:38 +0200"},{"line_number":4,"context_line":"Commit:     jgilaber \u003cjgilaber@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"99b3e2e9_9fb57565","line":1,"updated":"2026-10-14 09:44:19.000000000","message":"The commit message states \u0027Add conditional checks in update_pool(), update_pool_by_sync_node_and_pool(), and build_pool() methods\u0027. Neither update_pool_by_sync_node_and_pool() nor build_pool() exists anywhere in watcher\u0027s history or working tree. The actual methods modified by this change are update_pool(), update_pool_by_api(), and create_pool(). Since the commit message is permanent history that developers search when tracing changes, naming methods that never existed undermines that traceability.\n\n**Severity**: SUGGESTION | **Confidence**: 0.85\n\n**Impact**: Future readers running git log -S or grepping for the referenced method names find nothing, which obscures which code the fix actually touched and weakens the permanent change history.\n\n**Recommendation**:\nReword the commit message sentence to name the real methods: \u0027Add conditional checks in update_pool(), update_pool_by_api(), and create_pool() methods...\u0027.","commit_id":"ec1b3d3aa35debdd98394eadd457cf4a882a4ef6"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"b0c92ab2f65750ef6104083ce8d9c24cf5d67ef1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     75c84100 (Merge \"Skip unscheduled volumes in Cinder collector\")"},{"line_number":2,"context_line":"Author:     jgilaber \u003cjgilaber@redhat.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2025-09-18 15:56:38 +0200"},{"line_number":4,"context_line":"Commit:     jgilaber \u003cjgilaber@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"cf8e4959_142b583f","line":1,"updated":"2026-10-14 12:33:14.000000000","message":"The commit message body states that conditional checks were added \"in update_pool(), update_pool_by_sync_node_and_pool(), and build_pool() methods\", but the change actually modifies update_pool(), update_pool_by_api(), and create_pool() in watcher/decision_engine/model/notification/cinder.py. Neither update_pool_by_sync_node_and_pool() nor build_pool() exists anywhere in the repository.\n\n**Severity**: WARNING | **Confidence**: 0.95\n\n**Impact**: Anyone reading the permanent change history to understand which functions were made tolerant of optional fields will search for update_pool_by_sync_node_and_pool() and build_pool() and find nothing, weakening the message as a map to the implementation and obscuring that update_pool_by_api() and create_pool() changed.\n\n**Suggestion**:\nAmend the commit message sentence to name the real methods, e.g. \"Add conditional checks in update_pool(), update_pool_by_api(), and create_pool() methods to only update fields when they are present in the notification data or available as attributes.\"","commit_id":"1aa72ed22261b2accc8a518236b9e86318251826"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"b9f7235d48bdba4a1afc35fa75428373eea32c70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"85ea9ba5_ea15b1dd","updated":"2025-09-18 14:05:41.000000000","message":"Still have to test this approach","commit_id":"2f81885ad2f1c58b5ee3e028f6ccb2797b565bc2"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"44987f6f12edab5143a79ac1112e956e55e744a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b3660314_392436b2","updated":"2025-10-09 08:01:11.000000000","message":"Example of the bug being reproduced in the `watcher-operator-validation-master` job in another patch:\n\nhttps://logserver.rdoproject.org/64f/rdoproject.org/64f1052aa0854475896c532951534410/controller/ci-framework-data/logs/openstack-must-gather/quay-io-openstack-k8s-operators-openstack-must-gather-sha256-943eee724277e252795909137538a553ef5284c8103ad01b9be7b0138c66d14d/namespaces/openstack/pods/watcher-decision-engine-0/logs/watcher-decision-engine.log.gz\n\n```\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher [None req-a41a800c-8613-4b95-9d46-4cfd6e47c992 5c04e2820b154412a74a75fdd7b7583a 12c36b0871aa48998a36184d1dfb7d8d - - - -] Callback raised an exception.: AttributeError: total_volumes\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher Traceback (most recent call last):\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher   File \"/usr/lib/python3.12/site-packages/oslo_messaging/notify/dispatcher.py\", line 78, in _exec_callback\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher     return callback(message[\"ctxt\"],\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher            ^^^^^^^^^^^^^^^^^^^^^^^^^\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher   File \"/usr/lib/python3.12/site-packages/watcher/decision_engine/model/notification/cinder.py\", line 333, in info\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher     self.update_volume(volume, payload)\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher   File \"/usr/lib/python3.12/site-packages/watcher/decision_engine/model/notification/cinder.py\", line 188, in update_volume\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher     self.update_pool_by_api(pool)\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher   File \"/usr/lib/python3.12/site-packages/watcher/decision_engine/model/notification/cinder.py\", line 59, in update_pool_by_api\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher     \"total_volumes\": _pool.total_volumes,\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher                      ^^^^^^^^^^^^^^^^^^^\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher   File \"/usr/lib/python3.12/site-packages/cinderclient/apiclient/base.py\", line 502, in __getattr__\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher     raise AttributeError(k)\n2025-10-08 19:47:36.734 1 ERROR oslo_messaging.notify.dispatcher AttributeError: total_volumes\n```\n\nwhile it does not happen in the same job running under this patch: https://logserver.rdoproject.org/dc3/rdoproject.org/dc3784b49bbb4efc802274fdf3dc0925/controller/ci-framework-data/logs/openstack-must-gather/quay-io-openstack-k8s-operators-openstack-must-gather-sha256-943eee724277e252795909137538a553ef5284c8103ad01b9be7b0138c66d14d/namespaces/openstack/pods/watcher-decision-engine-0/logs/watcher-decision-engine.log.gz","commit_id":"4f7d4ab8a398b19435c2676924ec80228a5dc8a8"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"290977d13848e53de190103c505ada3b77701504","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"10c4a6f5_3b1aa904","updated":"2025-10-09 10:12:23.000000000","message":"recheck aethos job failed while deploying devstack","commit_id":"afaac754ff1f7808fb5b68fb16a892e189a19ab9"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d27b46fe57e71ace7e2bf00c855bbf4a1c2dd71b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0b94602f_d7afa791","updated":"2026-10-14 08:21:50.000000000","message":"check-rdo","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2e7f3cd4bf4e4ab31d37786836234d0ad0d8bcd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1f35478a_d91f88de","updated":"2026-10-14 11:24:16.000000000","message":"This fix likely needs a release notes since it affects users directly.","commit_id":"ec1b3d3aa35debdd98394eadd457cf4a882a4ef6"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6f319027042302998d4eac99518f677e5bc1d387","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b8349fbb_e49d4b03","in_reply_to":"1f35478a_d91f88de","updated":"2026-10-14 12:20:00.000000000","message":"good point, done!","commit_id":"ec1b3d3aa35debdd98394eadd457cf4a882a4ef6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2fa8e67a904ba19803be92dcf0485304ef2afe65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f8c5489a_dde12d74","updated":"2026-10-14 15:14:13.000000000","message":"Thanks!","commit_id":"1aa72ed22261b2accc8a518236b9e86318251826"}],"releasenotes/notes/fix-cinder-notification-optional-pool-fields-93e44038ebd48c66.yaml":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2fa8e67a904ba19803be92dcf0485304ef2afe65","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixed an ``AttributeError`` raised in the decision engine when"},{"line_number":5,"context_line":"    processing Cinder notifications for pools whose storage driver does"},{"line_number":6,"context_line":"    not report all optional pool fields. Some drivers (like the nfs"},{"line_number":7,"context_line":"    driver) do not report fields such as total_volumes, free_capacity_gb,"},{"line_number":8,"context_line":"    provisioned_capacity_gb or allocated_capacity_gb that the lvm driver"},{"line_number":9,"context_line":"    does, so assuming those fields are always present in the notification"},{"line_number":10,"context_line":"    payload was wrong. These fields are now only updated when present."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    See: https://bugs.launchpad.net/watcher/+bug/2125060 for more details."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9bf2ea97_7e0354eb","line":10,"range":{"start_line":4,"start_character":0,"end_line":10,"end_character":70},"updated":"2026-10-14 15:14:13.000000000","message":"nit: maybe we should focus more on what was the user facing issue like: missing a volume in the model due to a notification processing error in decision-engine, which now is fixed.\nLets proceed with this since we have move details in the LP bug too\nthanks!","commit_id":"1aa72ed22261b2accc8a518236b9e86318251826"}],"watcher/decision_engine/model/notification/cinder.py":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"a32bf78b2f0eee56abb7d64f1bb27c213dfdde20","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    def update_pool(self, pool, data):"},{"line_number":70,"context_line":"        \"\"\"Update the storage pool using the notification data.\"\"\""},{"line_number":71,"context_line":"        pool_data \u003d {"},{"line_number":72,"context_line":"            \"total_capacity_gb\": data[\u0027total\u0027],"},{"line_number":73,"context_line":"            \"virtual_free\": data[\u0027virtual_free\u0027],"},{"line_number":74,"context_line":"        }"},{"line_number":75,"context_line":"        # these fields are not reported by all cinder drivers, so only update"}],"source_content_type":"text/x-python","patch_set":5,"id":"b021c633_15069521","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":2},"updated":"2026-10-14 08:48:59.000000000","message":"total_capacity_gb can be None if cinder api is reporting \u0027unknown\u0027. I think we should treat total_capacity_gb the same way as other capacity fields?","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6f319027042302998d4eac99518f677e5bc1d387","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    def update_pool(self, pool, data):"},{"line_number":70,"context_line":"        \"\"\"Update the storage pool using the notification data.\"\"\""},{"line_number":71,"context_line":"        pool_data \u003d {"},{"line_number":72,"context_line":"            \"total_capacity_gb\": data[\u0027total\u0027],"},{"line_number":73,"context_line":"            \"virtual_free\": data[\u0027virtual_free\u0027],"},{"line_number":74,"context_line":"        }"},{"line_number":75,"context_line":"        # these fields are not reported by all cinder drivers, so only update"}],"source_content_type":"text/x-python","patch_set":5,"id":"6c34571d_83b8d1ff","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":2},"in_reply_to":"b021c633_15069521","updated":"2026-10-14 12:20:00.000000000","message":"good point, I\u0027m treating it as optional in the next patchset","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"a32bf78b2f0eee56abb7d64f1bb27c213dfdde20","unresolved":true,"context_lines":[{"line_number":92,"context_line":"        if not pool:"},{"line_number":93,"context_line":"            return"},{"line_number":94,"context_line":"        _pool \u003d self.cinder.get_storage_pool_by_name(pool.name)"},{"line_number":95,"context_line":"        pool_data \u003d {\"total_capacity_gb\": _pool.total_capacity_gb}"},{"line_number":96,"context_line":"        pool_data.update(_extract_optional_pool_fields(_pool))"},{"line_number":97,"context_line":"        pool.update(pool_data)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ec479342_5b769694","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":2},"updated":"2026-10-14 08:48:59.000000000","message":"ditto","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6f319027042302998d4eac99518f677e5bc1d387","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        if not pool:"},{"line_number":93,"context_line":"            return"},{"line_number":94,"context_line":"        _pool \u003d self.cinder.get_storage_pool_by_name(pool.name)"},{"line_number":95,"context_line":"        pool_data \u003d {\"total_capacity_gb\": _pool.total_capacity_gb}"},{"line_number":96,"context_line":"        pool_data.update(_extract_optional_pool_fields(_pool))"},{"line_number":97,"context_line":"        pool.update(pool_data)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"64a43b8d_ef1d7812","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":2},"in_reply_to":"ec479342_5b769694","updated":"2026-10-14 12:20:00.000000000","message":"Done","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"a32bf78b2f0eee56abb7d64f1bb27c213dfdde20","unresolved":true,"context_lines":[{"line_number":141,"context_line":"        \"\"\"Create the storage pool by querying the Cinder API.\"\"\""},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            _pool \u003d self.cinder.get_storage_pool_by_name(pool_name)"},{"line_number":144,"context_line":"            pool_data \u003d {\"total_capacity_gb\": _pool.total_capacity_gb}"},{"line_number":145,"context_line":"            pool_data.update(_extract_optional_pool_fields(_pool))"},{"line_number":146,"context_line":"            pool \u003d element.Pool(name\u003d_pool.name, **pool_data)"},{"line_number":147,"context_line":"            return pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"97892339_c360edb4","line":144,"range":{"start_line":144,"start_character":26,"end_line":144,"end_character":43},"updated":"2026-10-14 08:48:59.000000000","message":"ditto","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"6f319027042302998d4eac99518f677e5bc1d387","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \"\"\"Create the storage pool by querying the Cinder API.\"\"\""},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            _pool \u003d self.cinder.get_storage_pool_by_name(pool_name)"},{"line_number":144,"context_line":"            pool_data \u003d {\"total_capacity_gb\": _pool.total_capacity_gb}"},{"line_number":145,"context_line":"            pool_data.update(_extract_optional_pool_fields(_pool))"},{"line_number":146,"context_line":"            pool \u003d element.Pool(name\u003d_pool.name, **pool_data)"},{"line_number":147,"context_line":"            return pool"}],"source_content_type":"text/x-python","patch_set":5,"id":"c640d5fa_c5cc26a7","line":144,"range":{"start_line":144,"start_character":26,"end_line":144,"end_character":43},"in_reply_to":"97892339_c360edb4","updated":"2026-10-14 12:20:00.000000000","message":"Done","commit_id":"7067189e6117f812a04668f29e5db64e24c13c31"}]}
