Pending download stats optimisations
- tracks separately a global list for a faster sum. Needs slightly more memory
This commit is contained in:
parent
a746ba9da7
commit
6655e99aa3
|
@ -534,6 +534,10 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
||||||
del connection.objectsNewToThem[hashId]
|
del connection.objectsNewToThem[hashId]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
try:
|
||||||
|
del state.missingObjects[hashId]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
def handle_close(self):
|
def handle_close(self):
|
||||||
self.set_state("close")
|
self.set_state("close")
|
||||||
|
|
|
@ -5,6 +5,7 @@ from threading import RLock
|
||||||
from debug import logger
|
from debug import logger
|
||||||
from inventory import Inventory
|
from inventory import Inventory
|
||||||
from network.dandelion import Dandelion
|
from network.dandelion import Dandelion
|
||||||
|
from state import missingObjects
|
||||||
|
|
||||||
haveBloom = False
|
haveBloom = False
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@ class ObjectTracker(object):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
if hashId not in Inventory():
|
if hashId not in Inventory():
|
||||||
|
missingObjects[hashId] = None
|
||||||
with self.objectsNewToMeLock:
|
with self.objectsNewToMeLock:
|
||||||
self.objectsNewToMe[hashId] = True
|
self.objectsNewToMe[hashId] = True
|
||||||
elif hashId in Dandelion().hashMap:
|
elif hashId in Dandelion().hashMap:
|
||||||
|
|
|
@ -2,6 +2,7 @@ import time
|
||||||
|
|
||||||
from network.connectionpool import BMConnectionPool
|
from network.connectionpool import BMConnectionPool
|
||||||
import asyncore_pollchoose as asyncore
|
import asyncore_pollchoose as asyncore
|
||||||
|
from state import missingObjects
|
||||||
|
|
||||||
lastReceivedTimestamp = time.time()
|
lastReceivedTimestamp = time.time()
|
||||||
lastReceivedBytes = 0
|
lastReceivedBytes = 0
|
||||||
|
@ -50,19 +51,20 @@ def downloadSpeed():
|
||||||
return currentReceivedSpeed
|
return currentReceivedSpeed
|
||||||
|
|
||||||
def pendingDownload():
|
def pendingDownload():
|
||||||
tmp = {}
|
return len(missingObjects)
|
||||||
for connection in BMConnectionPool().inboundConnections.values() + \
|
#tmp = {}
|
||||||
BMConnectionPool().outboundConnections.values():
|
#for connection in BMConnectionPool().inboundConnections.values() + \
|
||||||
for k in connection.objectsNewToMe.keys():
|
# BMConnectionPool().outboundConnections.values():
|
||||||
tmp[k] = True
|
# for k in connection.objectsNewToMe.keys():
|
||||||
return len(tmp)
|
# tmp[k] = True
|
||||||
|
#return len(tmp)
|
||||||
|
|
||||||
def pendingUpload():
|
def pendingUpload():
|
||||||
tmp = {}
|
#tmp = {}
|
||||||
for connection in BMConnectionPool().inboundConnections.values() + \
|
#for connection in BMConnectionPool().inboundConnections.values() + \
|
||||||
BMConnectionPool().outboundConnections.values():
|
# BMConnectionPool().outboundConnections.values():
|
||||||
for k in connection.objectsNewToThem.keys():
|
# for k in connection.objectsNewToThem.keys():
|
||||||
tmp[k] = True
|
# tmp[k] = True
|
||||||
#This probably isn't the correct logic so it's disabled
|
#This probably isn't the correct logic so it's disabled
|
||||||
#return len(tmp)
|
#return len(tmp)
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -43,6 +43,9 @@ trustedPeer = None
|
||||||
|
|
||||||
discoveredPeers = {}
|
discoveredPeers = {}
|
||||||
|
|
||||||
|
# tracking pending downloads globally, for stats
|
||||||
|
missingObjects = {}
|
||||||
|
|
||||||
Peer = collections.namedtuple('Peer', ['host', 'port'])
|
Peer = collections.namedtuple('Peer', ['host', 'port'])
|
||||||
|
|
||||||
def resetNetworkProtocolAvailability():
|
def resetNetworkProtocolAvailability():
|
||||||
|
|
Reference in New Issue
Block a user