From cd5d20fa53ad06f89caab7afd53247076d4c0d35 Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Thu, 14 Jul 2022 08:07:45 +0200 Subject: [PATCH] Fix bug with GET /read-only-sync endpoint (#2350) effectively it never worked --- patroni/api.py | 2 +- tests/test_api.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/patroni/api.py b/patroni/api.py index d2fd36b2..3b7b4192 100644 --- a/patroni/api.py +++ b/patroni/api.py @@ -141,7 +141,7 @@ class RestApiHandler(BaseHTTPRequestHandler): ignore_tags = True elif 'replica' in path: status_code = replica_status_code - elif 'read-only' in path: + elif 'read-only' in path and 'sync' not in path: status_code = 200 if 200 in (primary_status_code, standby_leader_status_code) else replica_status_code elif 'health' in path: status_code = 200 if response.get('state') == 'running' else 503 diff --git a/tests/test_api.py b/tests/test_api.py index 107bb638..01e5dc89 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -169,7 +169,6 @@ class TestRestApiHandler(unittest.TestCase): MockRestApiServer(RestApiHandler, 'GET /replica?lag=10MB') MockRestApiServer(RestApiHandler, 'GET /replica?lag=10485760') MockRestApiServer(RestApiHandler, 'GET /read-only') - MockRestApiServer(RestApiHandler, 'GET /read-only-sync') with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={})): MockRestApiServer(RestApiHandler, 'GET /replica') with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={'role': 'master'})): @@ -181,13 +180,13 @@ class TestRestApiHandler(unittest.TestCase): MockPatroni.dcs.cluster.is_synchronous_mode = Mock(return_value=True) with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={'role': 'replica'})): MockRestApiServer(RestApiHandler, 'GET /synchronous') - with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={'role': 'replica'})): MockRestApiServer(RestApiHandler, 'GET /read-only-sync') with patch.object(RestApiHandler, 'get_postgresql_status', Mock(return_value={'role': 'replica'})): MockPatroni.dcs.cluster.sync.members = [] MockRestApiServer(RestApiHandler, 'GET /asynchronous') with patch.object(MockHa, 'is_leader', Mock(return_value=True)): MockRestApiServer(RestApiHandler, 'GET /replica') + MockRestApiServer(RestApiHandler, 'GET /read-only-sync') with patch.object(MockHa, 'is_standby_cluster', Mock(return_value=True)): MockRestApiServer(RestApiHandler, 'GET /standby_leader') MockPatroni.dcs.cluster = None