summary: fix persistent peerstate zero leading window

This commit is contained in:
Michael Schmoock
2020-08-02 22:58:15 +02:00
committed by Christian Decker
parent f4e3383ed6
commit 158a15110f
3 changed files with 49 additions and 25 deletions

View File

@@ -3,8 +3,8 @@ from datetime import datetime
# ensure an rpc peer is added
def addpeer(p, rpcpeer):
pid = rpcpeer['id']
if not pid in p.avail_peerstate:
p.avail_peerstate[pid] = {
if not pid in p.persist['peerstate']:
p.persist['peerstate'][pid] = {
'connected' : rpcpeer['connected'],
'last_seen' : datetime.now() if rpcpeer['connected'] else None,
'avail' : 1.0 if rpcpeer['connected'] else 0.0
@@ -13,8 +13,8 @@ def addpeer(p, rpcpeer):
# exponetially smooth online/offline states of peers
def trace_availability(p, rpcpeers):
p.avail_count += 1
leadwin = max(min(p.avail_window, p.avail_count * p.avail_interval), p.avail_interval)
p.persist['availcount'] += 1
leadwin = max(min(p.avail_window, p.persist['availcount'] * p.avail_interval), p.avail_interval)
samples = leadwin / p.avail_interval
alpha = 1.0 / samples
beta = 1.0 - alpha
@@ -24,9 +24,9 @@ def trace_availability(p, rpcpeers):
addpeer(p, rpcpeer)
if rpcpeer['connected']:
p.avail_peerstate[pid]['last_seen'] = datetime.now()
p.avail_peerstate[pid]['connected'] = True
p.avail_peerstate[pid]['avail'] = 1.0 * alpha + p.avail_peerstate[pid]['avail'] * beta
p.persist['peerstate'][pid]['last_seen'] = datetime.now()
p.persist['peerstate'][pid]['connected'] = True
p.persist['peerstate'][pid]['avail'] = 1.0 * alpha + p.persist['peerstate'][pid]['avail'] * beta
else:
p.avail_peerstate[pid]['connected'] = False
p.avail_peerstate[pid]['avail'] = 0.0 * alpha + p.avail_peerstate[pid]['avail'] * beta
p.persist['peerstate'][pid]['connected'] = False
p.persist['peerstate'][pid]['avail'] = 0.0 * alpha + p.persist['peerstate'][pid]['avail'] * beta