Dandelion fixes
- dandelion would always think there is a cycle and trigger fluff - cycle fluff trigger didn't correctly re-download and re-announce the object. Now it remembers between (d)inv and object commands that it's in a fluff trigger phase.
This commit is contained in:
parent
4690dd6f00
commit
3aa6f386db
|
@ -326,8 +326,8 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
|||
return True
|
||||
|
||||
for i in map(str, items):
|
||||
Dandelion().addHash(i, self)
|
||||
self.handleReceivedInventory(i)
|
||||
Dandelion().addHash(i, self)
|
||||
|
||||
return True
|
||||
|
||||
|
|
|
@ -51,6 +51,8 @@ class BMConnectionPool(object):
|
|||
del i.objectsNewToThem[hashid]
|
||||
except KeyError:
|
||||
pass
|
||||
if hashid in Dandelion().fluff:
|
||||
Dandelion.removeHash(hashid)
|
||||
|
||||
def reRandomiseDandelionStems(self):
|
||||
# Choose 2 peers randomly
|
||||
|
|
|
@ -16,6 +16,7 @@ class Dandelion():
|
|||
self.stem = []
|
||||
self.nodeMap = {}
|
||||
self.hashMap = {}
|
||||
self.fluff = {}
|
||||
self.timeout = {}
|
||||
self.refresh = time() + REASSIGN_INTERVAL
|
||||
self.lock = RLock()
|
||||
|
@ -37,6 +38,14 @@ class Dandelion():
|
|||
del self.timeout[hashId]
|
||||
except KeyError:
|
||||
pass
|
||||
try:
|
||||
del self.fluff[hashId]
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
def fluffTrigger(self, hashId):
|
||||
with self.lock:
|
||||
self.fluff[hashId] = None
|
||||
|
||||
def maybeAddStem(self, connection):
|
||||
# fewer than MAX_STEMS outbound connections at last reshuffle?
|
||||
|
|
|
@ -82,16 +82,14 @@ class ObjectTracker(object):
|
|||
del self.objectsNewToThem[hashId]
|
||||
except KeyError:
|
||||
pass
|
||||
if hashId not in Inventory():
|
||||
# Fluff trigger by cycle detection
|
||||
if hashId not in Inventory() or hashId in Dandelion().hashMap:
|
||||
if hashId in Dandelion().hashMap:
|
||||
Dandelion().fluffTrigger(hashId)
|
||||
if hashId not in missingObjects:
|
||||
missingObjects[hashId] = time.time()
|
||||
with self.objectsNewToMeLock:
|
||||
self.objectsNewToMe[hashId] = True
|
||||
elif hashId in Dandelion().hashMap:
|
||||
# Fluff trigger by cycle detection
|
||||
Dandelion().removeHash(hashId)
|
||||
with self.objectsNewToMeLock:
|
||||
self.objectsNewToMe[hashId] = True
|
||||
|
||||
def hasAddr(self, addr):
|
||||
if haveBloom:
|
||||
|
|
Reference in New Issue
Block a user