Skip to content

Commit 53ff3ac

Browse files
committed
Merge branch 'master' into release/0.15
2 parents 5ebe45a + 581c250 commit 53ff3ac

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

tools/tokenserver/database.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

717733
def max_keys_changed_at(user, keys_changed_at):
718734
"""Return the largest `keys_changed_at` between the user record and the

0 commit comments

Comments
 (0)