refactoring core databases to not use core anymore
parent
000538ddc8
commit
bf8a9c4f27
|
@ -19,6 +19,7 @@
|
|||
'''
|
||||
import core, onionrexceptions, logger
|
||||
from onionrutils import validatemetadata, blockmetadata
|
||||
from coredb import blockmetadb
|
||||
def importBlockFromData(content, coreInst):
|
||||
retData = False
|
||||
|
||||
|
@ -45,7 +46,7 @@ def importBlockFromData(content, coreInst):
|
|||
except onionrexceptions.DiskAllocationReached:
|
||||
pass
|
||||
else:
|
||||
coreInst.addToBlockDB(blockHash, dataSaved=True)
|
||||
blockmetadb.add_to_block_DB(blockHash, dataSaved=True)
|
||||
blockmetadata.process_block_metadata(coreInst, blockHash) # caches block metadata values to block database
|
||||
retData = True
|
||||
return retData
|
|
@ -82,7 +82,7 @@ def download_blocks_from_communicator(comm_inst):
|
|||
logger.error('Reached disk allocation allowance, cannot save block %s.' % (blockHash,))
|
||||
removeFromQueue = False
|
||||
else:
|
||||
comm_inst._core.addToBlockDB(blockHash, dataSaved=True)
|
||||
blockmetadb.add_to_block_DB(blockHash, dataSaved=True) # add block to meta db
|
||||
blockmetadata.process_block_metadata(comm_inst._core, blockHash) # caches block metadata values to block database
|
||||
else:
|
||||
logger.warn('POW failed for block %s.' % (blockHash,))
|
||||
|
|
|
@ -26,7 +26,7 @@ def clean_old_blocks(comm_inst):
|
|||
'''Delete old blocks if our disk allocation is full/near full, and also expired blocks'''
|
||||
|
||||
# Delete expired blocks
|
||||
for bHash in comm_inst._core.getExpiredBlocks():
|
||||
for bHash in blockmetadb.get_expired_blocks():
|
||||
comm_inst._core._blacklist.addToDB(bHash)
|
||||
comm_inst._core.removeBlock(bHash)
|
||||
logger.info('Deleted block: %s' % (bHash,))
|
||||
|
|
|
@ -164,14 +164,6 @@ class Core:
|
|||
'''
|
||||
self.dbCreate.createBlockDB()
|
||||
|
||||
def addToBlockDB(self, newHash, selfInsert=False, dataSaved=False):
|
||||
'''
|
||||
Add a hash value to the block db
|
||||
|
||||
Should be in hex format!
|
||||
'''
|
||||
coredb.blockmetadb.add.add_to_block_DB(self, newHash, selfInsert, dataSaved)
|
||||
|
||||
def setData(self, data):
|
||||
'''
|
||||
Set the data assciated with a hash
|
||||
|
@ -267,27 +259,6 @@ class Core:
|
|||
'''
|
||||
return coredb.keydb.transportinfo.set_address_info(self, address, key, data)
|
||||
|
||||
def getExpiredBlocks(self):
|
||||
'''Returns a list of expired blocks'''
|
||||
return coredb.blockmetadb.expiredblocks.get_expired_blocks(self)
|
||||
|
||||
def updateBlockInfo(self, hash, key, data):
|
||||
'''
|
||||
sets info associated with a block
|
||||
|
||||
hash - the hash of a block
|
||||
dateReceived - the date the block was recieved, not necessarily when it was created
|
||||
decrypted - if we can successfully decrypt the block (does not describe its current state)
|
||||
dataType - data type of the block
|
||||
dataFound - if the data has been found for the block
|
||||
dataSaved - if the data has been saved for the block
|
||||
sig - optional signature by the author (not optional if author is specified)
|
||||
author - multi-round partial sha3-256 hash of authors public key
|
||||
dateClaimed - timestamp claimed inside the block, only as trustworthy as the block author is
|
||||
expire - expire date for a block
|
||||
'''
|
||||
return coredb.blockmetadb.updateblockinfo.update_block_info(self, hash, key, data)
|
||||
|
||||
def insertBlock(self, data, header='txt', sign=False, encryptType='', symKey='', asymPeer='', meta = {}, expire=None, disableForward=False):
|
||||
'''
|
||||
Inserts a block into the network
|
||||
|
@ -422,8 +393,8 @@ class Core:
|
|||
self.daemonQueueAdd('uploadBlock', retData)
|
||||
else:
|
||||
pass
|
||||
self.addToBlockDB(retData, selfInsert=True, dataSaved=True)
|
||||
blockmetadata.process_block_metadata(self, retData)
|
||||
coredb.blockmetadb.add_to_block_DB(retData, selfInsert=True, dataSaved=True)
|
||||
coredb.blockmetadata.process_block_metadata(self, retData)
|
||||
|
||||
if retData != False:
|
||||
if plaintextPeer == onionrvalues.DENIABLE_PEER_ADDRESS:
|
||||
|
|
|
@ -17,22 +17,21 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
'''
|
||||
import os, sqlite3
|
||||
import os, sqlite3, secrets
|
||||
from onionrutils import epoch, blockmetadata
|
||||
def add_to_block_DB(core_inst, newHash, selfInsert=False, dataSaved=False):
|
||||
from .. import dbfiles
|
||||
def add_to_block_DB(newHash, selfInsert=False, dataSaved=False):
|
||||
'''
|
||||
Add a hash value to the block db
|
||||
|
||||
Should be in hex format!
|
||||
'''
|
||||
|
||||
if not os.path.exists(core_inst.blockDB):
|
||||
raise Exception('Block db does not exist')
|
||||
if blockmetadata.has_block(core_inst, newHash):
|
||||
if blockmetadata.has_block(newHash):
|
||||
return
|
||||
conn = sqlite3.connect(core_inst.blockDB, timeout=30)
|
||||
conn = sqlite3.connect(dbfiles.block_meta_db, timeout=30)
|
||||
c = conn.cursor()
|
||||
currentTime = epoch.get_epoch() + core_inst._crypto.secrets.randbelow(301)
|
||||
currentTime = epoch.get_epoch() + secrets.randbelow(301)
|
||||
if selfInsert or dataSaved:
|
||||
selfInsert = 1
|
||||
else:
|
||||
|
|
|
@ -19,9 +19,10 @@
|
|||
'''
|
||||
import sqlite3
|
||||
from onionrutils import epoch
|
||||
def get_expired_blocks(core_inst):
|
||||
from .. import dbfiles
|
||||
def get_expired_blocks():
|
||||
'''Returns a list of expired blocks'''
|
||||
conn = sqlite3.connect(core_inst.blockDB, timeout=30)
|
||||
conn = sqlite3.connect(dbfiles.block_meta_db, timeout=30)
|
||||
c = conn.cursor()
|
||||
date = int(epoch.get_epoch())
|
||||
|
||||
|
|
|
@ -17,13 +17,27 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
'''
|
||||
|
||||
import sqlite3
|
||||
def update_block_info(core_inst, hash, key, data):
|
||||
from .. import dbfiles
|
||||
def update_block_info(hash, key, data):
|
||||
'''
|
||||
sets info associated with a block
|
||||
|
||||
hash - the hash of a block
|
||||
dateReceived - the date the block was recieved, not necessarily when it was created
|
||||
decrypted - if we can successfully decrypt the block (does not describe its current state)
|
||||
dataType - data type of the block
|
||||
dataFound - if the data has been found for the block
|
||||
dataSaved - if the data has been saved for the block
|
||||
sig - optional signature by the author (not optional if author is specified)
|
||||
author - multi-round partial sha3-256 hash of authors public key
|
||||
dateClaimed - timestamp claimed inside the block, only as trustworthy as the block author is
|
||||
expire - expire date for a block
|
||||
'''
|
||||
if key not in ('dateReceived', 'decrypted', 'dataType', 'dataFound', 'dataSaved', 'sig', 'author', 'dateClaimed', 'expire'):
|
||||
return False
|
||||
|
||||
conn = sqlite3.connect(core_inst.blockDB, timeout=30)
|
||||
conn = sqlite3.connect(dbfiles.block_meta_db, timeout=30)
|
||||
c = conn.cursor()
|
||||
args = (data, hash)
|
||||
c.execute("UPDATE hashes SET " + key + " = ? where hash = ?;", args)
|
||||
|
|
|
@ -23,6 +23,7 @@ from onionrusers import onionrusers
|
|||
from etc import onionrvalues
|
||||
import onionrblockapi
|
||||
from . import epoch, stringvalidators, bytesconverter
|
||||
from coredb import dbfiles, blockmetadb
|
||||
def get_block_metadata_from_data(blockData):
|
||||
'''
|
||||
accepts block contents as string, returns a tuple of
|
||||
|
@ -70,7 +71,7 @@ def process_block_metadata(core_inst, blockHash):
|
|||
|
||||
try:
|
||||
if len(blockType) <= 10:
|
||||
core_inst.updateBlockInfo(blockHash, 'dataType', blockType)
|
||||
blockmetadb.update_block_info(blockHash, 'dataType', blockType)
|
||||
except TypeError:
|
||||
logger.warn("Missing block information")
|
||||
pass
|
||||
|
@ -81,18 +82,18 @@ def process_block_metadata(core_inst, blockHash):
|
|||
except (AssertionError, ValueError, TypeError) as e:
|
||||
expireTime = onionrvalues.OnionrValues().default_expire + curTime
|
||||
finally:
|
||||
core_inst.updateBlockInfo(blockHash, 'expire', expireTime)
|
||||
blockmetadb.update_block_info(blockHash, 'expire', expireTime)
|
||||
if not blockType is None:
|
||||
core_inst.updateBlockInfo(blockHash, 'dataType', blockType)
|
||||
blockmetadb.update_block_info(blockHash, 'dataType', blockType)
|
||||
onionrevents.event('processblocks', data = {'block': myBlock, 'type': blockType, 'signer': signer, 'validSig': valid}, onionr = core_inst.onionrInst)
|
||||
else:
|
||||
pass
|
||||
|
||||
def has_block(core_inst, hash):
|
||||
def has_block(hash):
|
||||
'''
|
||||
Check for new block in the list
|
||||
'''
|
||||
conn = sqlite3.connect(core_inst.blockDB)
|
||||
conn = sqlite3.connect(dbfiles.block_meta_db)
|
||||
c = conn.cursor()
|
||||
if not stringvalidators.validate_hash(hash):
|
||||
raise Exception("Invalid hash")
|
||||
|
|
|
@ -40,7 +40,7 @@ def import_new_blocks(core_inst=None, scanDir=''):
|
|||
with open(block, 'rb') as newBlock:
|
||||
block = block.replace(scanDir, '').replace('.dat', '')
|
||||
if core_inst._crypto.sha3Hash(newBlock.read()) == block.replace('.dat', ''):
|
||||
core_inst.addToBlockDB(block.replace('.dat', ''), dataSaved=True)
|
||||
blockmetadb.add_to_block_DB(block.replace('.dat', ''), dataSaved=True)
|
||||
logger.info('Imported block %s.' % block, terminal=True)
|
||||
blockmetadata.process_block_metadata(core_inst, block)
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue