optimize next block counting on errors, fix bugs, remove script locking

This commit is contained in:
D4708 2021-07-01 15:37:29 +03:00
parent 76fd98ba08
commit 72f351522a

View File

@ -17,8 +17,7 @@ blocksInStep = 100 # blocks processing by the one step
squattersStop = 20 # max users per block. Reset the blocksInStep on this quantity to prevent CPU overload squattersStop = 20 # max users per block. Reset the blocksInStep on this quantity to prevent CPU overload
class MyDb: class MyDb:
lastBlockHash = 0 nextBlockHash = False
dataLock = False
try: try:
from bitcoinrpc.authproxy import AuthServiceProxy from bitcoinrpc.authproxy import AuthServiceProxy
@ -36,52 +35,44 @@ twister = AuthServiceProxy(serverUrl)
try: try:
db = cPickle.load(open(dbFileName)) db = cPickle.load(open(dbFileName))
nextHash = db.lastBlockHash
dataLock = db.dataLock
except: except:
db = MyDb() db = MyDb()
nextHash = twister.getblockhash(0)
dataLock = db.dataLock
if not dataLock: print "blockchain reading..."
db.dataLock = True while True:
cPickle.dump(db, open(dbFileName, "w"))
print "blockchain reading..." block = twister.getblock(db.nextBlockHash)
while True: if squattersStopCurrent < 0:
break
block = twister.getblock(nextHash) blocksInStep = blocksInStep - 1
db.lastBlockHash = block["hash"]
if squattersStopCurrent < 0: if blocksInStep < 0:
db.dataLock = False break
break
blocksInStep = blocksInStep - 1 print "read block", str(block["height"])# + "\r",
if blocksInStep < 0: squattersStopCurrent = squattersStop
db.dataLock = False
break
print "read block", str(block["height"])# + "\r", for u in block["usernames"]:
print "follow", u
twister.follow(nodeUserName, [u])
squattersStopCurrent = squattersStopCurrent - 1
squattersStopCurrent = squattersStop if block.has_key("nextblockhash"):
for u in block["usernames"]: db.nextBlockHash = block["nextblockhash"]
print "follow", u
twister.follow(nodeUserName, [u])
squattersStopCurrent = squattersStopCurrent - 1
if block.has_key("nextblockhash"):
nextHash = block["nextblockhash"]
else:
print "database is up to date..."
break
cPickle.dump(db, open(dbFileName, "w")) print "save block state."
cPickle.dump(db, open(dbFileName, "w"))
print "task completed." else:
print "database is up to date..."
break
print "task completed."
else: else:
print "operation locked by the running process." print "operation locked by the running process."