2022-04-20 16:27:59 +02:00
|
|
|
|
# standard imports
|
|
|
|
|
import uuid
|
|
|
|
|
import os
|
|
|
|
|
import logging
|
|
|
|
|
|
|
|
|
|
# external imports
|
|
|
|
|
from shep.store.rocksdb import RocksDbStoreFactory
|
|
|
|
|
|
|
|
|
|
# local imports
|
|
|
|
|
from chainsyncer.store import (
|
|
|
|
|
SyncItem,
|
|
|
|
|
SyncStore,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
logg = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RocksDbStoreAdder:
|
|
|
|
|
|
|
|
|
|
def __init__(self, factory, prefix):
|
|
|
|
|
self.factory = factory
|
|
|
|
|
self.prefix = prefix
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add(self, k):
|
|
|
|
|
path = os.path.join(self.prefix, k)
|
|
|
|
|
return self.factory.add(path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ls(self):
|
|
|
|
|
return self.factory.ls()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SyncRocksDbStore(SyncStore):
|
|
|
|
|
|
|
|
|
|
def __init__(self, base_path, session_id=None, state_event_callback=None, filter_state_event_callback=None):
|
|
|
|
|
super(SyncRocksDbStore, self).__init__(base_path, session_id=session_id)
|
|
|
|
|
|
2022-04-20 17:15:43 +02:00
|
|
|
|
self.factory = RocksDbStoreFactory(self.session_path, binary=True)
|
|
|
|
|
prefix_factory = RocksDbStoreAdder(self.factory, 'sync')
|
2022-04-20 16:27:59 +02:00
|
|
|
|
self.setup_sync_state(prefix_factory, state_event_callback)
|
|
|
|
|
|
2022-04-20 17:15:43 +02:00
|
|
|
|
prefix_factory = RocksDbStoreAdder(self.factory, 'filter')
|
2022-04-20 16:27:59 +02:00
|
|
|
|
self.setup_filter_state(prefix_factory, filter_state_event_callback)
|
|
|
|
|
|
|
|
|
|
self.session_id = os.path.basename(self.session_path)
|
|
|
|
|
logg.info('session id {} resolved {} path {}'.format(session_id, self.session_id, self.session_path))
|
|
|
|
|
|
2022-04-20 17:15:43 +02:00
|
|
|
|
self.target_db = RocksDbStoreAdder(self.factory, '.stat').add('target')
|
2022-04-20 16:27:59 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_target(self):
|
2022-04-20 18:36:06 +02:00
|
|
|
|
v = self.target_db.get('target')
|
|
|
|
|
if v != None:
|
|
|
|
|
self.target = int(v)
|
2022-04-20 16:27:59 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_target(self, v):
|
2022-04-20 18:36:06 +02:00
|
|
|
|
self.target_db.put('target', str(v))
|
|
|
|
|
self.target = v
|
2022-04-20 17:15:43 +02:00
|
|
|
|
|
|
|
|
|
|
2022-04-20 18:36:06 +02:00
|
|
|
|
def stop(self, item):
|
|
|
|
|
if item != None:
|
|
|
|
|
super(SyncRocksDbStore, self).stop(item)
|
2022-04-20 17:15:43 +02:00
|
|
|
|
self.factory.close()
|