Skip to content

Commit e7e6141

Browse files
authored
Merge pull request kocolosk#3 from natarajaya/GPII-4037
[GPII-4037]: Check membership forever instead of sleeping forever
2 parents 0862a6a + ab25cdb commit e7e6141

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

mem3_helper.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import socket
1313
import backoff
1414
import os
15+
import sys
1516

1617
class PeerDiscoveryException(Exception):
1718
pass
@@ -72,12 +73,36 @@ def connect_the_dots(names):
7273
time.sleep(5)
7374
resp = requests.put(uri, data=json.dumps(doc))
7475
print('Adding cluster member', name, resp.status_code)
76+
print('Cluster membership populated!')
7577

76-
def sleep_forever():
78+
def check_membership_forever():
79+
creds = (os.getenv("COUCHDB_USER"), os.getenv("COUCHDB_PASSWORD"))
80+
expected_peers_count = os.getenv("COUCHDB_CLUSTER_SIZE")
81+
uri = "http://127.0.0.1:5984/_membership"
82+
print('Checking _membership data...')
7783
while True:
78-
time.sleep(5)
84+
if creds[0] and creds[1]:
85+
resp = requests.get(uri, auth=creds)
86+
else:
87+
resp = requests.get(uri)
88+
if resp.status_code != 200:
89+
print('ERROR: _membership responded with', resp.status_code, '!', file=sys.stderr)
90+
else:
91+
try:
92+
membership_json = json.loads(resp.text)
93+
if 'error' in membership_json:
94+
print('ERROR: _membership response contains error:', membership_json['error'], '!', file=sys.stderr)
95+
elif 'cluster_nodes' in membership_json and 'all_nodes' in membership_json:
96+
if membership_json['cluster_nodes'] != membership_json['all_nodes']:
97+
print('ERROR: cluster_nodes contains:', membership_json['cluster_nodes'], 'while all_nodes contains:', membership_json['all_nodes'], '!', file=sys.stderr)
98+
if expected_peers_count and len(membership_json['cluster_nodes']) < int(expected_peers_count):
99+
print('ERROR: cluster_nodes contains', len(membership_json['cluster_nodes']), 'nodes, but expecting', expected_peers_count, 'nodes!', file=sys.stderr)
100+
else:
101+
print('ERROR: _membership response does not contain expected data structure!', file=sys.stderr)
102+
except json.decoder.JSONDecodeError:
103+
print('ERROR: unable to decode JSON in _membership response!', file=sys.stderr)
104+
time.sleep(10)
79105

80106
if __name__ == '__main__':
81107
connect_the_dots(discover_peers(construct_service_record()))
82-
print('Cluster membership populated!')
83-
sleep_forever()
108+
check_membership_forever()

0 commit comments

Comments
 (0)