@@ -265,6 +265,9 @@ def __init__(self):
265265 get ("NODE_CAPACITY_RELEASE_RATE" , 0.1 )
266266 self .spanner_node_id = os .environ .get (
267267 "SYNC_TOKENSERVER__SPANNER_NODE_ID" )
268+ self .spanner_node = None
269+ if self .spanner_node_id :
270+ self .spanner_node = self .get_spanner_node (self .spanner_node_id )
268271
269272 def _execute_sql (self , * args , ** kwds ):
270273 return self .database .execute (* args , ** kwds )
@@ -522,8 +525,9 @@ def replace_user_record(self, uid, timestamp=None):
522525 def delete_user_record (self , uid ):
523526 """Delete the user record with the given uid."""
524527 params = {'service' : self ._get_service_id (SERVICE_NAME ), 'uid' : uid }
525- res = self ._execute_sql (_FREE_SLOT_ON_NODE , ** params )
526- res .close ()
528+ if not self .spanner_node_id :
529+ res = self ._execute_sql (_FREE_SLOT_ON_NODE , ** params )
530+ res .close ()
527531 res = self ._execute_sql (_DELETE_USER_RECORD , ** params )
528532 res .close ()
529533
@@ -655,13 +659,13 @@ def get_best_node(self):
655659 """Returns the 'least loaded' node currently available, increments the
656660 active count on that node, and decrements the slots currently available
657661 """
662+ # The spanner node is the best node.
663+ if self .spanner_node :
664+ return self .spanner_node_id , self .spanner_node
665+ # if, for whatever reason, we haven't gotten the spanner node yet...
658666 if self .spanner_node_id :
659- res = self ._execute_sql (
660- _GET_SPANNER_NODE ,
661- id = self .spanner_node_id
662- )
663- row = res .fetchone ()
664- res .close ()
667+ self .spanner_node = self .get_spanner_node (self .spanner_node_id )
668+ return self .spanner_node_id , self .spanner_node
665669 else :
666670 # We may have to re-try the query if we need to release more
667671 # capacity. This loop allows a maximum of five retries before
@@ -704,6 +708,8 @@ def get_best_node(self):
704708 return nodeid , node
705709
706710 def get_node (self , node ):
711+ if node is None :
712+ raise Exception ("NONE node" )
707713 res = self ._execute_sql (_GET_NODE ,
708714 service = self ._get_service_id (SERVICE_NAME ),
709715 node = node )
@@ -713,6 +719,16 @@ def get_node(self, node):
713719 raise Exception ('unknown node: ' + node )
714720 return row
715721
722+ # somewhat simplified version that just gets the one Spanner node.
723+ def get_spanner_node (self , node ):
724+ res = self ._execute_sql (_GET_SPANNER_NODE ,
725+ id = node )
726+ row = res .fetchone ()
727+ res .close ()
728+ if row is None :
729+ raise Exception (f'unknown node: { node } ' )
730+ return str (row .node )
731+
716732
717733def max_keys_changed_at (user , keys_changed_at ):
718734 """Return the largest `keys_changed_at` between the user record and the
0 commit comments