Optional storing of expired and off-stream objects
- a new config file option, network/acceptmismatch, allows the inventory to store objects that expired or are from a stream we're not interested in. Having this on will prevent re-requesting objects that other nodes incorrectly advertise. It defaults to false
This commit is contained in:
parent
d75d920a68
commit
6044df5adf
|
@ -21,6 +21,7 @@ BMConfigDefaults = {
|
||||||
},
|
},
|
||||||
"inventory": {
|
"inventory": {
|
||||||
"storage": "sqlite",
|
"storage": "sqlite",
|
||||||
|
"acceptmismatch": False,
|
||||||
},
|
},
|
||||||
"zlib": {
|
"zlib": {
|
||||||
'maxsize': 1048576
|
'maxsize': 1048576
|
||||||
|
|
|
@ -5,8 +5,6 @@ import math
|
||||||
import time
|
import time
|
||||||
import socket
|
import socket
|
||||||
import struct
|
import struct
|
||||||
import random
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from addresses import calculateInventoryHash
|
from addresses import calculateInventoryHash
|
||||||
from debug import logger
|
from debug import logger
|
||||||
|
@ -278,8 +276,16 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
||||||
raise BMProtoExcessiveDataError()
|
raise BMProtoExcessiveDataError()
|
||||||
|
|
||||||
self.object.checkProofOfWorkSufficient()
|
self.object.checkProofOfWorkSufficient()
|
||||||
|
try:
|
||||||
self.object.checkEOLSanity()
|
self.object.checkEOLSanity()
|
||||||
|
except BMObjectExpiredError:
|
||||||
|
if not BMConfigParser().get("inventory", "acceptmismatch"):
|
||||||
|
raise
|
||||||
|
try:
|
||||||
self.object.checkStream()
|
self.object.checkStream()
|
||||||
|
except BMObjectUnwantedStreamError:
|
||||||
|
if not BMConfigParser().get("inventory", "acceptmismatch"):
|
||||||
|
raise
|
||||||
self.object.checkAlreadyHave()
|
self.object.checkAlreadyHave()
|
||||||
|
|
||||||
if self.object.objectType == protocol.OBJECT_GETPUBKEY:
|
if self.object.objectType == protocol.OBJECT_GETPUBKEY:
|
||||||
|
@ -448,9 +454,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
|
||||||
def handle_close(self, reason=None):
|
def handle_close(self, reason=None):
|
||||||
self.set_state("close")
|
self.set_state("close")
|
||||||
if reason is None:
|
if reason is None:
|
||||||
#logger.debug("%s:%i: closing, %s", self.destination.host, self.destination.port, ''.join(traceback.format_stack()))
|
|
||||||
logger.debug("%s:%i: closing", self.destination.host, self.destination.port)
|
logger.debug("%s:%i: closing", self.destination.host, self.destination.port)
|
||||||
#traceback.print_stack()
|
|
||||||
else:
|
else:
|
||||||
logger.debug("%s:%i: closing, %s", self.destination.host, self.destination.port, reason)
|
logger.debug("%s:%i: closing, %s", self.destination.host, self.destination.port, reason)
|
||||||
AdvancedDispatcher.handle_close(self)
|
AdvancedDispatcher.handle_close(self)
|
||||||
|
|
Reference in New Issue
Block a user