77import six
88
99from .dcs import Member , Cluster
10- from .dcs .kubernetes import catch_kubernetes_errors , Kubernetes
10+ from .dcs .kubernetes import catch_kubernetes_errors
1111from .exceptions import DCSError
1212
1313import kubernetes
1414
1515logger = logging .getLogger (__name__ )
1616
17+
1718@six .add_metaclass (abc .ABCMeta )
1819class AbstractSiteController (object ):
1920 # Set whether we are relying on this controller for providing standby config
@@ -56,11 +57,13 @@ def should_failover(self):
5657 def on_shutdown (self , checkpoint_location ):
5758 pass
5859
60+
5961class SingleSiteController (AbstractSiteController ):
6062 """Do nothing controller for single site operation."""
6163 def status (self ):
6264 return {"status" : "Leader" , "active" : False }
6365
66+
6467class MultisiteController (Thread , AbstractSiteController ):
6568 is_active = True
6669
@@ -96,7 +99,7 @@ def __init__(self, config, on_change=None):
9699 if msconfig .get ('update_crd' ):
97100 self ._state_updater = KubernetesStateManagement (msconfig .get ('update_crd' ),
98101 msconfig .get ('crd_uid' ),
99- reporter = self .name , # Use pod name?
102+ reporter = self .name , # Use pod name?
100103 crd_api = msconfig .get ('crd_api' , 'acid.zalan.do/v1' ))
101104 else :
102105 self ._state_updater = None
@@ -191,7 +194,6 @@ def _check_transition(self, leader, note=None):
191194 self ._state_updater .state_transition ('Leader' if leader else 'Standby' , note )
192195 self ._status = leader
193196
194-
195197 def _resolve_multisite_leader (self ):
196198 logger .info ("Running multisite consensus" )
197199 try :
@@ -265,7 +267,8 @@ def _resolve_multisite_leader(self):
265267 # _check_transition() handles the wake.
266268 if not self ._has_leader :
267269 self .on_change ()
268- note = f"Lost leader lock to { lock_owner } " if self ._has_leader else f"Current leader is { lock_owner } "
270+ note = f"Lost leader lock to { lock_owner } " if self ._has_leader \
271+ else f"Current leader is { lock_owner } "
269272 self ._check_transition (leader = False , note = note )
270273
271274 except DCSError as e :
@@ -281,7 +284,7 @@ def _resolve_multisite_leader(self):
281284 try :
282285 self ._update_history (cluster )
283286 self .touch_member ()
284- except DCSError as e :
287+ except DCSError :
285288 pass
286289
287290 def _observe_leader (self ):
@@ -350,7 +353,7 @@ def touch_member(self):
350353 def run (self ):
351354 self ._observe_leader ()
352355 while not self ._heartbeat .wait (self .config ['observe_interval' ]):
353- # Keep track of who the leader is, even when we are not the primary node.
356+ # Keep track of who the leader is, even when we are not the primary node.
354357 # Needed to be able to rewind from the leader.
355358 self ._observe_leader ()
356359 while not self .stop_requested :
@@ -376,7 +379,7 @@ def __init__(self, crd_name, crd_uid, reporter, crd_api):
376379 self .crd_api_group , self .crd_api_version = crd_api .rsplit ('/' , 1 )
377380
378381 # TODO: handle config loading when main DCS is not Kubernetes based
379- #apiclient = k8s_client.ApiClient(False)
382+ # apiclient = k8s_client.ApiClient(False)
380383 kubernetes .config .load_incluster_config ()
381384 apiclient = kubernetes .client .ApiClient ()
382385 self ._customobj_api = kubernetes .client .CustomObjectsApi (apiclient )
@@ -423,9 +426,10 @@ def store_updates(self):
423426
424427 @catch_kubernetes_errors
425428 def update_crd_state (self , update ):
426- self ._customobj_api .patch_namespaced_custom_object_status (self .crd_api_group , self .crd_api_version , self .crd_namespace ,
427- 'postgresqls' , self .crd_name + '/status' , update ,
428- field_manager = 'patroni' )
429+ self ._customobj_api .patch_namespaced_custom_object_status (self .crd_api_group , self .crd_api_version ,
430+ self .crd_namespace , 'postgresqls' ,
431+ self .crd_name + '/status' , update ,
432+ field_manager = 'patroni' )
429433
430434 return True
431435
0 commit comments