From 3d089fe90423f90539f4193334e46ee83339dc2e Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 16:12:22 +0300 Subject: [PATCH 1/8] create 3 files. init: indexes, schema, tables(spaces). this is used for initializing space,index and schema separately, and getting an output for specific command --- planetmint/backend/tarantool/init_indexes.lua | 32 ++++++++++++ planetmint/backend/tarantool/init_schema.lua | 13 +++++ planetmint/backend/tarantool/init_tables.lua | 13 +++++ rem_req.txt | 52 +++++++++++++++++++ 4 files changed, 110 insertions(+) create mode 100644 planetmint/backend/tarantool/init_indexes.lua create mode 100644 planetmint/backend/tarantool/init_schema.lua create mode 100644 planetmint/backend/tarantool/init_tables.lua create mode 100644 rem_req.txt diff --git a/planetmint/backend/tarantool/init_indexes.lua b/planetmint/backend/tarantool/init_indexes.lua new file mode 100644 index 0000000..446ae40 --- /dev/null +++ b/planetmint/backend/tarantool/init_indexes.lua @@ -0,0 +1,32 @@ +abci_chains:create_index('id_search' ,{type='hash', parts={'chain_id'}}) +abci_chains:create_index('height_search' ,{type='tree',unique=false, parts={'height'}}) +assets:create_index('txid_search', {type='hash', parts={'tx_id'}}) +assets:create_index('assetid_search', {type='tree',unique=false, parts={'asset_id', 'tx_id'}}) +assets:create_index('only_asset_search', {type='tree', unique=false, parts={'asset_id'}}) +blocks:create_index('id_search' , {type='hash' , parts={'block_id'}}) +blocks:create_index('block_search' , {type='tree', unique = false, parts={'height'}}) +blocks:create_index('block_id_search', {type = 'hash', parts ={'block_id'}}) +blocks_tx:create_index('id_search',{ type = 'hash', parts={'transaction_id'}}) +blocks_tx:create_index('block_search', {type = 'tree',unique=false, parts={'block_id'}}) +elections:create_index('id_search' , {type='hash', parts={'election_id'}}) +elections:create_index('height_search' , {type='tree',unique=false, parts={'height'}}) +elections:create_index('update_search', {type='tree', unique=false, parts={'election_id', 'height'}}) +meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}}) +pre_commits:create_index('id_search', {type ='hash' , parts={'commit_id'}}) +pre_commits:create_index('height_search', {type ='tree',unique=true, parts={'height'}}) +validators:create_index('id_search' , {type='hash' , parts={'validator_id'}}) +validators:create_index('height_search' , {type='tree', unique=true, parts={'height'}}) +transactions:create_index('id_search' , {type = 'hash' , parts={'transaction_id'}}) +transactions:create_index('transaction_search' , {type = 'tree',unique=false, parts={'operation', 'transaction_id'}}) +inputs:create_index('delete_search' , {type = 'hash', parts={'input_id'}}) +inputs:create_index('spent_search' , {type = 'tree', unique=false, parts={'fulfills_transaction_id', 'fulfills_output_index'}}) +inputs:create_index('id_search', {type = 'tree', unique=false, parts = {'transaction_id'}}) +outputs:create_index('unique_search' ,{type='hash', parts={'output_id'}}) +outputs:create_index('id_search' ,{type='tree', unique=false, parts={'transaction_id'}}) +keys:create_index('id_search', {type = 'hash', parts={'id'}}) +keys:create_index('keys_search', {type = 'tree', unique=false, parts={'public_key'}}) +keys:create_index('txid_search', {type = 'tree', unique=false, parts={'transaction_id'}}) +keys:create_index('output_search', {type = 'tree', unique=false, parts={'output_id'}}) +utxos:create_index('id_search', {type='hash' , parts={'transaction_id', 'output_index'}}) +utxos:create_index('transaction_search', {type='tree', unique=false, parts={'transaction_id'}}) +utxos:create_index('index_search', {type='tree', unique=false, parts={'output_index'}}) \ No newline at end of file diff --git a/planetmint/backend/tarantool/init_schema.lua b/planetmint/backend/tarantool/init_schema.lua new file mode 100644 index 0000000..69fc487 --- /dev/null +++ b/planetmint/backend/tarantool/init_schema.lua @@ -0,0 +1,13 @@ +abci_chains:format({{name='height' , type='integer'},{name='is_synched' , type='boolean'},{name='chain_id',type='string'}}) +assets:format({{name='data' , type='any'}, {name='tx_id', type='string'}, {name='asset_id', type='string'}}) +blocks:format{{name='app_hash',type='string'},{name='height' , type='integer'},{name='block_id' , type='string'}} +blocks_tx:format{{name='transaction_id', type = 'string'}, {name = 'block_id', type = 'string'}} +elections:format({{name='election_id' , type='string'},{name='height' , type='integer'}, {name='is_concluded' , type='boolean'}}) +meta_datas:format({{name='transaction_id' , type='string'}, {name='meta_data' , type='any'}}) +pre_commits:format({{name='commit_id', type='string'}, {name='height',type='integer'}, {name='transactions',type=any}}) +validators:format({{name='validator_id' , type='string'},{name='height',type='integer'},{name='validators' , type='any'}}) +transactions:format({{name='transaction_id' , type='string'}, {name='operation' , type='string'}, {name='version' ,type='string'}, {name='dict_map', type='any'}}) +inputs:format({{name='transaction_id' , type='string'}, {name='fulfillment' , type='any'}, {name='owners_before' , type='array'}, {name='fulfills_transaction_id', type = 'string'}, {name='fulfills_output_index', type = 'string'}, {name='input_id', type='string'}, {name='input_index', type='number'}}) +outputs:format({{name='transaction_id' , type='string'}, {name='amount' , type='string'}, {name='uri', type='string'}, {name='details_type', type='string'}, {name='details_public_key', type='any'}, {name = 'output_id', type = 'string'}, {name='treshold', type='any'}, {name='subconditions', type='any'}, {name='output_index', type='number'}}) +keys:format({{name = 'id', type='string'}, {name = 'transaction_id', type = 'string'} ,{name = 'output_id', type = 'string'}, {name = 'public_key', type = 'string'}, {name = 'key_index', type = 'integer'}}) +utxos:format({{name='transaction_id' , type='string'}, {name='output_index' , type='integer'}, {name='utxo_dict', type='string'}}) \ No newline at end of file diff --git a/planetmint/backend/tarantool/init_tables.lua b/planetmint/backend/tarantool/init_tables.lua new file mode 100644 index 0000000..113aa4e --- /dev/null +++ b/planetmint/backend/tarantool/init_tables.lua @@ -0,0 +1,13 @@ +abci_chains = box.schema.space.create('abci_chains', {engine='memtx', is_sync = false}) +assets = box.schema.space.create('assets' , {engine='memtx' , is_sync=false}) +blocks = box.schema.space.create('blocks' , {engine='memtx' , is_sync=false}) +blocks_tx = box.schema.space.create('blocks_tx') +elections = box.schema.space.create('elections',{engine = 'memtx' , is_sync = false}) +meta_datas = box.schema.space.create('meta_data',{engine = 'memtx' , is_sync = false}) +pre_commits = box.schema.space.create('pre_commits' , {engine='memtx' , is_sync=false}) +validators = box.schema.space.create('validators' , {engine = 'memtx' , is_sync = false}) +transactions = box.schema.space.create('transactions',{engine='memtx' , is_sync=false}) +inputs = box.schema.space.create('inputs') +outputs = box.schema.space.create('outputs') +keys = box.schema.space.create('keys') +utxos = box.schema.space.create('utxos', {engine = 'memtx' , is_sync = false}) \ No newline at end of file diff --git a/rem_req.txt b/rem_req.txt new file mode 100644 index 0000000..1ccbd67 --- /dev/null +++ b/rem_req.txt @@ -0,0 +1,52 @@ +abci==0.8.3 +aiohttp==3.8.1 +aiosignal==1.2.0 +aniso8601==9.0.1 +async-timeout==4.0.2 +attrs==21.4.0 +base58==2.1.0 +capturer==3.0 +certifi==2022.5.18.1 +cffi==1.15.0 +chardet==3.0.4 +charset-normalizer==2.0.12 +click==8.1.3 +colorlog==6.6.0 +cryptography==3.4.7 +Flask==2.1.2 +Flask-Cors==3.0.10 +Flask-RESTful==0.3.9 +frozenlist==1.3.0 +gunicorn==20.1.0 +humanfriendly==10.0 +idna==2.10 +importlib-metadata==4.11.4 +itsdangerous==2.1.2 +Jinja2==3.1.2 +jsonschema==3.2.0 +logstats==0.3.0 +MarkupSafe==2.1.1 +msgpack==1.0.3 +multidict==6.0.2 +packaging==21.3 +Planetmint==0.9.2 +planetmint-cryptoconditions==0.9.5 +protobuf==4.21.0rc2 +pyasn1==0.4.8 +pycparser==2.21 +pymongo==3.11.4 +PyNaCl==1.4.0 +pyparsing==3.0.9 +pyrsistent==0.18.1 +python-rapidjson==1.0 +pytz==2022.1 +PyYAML==5.4.1 +requests==2.25.1 +setproctitle==1.2.2 +six==1.16.0 +tarantool==0.7.1 +urllib3==1.26.9 +Werkzeug==2.0.3 +yarl==1.7.2 +zenroom==2.0.0.dev1644927841 +zipp==3.8.0 From 5723e24498a0ed376b3acdc17849246387788ace Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 18:38:44 +0300 Subject: [PATCH 2/8] added to schema all execute commands in dictionary format --- planetmint/backend/tarantool/schema.py | 120 +++++++++++++++++++++++++ rem_req.txt | 52 ----------- 2 files changed, 120 insertions(+), 52 deletions(-) delete mode 100644 rem_req.txt diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index c7f50b8..cc4fb69 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -6,6 +6,126 @@ from planetmint.backend.tarantool.connection import TarantoolDB register_schema = module_dispatch_registrar(backend.schema) +SPACE_NAMES = ("abci_chains", "assets", "blocks", "blocks_tx", + "elections", "meta_data", "pre_commits", "validators", + "transactions", "inputs", "outputs", "keys") + +SPACE_COMMANDS = { + "abci_chains": "abci_chains = box.schema.space.create('abci_chains', {engine='memtx', is_sync = false})", + "assets": "assets = box.schema.space.create('assets' , {engine='memtx' , is_sync=false})", + "blocks": "blocks = box.schema.space.create('blocks' , {engine='memtx' , is_sync=false})", + "blocks_tx": "blocks_tx = box.schema.space.create('blocks_tx')", + "elections": "elections = box.schema.space.create('elections',{engine = 'memtx' , is_sync = false})", + "meta_data": "meta_datas = box.schema.space.create('meta_data',{engine = 'memtx' , is_sync = false})", + "pre_commits": "pre_commits = box.schema.space.create('pre_commits' , {engine='memtx' , is_sync=false})", + "validators": "validators = box.schema.space.create('validators' , {engine = 'memtx' , is_sync = false})", + "transactions": "transactions = box.schema.space.create('transactions',{engine='memtx' , is_sync=false})", + "inputs": "inputs = box.schema.space.create('inputs')", + "outputs": "outputs = box.schema.space.create('outputs')", + "keys": "keys = box.schema.space.create('keys')", + "utxos": "utxos = box.schema.space.create('utxos', {engine = 'memtx' , is_sync = false})" +} + +INDEX_COMMANDS = { + "abci_chains": + { + "id_search": "abci_chains:create_index('id_search' ,{type='hash', parts={'chain_id'}})", + "height_search": "abci_chains:create_index('height_search' ,{type='tree',unique=false, parts={'height'}})" + }, + "assets": + { + "txid_search": "assets:create_index('txid_search', {type='hash', parts={'tx_id'}})", + "assetid_search": "assets:create_index('assetid_search', {type='tree',unique=false, parts={'asset_id', 'tx_id'}})", + "only_asset_search": "assets:create_index('only_asset_search', {type='tree', unique=false, parts={'asset_id'}})" + }, + "blocks": + { + "id_search": "blocks:create_index('id_search' , {type='hash' , parts={'block_id'}})", + "block_search": "blocks:create_index('block_search' , {type='tree', unique = false, parts={'height'}})", + "block_id_search": "blocks:create_index('block_id_search', {type = 'hash', parts ={'block_id'}})" + }, + "blocks_tx": + { + "id_search": "blocks_tx:create_index('id_search',{ type = 'hash', parts={'transaction_id'}})", + "block_search": "blocks_tx:create_index('block_search', {type = 'tree',unique=false, parts={'block_id'}})" + }, + "elections": + { + "id_search": "elections:create_index('id_search' , {type='hash', parts={'election_id'}})", + "height_search": "elections:create_index('height_search' , {type='tree',unique=false, parts={'height'}})", + "update_search": "elections:create_index('update_search', {type='tree', unique=false, parts={'election_id', 'height'}})" + }, + "meta_data": + { + "id_search": "meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}})" + }, + "pre_commits": + { + "id_search": "pre_commits:create_index('id_search', {type ='hash' , parts={'commit_id'}})", + "height_search": "pre_commits:create_index('height_search', {type ='tree',unique=true, parts={'height'}})" + }, + "validators": + { + "id_search": "validators:create_index('id_search' , {type='hash' , parts={'validator_id'}})", + "height_search": "validators:create_index('height_search' , {type='tree', unique=true, parts={'height'}})" + }, + "transactions": + { + "id_search": "transactions:create_index('id_search' , {type = 'hash' , parts={'transaction_id'}})", + "transaction_search": "transactions:create_index('transaction_search' , {type = 'tree',unique=false, parts={'operation', 'transaction_id'}})" + }, + "inputs": + { + "delete_search": "inputs:create_index('delete_search' , {type = 'hash', parts={'input_id'}})", + "spent_search": "inputs:create_index('spent_search' , {type = 'tree', unique=false, parts={'fulfills_transaction_id', 'fulfills_output_index'}})", + "id_search": "inputs:create_index('id_search', {type = 'tree', unique=false, parts = {'transaction_id'}})" + }, + "outputs": + { + "unique_search": "outputs:create_index('unique_search' ,{type='hash', parts={'output_id'}})", + "id_search": "outputs:create_index('id_search' ,{type='tree', unique=false, parts={'transaction_id'}})" + }, + "keys": + { + "id_search": "keys:create_index('id_search', {type = 'hash', parts={'id'}})", + "keys_search": "keys:create_index('keys_search', {type = 'tree', unique=false, parts={'public_key'}})", + "txid_search": "keys:create_index('txid_search', {type = 'tree', unique=false, parts={'transaction_id'}})", + "output_search": "keys:create_index('output_search', {type = 'tree', unique=false, parts={'output_id'}})" + }, + "utxos": + { + "id_search": "utxos:create_index('id_search', {type='hash' , parts={'transaction_id', 'output_index'}})", + "transaction_search": "utxos:create_index('transaction_search', {type='tree', unique=false, parts={'transaction_id'}})", + "index_Search": "utxos:create_index('index_search', {type='tree', unique=false, parts={'output_index'}})" + } +} + +SCHEMA_COMMANDS = { + "abci_chains": + "abci_chains:format({{name='height' , type='integer'},{name='is_synched' , type='boolean'},{name='chain_id',type='string'}})", + "assets": + "assets:format({{name='data' , type='any'}, {name='tx_id', type='string'}, {name='asset_id', type='string'}})", + "blocks": + "blocks:format{{name='app_hash',type='string'},{name='height' , type='integer'},{name='block_id' , type='string'}}", + "blocks_tx": "blocks_tx:format{{name='transaction_id', type = 'string'}, {name = 'block_id', type = 'string'}}", + "elections": + "elections:format({{name='election_id' , type='string'},{name='height' , type='integer'}, {name='is_concluded' , type='boolean'}})", + "meta_data": "meta_datas:format({{name='transaction_id' , type='string'}, {name='meta_data' , type='any'}})", + "pre_commits": + "pre_commits:format({{name='commit_id', type='string'}, {name='height',type='integer'}, {name='transactions',type=any}})", + "validators": + "validators:format({{name='validator_id' , type='string'},{name='height',type='integer'},{name='validators' , type='any'}})", + "transactions": + "transactions:format({{name='transaction_id' , type='string'}, {name='operation' , type='string'}, {name='version' ,type='string'}, {name='dict_map', type='any'}})", + "inputs": + "inputs:format({{name='transaction_id' , type='string'}, {name='fulfillment' , type='any'}, {name='owners_before' , type='array'}, {name='fulfills_transaction_id', type = 'string'}, {name='fulfills_output_index', type = 'string'}, {name='input_id', type='string'}, {name='input_index', type='number'}})", + "outputs": + "outputs:format({{name='transaction_id' , type='string'}, {name='amount' , type='string'}, {name='uri', type='string'}, {name='details_type', type='string'}, {name='details_public_key', type='any'}, {name = 'output_id', type = 'string'}, {name='treshold', type='any'}, {name='subconditions', type='any'}, {name='output_index', type='number'}})", + "keys": + "keys:format({{name = 'id', type='string'}, {name = 'transaction_id', type = 'string'} ,{name = 'output_id', type = 'string'}, {name = 'public_key', type = 'string'}, {name = 'key_index', type = 'integer'}})", + "utxos": + "utxos:format({{name='transaction_id' , type='string'}, {name='output_index' , type='integer'}, {name='utxo_dict', type='string'}})" +} @register_schema(TarantoolDB) def drop_database(connection, not_used=None): diff --git a/rem_req.txt b/rem_req.txt deleted file mode 100644 index 1ccbd67..0000000 --- a/rem_req.txt +++ /dev/null @@ -1,52 +0,0 @@ -abci==0.8.3 -aiohttp==3.8.1 -aiosignal==1.2.0 -aniso8601==9.0.1 -async-timeout==4.0.2 -attrs==21.4.0 -base58==2.1.0 -capturer==3.0 -certifi==2022.5.18.1 -cffi==1.15.0 -chardet==3.0.4 -charset-normalizer==2.0.12 -click==8.1.3 -colorlog==6.6.0 -cryptography==3.4.7 -Flask==2.1.2 -Flask-Cors==3.0.10 -Flask-RESTful==0.3.9 -frozenlist==1.3.0 -gunicorn==20.1.0 -humanfriendly==10.0 -idna==2.10 -importlib-metadata==4.11.4 -itsdangerous==2.1.2 -Jinja2==3.1.2 -jsonschema==3.2.0 -logstats==0.3.0 -MarkupSafe==2.1.1 -msgpack==1.0.3 -multidict==6.0.2 -packaging==21.3 -Planetmint==0.9.2 -planetmint-cryptoconditions==0.9.5 -protobuf==4.21.0rc2 -pyasn1==0.4.8 -pycparser==2.21 -pymongo==3.11.4 -PyNaCl==1.4.0 -pyparsing==3.0.9 -pyrsistent==0.18.1 -python-rapidjson==1.0 -pytz==2022.1 -PyYAML==5.4.1 -requests==2.25.1 -setproctitle==1.2.2 -six==1.16.0 -tarantool==0.7.1 -urllib3==1.26.9 -Werkzeug==2.0.3 -yarl==1.7.2 -zenroom==2.0.0.dev1644927841 -zipp==3.8.0 From fbeff0947154115a2a7260cc5bda9e1d0f738a68 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 18:41:11 +0300 Subject: [PATCH 3/8] Added create_tables function for tarantool connection --- planetmint/backend/tarantool/schema.py | 53 ++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index cc4fb69..c7dacdc 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -1,5 +1,4 @@ -import warnings - +import tarantool from planetmint.backend.utils import module_dispatch_registrar from planetmint import backend from planetmint.backend.tarantool.connection import TarantoolDB @@ -127,6 +126,7 @@ SCHEMA_COMMANDS = { "utxos:format({{name='transaction_id' , type='string'}, {name='output_index' , type='integer'}, {name='utxo_dict', type='string'}})" } + @register_schema(TarantoolDB) def drop_database(connection, not_used=None): connection.drop_database() @@ -137,9 +137,48 @@ def create_database(connection, not_used=None): connection.init_database() +def run_command_with_output(command): + from subprocess import run + host_port = "%s:%s" % ("localhost", 3303) + output = run(["tarantoolctl", "connect", host_port], + input=command, + capture_output=True).stderr + output = output.decode() + return output + + @register_schema(TarantoolDB) -def create_tables(connection, not_used=None): - """ - This function is not necessary for using backend tarantool. - """ - warnings.warn("Function ::create_tables:: Ignored. Not used for create_tables") +def create_tables(used_for_dispatch): + for _space in SPACE_NAMES: + try: + cmd = SPACE_COMMANDS[_space].encode() + _output = run_command_with_output(command=cmd) + if "exists" in _output: + raise tarantool.error.SchemaError(f"Space '{_space}' already exists") + else: + print(f"Space '{_space}' created.") + except tarantool.error.SchemaError as exists_error: + print(exists_error) + continue + create_schema(space_name=_space) + create_indexes(space_name=_space) + + +def create_indexes(space_name): + try: + indexes = INDEX_COMMANDS[space_name] + for index_name, index_cmd in indexes.items(): + _output = run_command_with_output(command=index_cmd.encode()) + if "exists" in _output: + raise tarantool.error.SchemaError(f"Index {index_name} already exists.") + except tarantool.error.SchemaError as exists_error: + print(exists_error) + + +def create_schema(space_name): + try: + cmd = SCHEMA_COMMANDS[space_name].encode() + _output = run_command_with_output(command=cmd) + print(f"Schema created for {space_name} succesfully.") + except Exception as unexpected_error: + print(f"Got unexpected error when creating index for '{space_name}' Space.\n {unexpected_error}") From b16c8a99fb2570f042af6d8c019d7ec8d16aa950 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 18:50:36 +0300 Subject: [PATCH 4/8] 'create_database' function from schema file, is ignored using TarantoolDB Class. --- planetmint/backend/tarantool/schema.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index c7dacdc..ae8dcd1 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -1,3 +1,5 @@ +import warnings + import tarantool from planetmint.backend.utils import module_dispatch_registrar from planetmint import backend @@ -134,7 +136,14 @@ def drop_database(connection, not_used=None): @register_schema(TarantoolDB) def create_database(connection, not_used=None): - connection.init_database() + ''' + + This function 'create_database' cannot be used with TarantoolDB connection Class. + It will be ignored if called. No Errors. + + ''' + # connection.init_database() + raise warnings.warn("Function schema.'create_database', ignored. Cannot be used using TarantoolDB") def run_command_with_output(command): From b3d43ef591299c15f870368ea1fefe6ff372d04d Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 19:01:59 +0300 Subject: [PATCH 5/8] Implemented planetmint init via schema.py ! --- planetmint/backend/tarantool/schema.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index ae8dcd1..eb4f66b 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -143,7 +143,7 @@ def create_database(connection, not_used=None): ''' # connection.init_database() - raise warnings.warn("Function schema.'create_database', ignored. Cannot be used using TarantoolDB") + warnings.warn("Function schema.'create_database', ignored. Cannot be used using TarantoolDB") def run_command_with_output(command): @@ -157,7 +157,7 @@ def run_command_with_output(command): @register_schema(TarantoolDB) -def create_tables(used_for_dispatch): +def create_tables(connection, dbname): for _space in SPACE_NAMES: try: cmd = SPACE_COMMANDS[_space].encode() From 3051b8109c12b2e85b5bd1b130fb61753ca49b48 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 19:07:11 +0300 Subject: [PATCH 6/8] added execute drop commands for spaces --- planetmint/backend/tarantool/schema.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index eb4f66b..f32f119 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -128,10 +128,27 @@ SCHEMA_COMMANDS = { "utxos:format({{name='transaction_id' , type='string'}, {name='output_index' , type='integer'}, {name='utxo_dict', type='string'}})" } +SCHEMA_DROP_COMMANDS = { + "abci_chains": "box.space.abci_chains:drop()", + "assets": "box.space.assets:drop()", + "blocks": "box.space.blocks:drop()", + "blocks_tx": "box.space.blocks_tx:drop()", + "elections": "box.space.elections:drop()", + "meta_data": "box.space.meta_data:drop()", + "pre_commits": "box.space.pre_commits:drop()", + "validators": "box.space.validators:drop()", + "transactions": "box.space.transactions:drop()", + "inputs": "box.space.inputs:drop()", + "outputs": "box.space.outputs:drop()", + "keys": "box.space.keys:drop()", + "utxos": "box.space.utxos:drop()" +} + @register_schema(TarantoolDB) def drop_database(connection, not_used=None): - connection.drop_database() + + # connection.drop_database() @register_schema(TarantoolDB) From c3edc16d92734483bd2cf6857cabee4382ea46d1 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 19:12:57 +0300 Subject: [PATCH 7/8] drop_databases improved --- planetmint/backend/tarantool/schema.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/planetmint/backend/tarantool/schema.py b/planetmint/backend/tarantool/schema.py index f32f119..1ff8abb 100644 --- a/planetmint/backend/tarantool/schema.py +++ b/planetmint/backend/tarantool/schema.py @@ -147,6 +147,16 @@ SCHEMA_DROP_COMMANDS = { @register_schema(TarantoolDB) def drop_database(connection, not_used=None): + for _space in SPACE_NAMES: + try: + cmd = SCHEMA_DROP_COMMANDS[_space].encode() + _output = run_command_with_output(command=cmd) + if "nil value" in _output: + raise tarantool.error.DatabaseError(f"Space '{_space}' does not exists.") + else: + print(f"Space '{_space}' was dropped succesfuly.") + except tarantool.error.DatabaseError as space_does_not_exists: + print(space_does_not_exists) # connection.drop_database() From ae3b4fb2a66fa3bed3ce3effe48e879a0cfbb225 Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 24 May 2022 19:13:48 +0300 Subject: [PATCH 8/8] Removed .lua files that was created temporarily. --- planetmint/backend/tarantool/init_indexes.lua | 32 ------------------- planetmint/backend/tarantool/init_schema.lua | 13 -------- planetmint/backend/tarantool/init_tables.lua | 13 -------- 3 files changed, 58 deletions(-) delete mode 100644 planetmint/backend/tarantool/init_indexes.lua delete mode 100644 planetmint/backend/tarantool/init_schema.lua delete mode 100644 planetmint/backend/tarantool/init_tables.lua diff --git a/planetmint/backend/tarantool/init_indexes.lua b/planetmint/backend/tarantool/init_indexes.lua deleted file mode 100644 index 446ae40..0000000 --- a/planetmint/backend/tarantool/init_indexes.lua +++ /dev/null @@ -1,32 +0,0 @@ -abci_chains:create_index('id_search' ,{type='hash', parts={'chain_id'}}) -abci_chains:create_index('height_search' ,{type='tree',unique=false, parts={'height'}}) -assets:create_index('txid_search', {type='hash', parts={'tx_id'}}) -assets:create_index('assetid_search', {type='tree',unique=false, parts={'asset_id', 'tx_id'}}) -assets:create_index('only_asset_search', {type='tree', unique=false, parts={'asset_id'}}) -blocks:create_index('id_search' , {type='hash' , parts={'block_id'}}) -blocks:create_index('block_search' , {type='tree', unique = false, parts={'height'}}) -blocks:create_index('block_id_search', {type = 'hash', parts ={'block_id'}}) -blocks_tx:create_index('id_search',{ type = 'hash', parts={'transaction_id'}}) -blocks_tx:create_index('block_search', {type = 'tree',unique=false, parts={'block_id'}}) -elections:create_index('id_search' , {type='hash', parts={'election_id'}}) -elections:create_index('height_search' , {type='tree',unique=false, parts={'height'}}) -elections:create_index('update_search', {type='tree', unique=false, parts={'election_id', 'height'}}) -meta_datas:create_index('id_search', { type='hash' , parts={'transaction_id'}}) -pre_commits:create_index('id_search', {type ='hash' , parts={'commit_id'}}) -pre_commits:create_index('height_search', {type ='tree',unique=true, parts={'height'}}) -validators:create_index('id_search' , {type='hash' , parts={'validator_id'}}) -validators:create_index('height_search' , {type='tree', unique=true, parts={'height'}}) -transactions:create_index('id_search' , {type = 'hash' , parts={'transaction_id'}}) -transactions:create_index('transaction_search' , {type = 'tree',unique=false, parts={'operation', 'transaction_id'}}) -inputs:create_index('delete_search' , {type = 'hash', parts={'input_id'}}) -inputs:create_index('spent_search' , {type = 'tree', unique=false, parts={'fulfills_transaction_id', 'fulfills_output_index'}}) -inputs:create_index('id_search', {type = 'tree', unique=false, parts = {'transaction_id'}}) -outputs:create_index('unique_search' ,{type='hash', parts={'output_id'}}) -outputs:create_index('id_search' ,{type='tree', unique=false, parts={'transaction_id'}}) -keys:create_index('id_search', {type = 'hash', parts={'id'}}) -keys:create_index('keys_search', {type = 'tree', unique=false, parts={'public_key'}}) -keys:create_index('txid_search', {type = 'tree', unique=false, parts={'transaction_id'}}) -keys:create_index('output_search', {type = 'tree', unique=false, parts={'output_id'}}) -utxos:create_index('id_search', {type='hash' , parts={'transaction_id', 'output_index'}}) -utxos:create_index('transaction_search', {type='tree', unique=false, parts={'transaction_id'}}) -utxos:create_index('index_search', {type='tree', unique=false, parts={'output_index'}}) \ No newline at end of file diff --git a/planetmint/backend/tarantool/init_schema.lua b/planetmint/backend/tarantool/init_schema.lua deleted file mode 100644 index 69fc487..0000000 --- a/planetmint/backend/tarantool/init_schema.lua +++ /dev/null @@ -1,13 +0,0 @@ -abci_chains:format({{name='height' , type='integer'},{name='is_synched' , type='boolean'},{name='chain_id',type='string'}}) -assets:format({{name='data' , type='any'}, {name='tx_id', type='string'}, {name='asset_id', type='string'}}) -blocks:format{{name='app_hash',type='string'},{name='height' , type='integer'},{name='block_id' , type='string'}} -blocks_tx:format{{name='transaction_id', type = 'string'}, {name = 'block_id', type = 'string'}} -elections:format({{name='election_id' , type='string'},{name='height' , type='integer'}, {name='is_concluded' , type='boolean'}}) -meta_datas:format({{name='transaction_id' , type='string'}, {name='meta_data' , type='any'}}) -pre_commits:format({{name='commit_id', type='string'}, {name='height',type='integer'}, {name='transactions',type=any}}) -validators:format({{name='validator_id' , type='string'},{name='height',type='integer'},{name='validators' , type='any'}}) -transactions:format({{name='transaction_id' , type='string'}, {name='operation' , type='string'}, {name='version' ,type='string'}, {name='dict_map', type='any'}}) -inputs:format({{name='transaction_id' , type='string'}, {name='fulfillment' , type='any'}, {name='owners_before' , type='array'}, {name='fulfills_transaction_id', type = 'string'}, {name='fulfills_output_index', type = 'string'}, {name='input_id', type='string'}, {name='input_index', type='number'}}) -outputs:format({{name='transaction_id' , type='string'}, {name='amount' , type='string'}, {name='uri', type='string'}, {name='details_type', type='string'}, {name='details_public_key', type='any'}, {name = 'output_id', type = 'string'}, {name='treshold', type='any'}, {name='subconditions', type='any'}, {name='output_index', type='number'}}) -keys:format({{name = 'id', type='string'}, {name = 'transaction_id', type = 'string'} ,{name = 'output_id', type = 'string'}, {name = 'public_key', type = 'string'}, {name = 'key_index', type = 'integer'}}) -utxos:format({{name='transaction_id' , type='string'}, {name='output_index' , type='integer'}, {name='utxo_dict', type='string'}}) \ No newline at end of file diff --git a/planetmint/backend/tarantool/init_tables.lua b/planetmint/backend/tarantool/init_tables.lua deleted file mode 100644 index 113aa4e..0000000 --- a/planetmint/backend/tarantool/init_tables.lua +++ /dev/null @@ -1,13 +0,0 @@ -abci_chains = box.schema.space.create('abci_chains', {engine='memtx', is_sync = false}) -assets = box.schema.space.create('assets' , {engine='memtx' , is_sync=false}) -blocks = box.schema.space.create('blocks' , {engine='memtx' , is_sync=false}) -blocks_tx = box.schema.space.create('blocks_tx') -elections = box.schema.space.create('elections',{engine = 'memtx' , is_sync = false}) -meta_datas = box.schema.space.create('meta_data',{engine = 'memtx' , is_sync = false}) -pre_commits = box.schema.space.create('pre_commits' , {engine='memtx' , is_sync=false}) -validators = box.schema.space.create('validators' , {engine = 'memtx' , is_sync = false}) -transactions = box.schema.space.create('transactions',{engine='memtx' , is_sync=false}) -inputs = box.schema.space.create('inputs') -outputs = box.schema.space.create('outputs') -keys = box.schema.space.create('keys') -utxos = box.schema.space.create('utxos', {engine = 'memtx' , is_sync = false}) \ No newline at end of file