chaind

Base package for chain queue serviceBase package for chain queue service
Log | Files | Refs | LICENSE

commit 1d2656aaed1c0b1a51fcd5db6153f61b28afb2df
parent b198e3f6b12cfe1dc25d7f1e33462cba972b3e6d
Author: lash <dev@holbrook.no>
Date:   Thu, 28 Apr 2022 12:41:03 +0000

Add settings module

Diffstat:
MCHANGELOG | 2++
Mchaind/adapters/fs.py | 12++++++++++--
Mchaind/data/config/config.ini | 1-
Mchaind/settings.py | 60+++++++++++++++++++++++++++++++++++-------------------------
Mrequirements.txt | 4++--
Msetup.cfg | 6+++---
6 files changed, 52 insertions(+), 33 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,3 +1,5 @@ +- 0.1.2 + * add settings object - 0.1.0 * consume non chain-specific code - 0.0.1 diff --git a/chaind/adapters/fs.py b/chaind/adapters/fs.py @@ -1,5 +1,6 @@ # standard imports import logging +import os # external imports from chainlib.error import RPCException @@ -10,6 +11,7 @@ from chainqueue.store.fs import ( CounterStore, ) from shep.store.file import SimpleFileStoreFactory +from shep.error import StateInvalid # local imports from .base import ChaindAdapter @@ -22,7 +24,8 @@ class ChaindFsAdapter(ChaindAdapter): def __init__(self, chain_spec, path, cache_adapter, dispatcher, cache=None, pending_retry_threshold=0, error_retry_threshold=0, digest_bytes=32): factory = SimpleFileStoreFactory(path).add state_store = Status(factory) - index_store = IndexStore(path, digest_bytes=digest_bytes) + index_path = os.path.join(path, 'tx') + index_store = IndexStore(index_path, digest_bytes=digest_bytes) counter_store = CounterStore(path) super(ChaindFsAdapter, self).__init__(chain_spec, state_store, index_store, counter_store, cache_adapter, dispatcher, cache=cache, pending_retry_threshold=pending_retry_threshold, error_retry_threshold=error_retry_threshold) @@ -33,7 +36,12 @@ class ChaindFsAdapter(ChaindAdapter): def get(self, tx_hash): - v = self.store.get(tx_hash) + v = None + try: + v = self.store.get(tx_hash) + except StateInvalid as e: + logg.error('I am just a simple syncer and do not know how to handle the state which the tx {} is in: {}'.format(tx_hash, e)) + return None return v[1] diff --git a/chaind/data/config/config.ini b/chaind/data/config/config.ini @@ -3,4 +3,3 @@ socket_path = runtime_dir = id = data_dir = - diff --git a/chaind/settings.py b/chaind/settings.py @@ -4,32 +4,27 @@ import os import uuid # external imports -from chainlib.chain import ChainSpec from chainsyncer.settings import ChainsyncerSettings +from chainqueue.settings import ChainqueueSettings logg = logging.getLogger(__name__) -class ChaindSettings(ChainsyncerSettings): +class ChaindSettings(ChainsyncerSettings, ChainqueueSettings): def __init__(self, include_sync=False, include_queue=False): - self.o = {} - self.get = self.o.get + super(ChaindSettings, self).__init__() self.include_sync = include_sync self.include_queue = include_queue - def process_common(self, config): - self.o['CHAIN_SPEC'] = ChainSpec.from_chain_str(config.get('CHAIN_SPEC')) - - def process_session(self, config): session_id = config.get('SESSION_ID') base_dir = os.getcwd() data_dir = config.get('SESSION_DATA_DIR') if data_dir == None: - data_dir = os.path.join(base_dir, '.chaind', 'chaind') + data_dir = os.path.join(base_dir, '.chaind', 'chaind', self.o.get('CHAIND_BACKEND')) data_engine_dir = os.path.join(data_dir, config.get('CHAIND_ENGINE')) os.makedirs(data_engine_dir, exist_ok=True) @@ -55,15 +50,17 @@ class ChaindSettings(ChainsyncerSettings): fp = os.path.join(data_engine_dir, 'default') os.symlink(session_dir, fp) - data_dir = os.path.join(session_dir, config.get('CHAIND_COMPONENT')) + #data_dir = os.path.join(session_dir, config.get('CHAIND_COMPONENT')) + data_dir = session_dir os.makedirs(data_dir, exist_ok=True) # create volatile dir uid = os.getuid() runtime_dir = config.get('SESSION_RUNTIME_DIR') if runtime_dir == None: - runtime_dir = os.path.join('/run', 'user', str(uid), 'chaind') - runtime_dir = os.path.join(runtime_dir, config.get('CHAIND_ENGINE'), session_id, config.get('CHAIND_COMPONENT')) + runtime_dir = os.path.join('/run', 'user', str(uid), 'chaind', self.o.get('CHAIND_BACKEND')) + #runtime_dir = os.path.join(runtime_dir, config.get('CHAIND_ENGINE'), session_id, config.get('CHAIND_COMPONENT')) + runtime_dir = os.path.join(runtime_dir, config.get('CHAIND_ENGINE'), session_id) os.makedirs(runtime_dir, exist_ok=True) self.o['SESSION_RUNTIME_DIR'] = runtime_dir @@ -91,25 +88,38 @@ class ChaindSettings(ChainsyncerSettings): def process_dispatch(self, config): self.o['SESSION_DISPATCH_DELAY'] = 0.01 - + + def process_token(self, config): + self.o['TOKEN_MODULE'] = config.get('TOKEN_MODULE') + + + def process_backend(self, config): + if self.include_sync and self.include_queue: + if self.o['QUEUE_BACKEND'] != self.o['SYNCER_BACKEND']: + raise ValueError('queue and syncer backends must match. queue "{}" != syncer "{}"'.format(self.o['QUEUE_BACKEND'], self.o['SYNCER_BACKEND'])) + self.o['CHAIND_BACKEND'] = self.o['SYNCER_BACKEND'] + elif self.include_sync: + self.o['CHAIND_BACKEND'] = self.o['SYNCER_BACKEND'] + elif self.include_queue: + self.o['CHAIND_BACKEND'] = self.o['QUEUE_BACKEND'] + else: + raise ValueError('at least one backend must be set') + + def process(self, config): - self.process_common(config) - self.process_session(config) - self.process_socket(config) + super(ChaindSettings, self).process(config) if self.include_sync: self.process_sync(config) + self.process_sync_backend(config) if self.include_queue: + self.process_queue_backend(config) self.process_dispatch(config) + self.process_token(config) + + self.process_backend(config) + self.process_session(config) + self.process_socket(config) def dir_for(self, k): return os.path.join(self.o['SESSION_DIR'], k) - - - def __str__(self): - ks = list(self.o.keys()) - ks.sort() - s = '' - for k in ks: - s += '{}: {}\n'.format(k, self.o.get(k)) - return s diff --git a/requirements.txt b/requirements.txt @@ -1,6 +1,6 @@ -chainlib~=0.1.0 +chainlib~=0.1.2 chainqueue~=0.1.2 -chainsyncer~=0.3.6 +chainsyncer~=0.4.0 confini~=0.6.0 funga~=0.5.2 pyxdg~=0.26 diff --git a/setup.cfg b/setup.cfg @@ -1,7 +1,7 @@ [metadata] name = chaind -version = 0.1.0 -description = Base package for chain queue servicek +version = 0.1.2 +description = Base package for chain queue service author = Louis Holbrook author_email = dev@holbrook.no url = https://gitlab.com/chaintool/chaind @@ -23,7 +23,7 @@ licence_files = LICENSE [options] -python_requires = >= 3.6 +python_requires = >= 3.7 include_package_data = True packages = chaind