)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"eeacac79e45211a9767e0b17ed8a7347bfc00cf5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"33591605_044771b5","updated":"2026-01-19 15:37:27.000000000","message":"What happens if I run `juju run keystone/0 pause` and then, the user does `k8s kubectl delete -n openstack keystone-0`?\n\nThis will re-create the pod, and we\u0027ll lose any notion of the pod being in maintenance.\n\nI\u0027m not sure we have a better way except using the peer relation in that case.\n\nWhat do you think should be the proper solution here?","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"6b154600e4e4eb07d2879a1a34557021a710609e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8c9a88d5_cbe32034","updated":"2026-01-27 12:45:27.000000000","message":"@gabriel.cocenza@canonical.com\nyou can run `tox -e py3` (for all) or `tox -e py3 -- keystone-k8s` or `tox -e py3 -- ops-sunbeam` for specific targets.\n\n\nThis will make it easier to review failures locally before uploading multiple revisions.","commit_id":"6fd8fea8a657d6e85b9ac9f51417a6356116559d"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"86986c91f5dc5ad9ed346562842bbb9dd4aea8e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1027c85a_b14ce4ca","updated":"2026-01-30 18:45:27.000000000","message":"recheck","commit_id":"ddfca42dc390f5d908465151c21fbc8d6076cc51"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"6c3451e38ebd2904fb5e6fc69915603589908afd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"14364a98_79828af7","updated":"2026-01-28 18:49:03.000000000","message":"recheck","commit_id":"ddfca42dc390f5d908465151c21fbc8d6076cc51"},{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"1dc078aa5ea14bc6ad7db6d6b4c663ea8fec4b70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"961e2542_77bcfcb5","updated":"2026-03-03 13:29:36.000000000","message":"Please; do not include .stestr artifacts into the code base :)","commit_id":"b23aa98707e2fbb31e59f4cd285dc7236c16e94d"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"b6532205e3748c37dd6d0844746190962553aa47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1510b0b9_6e2c06a3","updated":"2026-03-05 17:38:41.000000000","message":"recheck","commit_id":"85fa7813f605d18d73134f8647b2dcce5df281f1"}],"ops-sunbeam/ops_sunbeam/charm.py":[{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"eeacac79e45211a9767e0b17ed8a7347bfc00cf5","unresolved":true,"context_lines":[{"line_number":867,"context_line":"                self.on[\"resume\"].action, self._on_resume_action"},{"line_number":868,"context_line":"            )"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def _on_pause_action(self, event: ops.ActionEvent) -\u003e None:"},{"line_number":871,"context_line":"        \"\"\"Handle pause action.\"\"\""},{"line_number":872,"context_line":"        for ph in self.pebble_handlers:"},{"line_number":873,"context_line":"            ph.stop_healthcheck(\"up\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"779cbbc8_b8ef441d","line":870,"range":{"start_line":870,"start_character":8,"end_line":870,"end_character":24},"updated":"2026-01-19 15:37:27.000000000","message":"I wonder if we should have a main workload status about the whole unit being in maintenance, what do you think?\n\nWe can defer that if having multiple pebble handlers in maintenance shows well.","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"7225afe7be7790d54cfee367bf5f30443d095952","unresolved":true,"context_lines":[{"line_number":867,"context_line":"                self.on[\"resume\"].action, self._on_resume_action"},{"line_number":868,"context_line":"            )"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def _on_pause_action(self, event: ops.ActionEvent) -\u003e None:"},{"line_number":871,"context_line":"        \"\"\"Handle pause action.\"\"\""},{"line_number":872,"context_line":"        for ph in self.pebble_handlers:"},{"line_number":873,"context_line":"            ph.stop_healthcheck(\"up\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"f35dfcef_026efd38","line":870,"range":{"start_line":870,"start_character":8,"end_line":870,"end_character":24},"in_reply_to":"779cbbc8_b8ef441d","updated":"2026-01-27 20:50:59.000000000","message":"Makes sense. I\u0027ve changed to act in the workload because has the highest priority. Now charms with multiple containers, e.g nova, will still be marked as maintenance even after update_status","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"bd5585ac3ecb9b239dc052fb79871fbce100cbea","unresolved":true,"context_lines":[{"line_number":234,"context_line":"    def is_service_paused(self) -\u003e bool:"},{"line_number":235,"context_line":"        \"\"\"Whether the service is paused.\"\"\""},{"line_number":236,"context_line":"        services_paused \u003d False"},{"line_number":237,"context_line":"        if self.supports_peer_relation:"},{"line_number":238,"context_line":"            services_paused \u003d self.peers.is_unit_paused()"},{"line_number":239,"context_line":"        return services_paused"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7fc14bb8_7654f4a8","line":237,"updated":"2026-02-04 15:00:15.000000000","message":"We agreed to use peer relation to ensure that we can durably now if the unit is paused.\n\nYou\u0027ve rightly noticed that not all units will support peer relation.\nIn that case we should fall back to local storage.\n\n\nIt is safe to use local storage in this instance, because the charms that do not support peer relation are machine charms, where the local storage won\u0027t go away for the same unit on a whim.","commit_id":"ddfca42dc390f5d908465151c21fbc8d6076cc51"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"418d850112d51bc86e5d8aef6b23464d4e74ba46","unresolved":true,"context_lines":[{"line_number":234,"context_line":"    def is_service_paused(self) -\u003e bool:"},{"line_number":235,"context_line":"        \"\"\"Whether the service is paused.\"\"\""},{"line_number":236,"context_line":"        services_paused \u003d False"},{"line_number":237,"context_line":"        if self.supports_peer_relation:"},{"line_number":238,"context_line":"            services_paused \u003d self.peers.is_unit_paused()"},{"line_number":239,"context_line":"        return services_paused"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ffee89b8_232f4f3e","line":237,"in_reply_to":"7fc14bb8_7654f4a8","updated":"2026-03-11 20:49:26.000000000","message":"Implementation now is using the StoredState for machine charms","commit_id":"ddfca42dc390f5d908465151c21fbc8d6076cc51"}],"ops-sunbeam/ops_sunbeam/container_handlers.py":[{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"eeacac79e45211a9767e0b17ed8a7347bfc00cf5","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        if self.is_service_paused():"},{"line_number":316,"context_line":"            self.status.set("},{"line_number":317,"context_line":"                MaintenanceStatus("},{"line_number":318,"context_line":"                    \"Paused. Use \u0027resume\u0027 action to resume normal service.\""},{"line_number":319,"context_line":"                )"},{"line_number":320,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"05024ba2_9cb69287","line":317,"updated":"2026-01-19 15:37:27.000000000","message":"Does the status behave well when a charm has multiple containers? (such as nova-k8s)","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"7225afe7be7790d54cfee367bf5f30443d095952","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        if self.is_service_paused():"},{"line_number":316,"context_line":"            self.status.set("},{"line_number":317,"context_line":"                MaintenanceStatus("},{"line_number":318,"context_line":"                    \"Paused. Use \u0027resume\u0027 action to resume normal service.\""},{"line_number":319,"context_line":"                )"},{"line_number":320,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":4,"id":"d7a1f0e6_dce974b7","line":317,"in_reply_to":"05024ba2_9cb69287","updated":"2026-01-27 20:50:59.000000000","message":"See the last patch. Now it\u0027s behaving as expected.\n\nThanks for catching it","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":35761,"name":"Guillaume Boutry","display_name":"gboutry","email":"guillaume.boutry@canonical.com","username":"gboutry"},"change_message_id":"eeacac79e45211a9767e0b17ed8a7347bfc00cf5","unresolved":true,"context_lines":[{"line_number":606,"context_line":"    def is_service_paused(self) -\u003e bool:"},{"line_number":607,"context_line":"        \"\"\"Determine whether service is paused.\"\"\""},{"line_number":608,"context_line":"        container \u003d self.charm.unit.get_container(self.container_name)"},{"line_number":609,"context_line":"        check \u003d container.get_check(\"up\")"},{"line_number":610,"context_line":"        return check.status \u003d\u003d ops.pebble.CheckStatus.INACTIVE"}],"source_content_type":"text/x-python","patch_set":4,"id":"9716a00c_1b93db59","line":609,"updated":"2026-01-19 15:37:27.000000000","message":"What happens here if no `up` check is defined?","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"},{"author":{"_account_id":33536,"name":"Gabriel Angelo Sgarbi Cocenza","display_name":"Gabriel Cocenza","email":"gabriel.cocenza@canonical.com","username":"gabrielcocenza"},"change_message_id":"418d850112d51bc86e5d8aef6b23464d4e74ba46","unresolved":true,"context_lines":[{"line_number":606,"context_line":"    def is_service_paused(self) -\u003e bool:"},{"line_number":607,"context_line":"        \"\"\"Determine whether service is paused.\"\"\""},{"line_number":608,"context_line":"        container \u003d self.charm.unit.get_container(self.container_name)"},{"line_number":609,"context_line":"        check \u003d container.get_check(\"up\")"},{"line_number":610,"context_line":"        return check.status \u003d\u003d ops.pebble.CheckStatus.INACTIVE"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ff48e31_e591b7d3","line":609,"in_reply_to":"9716a00c_1b93db59","updated":"2026-03-11 20:49:26.000000000","message":"Logic now is checking in the peer relation or in _state to check if is paused or not, so I think we are fine","commit_id":"f2435ac4add72f1f8ee1a9ab23fb012a1ed4e8d0"}]}
