1
0
Fork 0

Merge pull request #814 from rqlite/e2e-constraint

Don't always run leader-constraint check
master
Philip O'Toole 3 years ago committed by GitHub
commit 442aee44b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -136,7 +136,7 @@ class Node(object):
r.raise_for_status() r.raise_for_status()
return r.json() return r.json()
def is_leader(self): def is_leader(self, constraint_check=True):
''' '''
is_leader returns whether this node is the cluster leader is_leader returns whether this node is the cluster leader
It also performs a check, to ensure the node nevers gives out It also performs a check, to ensure the node nevers gives out
@ -149,7 +149,7 @@ class Node(object):
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
return False return False
if isLeaderRaft != isLeaderNodes: if (isLeaderRaft != isLeaderNodes) and constraint_check:
raise AssertionError("conflicting states reported for leadership (raft: %s, nodes: %s)" raise AssertionError("conflicting states reported for leadership (raft: %s, nodes: %s)"
% (isLeaderRaft, isLeaderNodes)) % (isLeaderRaft, isLeaderNodes))
return isLeaderNodes return isLeaderNodes
@ -293,7 +293,7 @@ def deprovision_node(node):
class Cluster(object): class Cluster(object):
def __init__(self, nodes): def __init__(self, nodes):
self.nodes = nodes self.nodes = nodes
def wait_for_leader(self, node_exc=None, timeout=TIMEOUT): def wait_for_leader(self, node_exc=None, timeout=TIMEOUT, constraint_check=True):
t = 0 t = 0
while True: while True:
if t > timeout: if t > timeout:
@ -301,7 +301,7 @@ class Cluster(object):
for n in self.nodes: for n in self.nodes:
if node_exc is not None and n == node_exc: if node_exc is not None and n == node_exc:
continue continue
if n.is_leader(): if n.is_leader(constraint_check):
return n return n
time.sleep(1) time.sleep(1)
t+=1 t+=1
@ -638,9 +638,10 @@ class TestEndToEndNonVoterFollowsLeader(unittest.TestCase):
j = n.query('SELECT * FROM foo') j = n.query('SELECT * FROM foo')
self.assertEqual(str(j), "{u'results': [{u'values': [[1, u'fiona']], u'types': [u'integer', u'text'], u'columns': [u'id', u'name']}]}") self.assertEqual(str(j), "{u'results': [{u'values': [[1, u'fiona']], u'types': [u'integer', u'text'], u'columns': [u'id', u'name']}]}")
# Kill leader, and then make more changes. # Kill leader, and then make more changes. Don't perform leader-constraint checks
n0 = self.cluster.wait_for_leader().stop() # since the cluster is changing right now.
n1 = self.cluster.wait_for_leader(node_exc=n0) n0 = self.cluster.wait_for_leader(constraint_check=False).stop()
n1 = self.cluster.wait_for_leader(node_exc=n0, constraint_check=False)
n1.wait_for_applied_index(applied) n1.wait_for_applied_index(applied)
j = n1.query('SELECT * FROM foo') j = n1.query('SELECT * FROM foo')
self.assertEqual(str(j), "{u'results': [{u'values': [[1, u'fiona']], u'types': [u'integer', u'text'], u'columns': [u'id', u'name']}]}") self.assertEqual(str(j), "{u'results': [{u'values': [[1, u'fiona']], u'types': [u'integer', u'text'], u'columns': [u'id', u'name']}]}")

Loading…
Cancel
Save