diff options
author | Magnus Ahltorp <map@kth.se> | 2014-10-27 14:31:20 +0100 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2014-10-27 14:31:20 +0100 |
commit | 7fd299ab23beee422789f679a35c9526c54fb1fb (patch) | |
tree | 2bc45e7422fd3582c93a6d8c3f72bf55c85dba6b | |
parent | acb3fca6727fe2eb346cac0f48906901c17a89c9 (diff) |
Handle missing entries in merge
-rwxr-xr-x | tools/merge.py | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/tools/merge.py b/tools/merge.py index 14466ff..3aeecdf 100755 --- a/tools/merge.py +++ b/tools/merge.py @@ -79,6 +79,22 @@ def sendlog(baseurl, submission): print "========================" raise e +def sendentry(baseurl, entry, hash): + try: + result = urllib2.urlopen(baseurl + "ct/frontend/sendentry", + json.dumps({"entry":base64.b64encode(entry), "treeleafhash":base64.b64encode(hash)})).read() + return json.loads(result) + except urllib2.HTTPError, e: + print "ERROR: sendentry", e.read() + sys.exit(1) + except ValueError, e: + print "==== FAILED REQUEST ====" + print hash + print "======= RESPONSE =======" + print result + print "========================" + raise e + def sendsth(baseurl, submission): try: result = urllib2.urlopen(baseurl + "ct/frontend/sendsth", @@ -113,6 +129,8 @@ certsinlog = set(logorder) new_entries = [entry for storagenode in storagenodes for entry in get_new_entries(storagenode)] +print "adding entries" +added_entries = 0 for new_entry in new_entries: hash = base64.b64decode(new_entry["hash"]) entry = base64.b64decode(new_entry["entry"]) @@ -121,13 +139,19 @@ for new_entry in new_entries: add_to_logorder(hash) logorder.append(hash) certsinlog.add(hash) - print "added", base64.b16encode(hash) + added_entries += 1 +print "added", added_entries, "entries" for frontendnode in frontendnodes: + print "distributing for node", frontendnode curpos = get_curpos(frontendnode) + print "current position", curpos entries = [base64.b64encode(entry) for entry in logorder[curpos:]] sendlog(frontendnode, {"start": curpos, "hashes": entries}) + print "log sent" missingentries = get_missingentries(frontendnode) print "missing entries:", missingentries - # XXX: no test case for missing entries yet, waiting to implement + for missingentry in missingentries: + hash = base64.b64decode(missingentry) + sendentry(frontendnode, read_chain(hash), hash) sendsth(frontendnode, {"tree_size": len(logorder)}) |