From 941e883ddedcd2a79382bc2ca2b98cdaa7310721 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 5 Sep 2023 07:41:45 +0200 Subject: [PATCH] Override write_leader_optime method in K8s implementation (#2850) It is being called when postgres is already shut down cleanly but there are no healthy replicas to take it over. Close https://github.com/zalando/patroni/issues/2837 Close https://github.com/zalando/patroni/pull/2838 --- patroni/dcs/kubernetes.py | 7 +++++++ tests/test_kubernetes.py | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/patroni/dcs/kubernetes.py b/patroni/dcs/kubernetes.py index 47ba4e7a..a88f4b23 100644 --- a/patroni/dcs/kubernetes.py +++ b/patroni/dcs/kubernetes.py @@ -1140,6 +1140,13 @@ class Kubernetes(AbstractDCS): """Unused""" raise NotImplementedError # pragma: no cover + def write_leader_optime(self, last_lsn: int) -> None: + """Write value for WAL LSN to ``optime`` annotation of the leader object. + + :param last_lsn: absolute WAL LSN in bytes. + """ + self.patch_or_create(self.leader_path, {self._OPTIME: str(last_lsn)}, patch=True, retry=False) + def _update_leader_with_retry(self, annotations: Dict[str, Any], resource_version: Optional[str], ips: List[str]) -> bool: retry = self._retry.copy() diff --git a/tests/test_kubernetes.py b/tests/test_kubernetes.py index c33bbecc..4f9f418c 100644 --- a/tests/test_kubernetes.py +++ b/tests/test_kubernetes.py @@ -436,6 +436,10 @@ class TestKubernetesEndpoints(BaseTestKubernetes): mock_logger_exception.assert_called_once() self.assertEqual(('create_config_service failed',), mock_logger_exception.call_args[0]) + @patch.object(k8s_client.CoreV1Api, 'patch_namespaced_endpoints', mock_namespaced_kind, create=True) + def test_write_leader_optime(self): + self.k.write_leader_optime(12345) + def mock_watch(*args): return urllib3.HTTPResponse()