diff --git a/planetmint/backend/tarantool/init.lua b/planetmint/backend/tarantool/init.lua index 8e3daa0..8dc3d9d 100644 --- a/planetmint/backend/tarantool/init.lua +++ b/planetmint/backend/tarantool/init.lua @@ -307,4 +307,8 @@ function indexed_pattern_search(space_name, field_no, pattern) require('fiber').yield() end return result_set +end + +function delete_output( id ) + box.space.outputs:delete(id) end \ No newline at end of file diff --git a/planetmint/backend/tarantool/query.py b/planetmint/backend/tarantool/query.py index a003992..4be3660 100644 --- a/planetmint/backend/tarantool/query.py +++ b/planetmint/backend/tarantool/query.py @@ -311,7 +311,8 @@ def get_owned_ids(connection, owner: str): if len(outputs) == 0: return [] txids = [output[5] for output in outputs] - return get_complete_transactions_by_ids(connection, txids) + unique_set_txids = set(txids) + return get_complete_transactions_by_ids(connection, unique_set_txids) @register_query(TarantoolDBConnection) @@ -346,16 +347,16 @@ def get_block_with_transaction(connection, txid: str): @register_query(TarantoolDBConnection) def delete_transactions(connection, txn_ids: list): - for _id in txn_ids: - connection.run(connection.space(TARANT_TABLE_TRANSACTION).delete(_id), only_data=False) - for _id in txn_ids: - _outputs = connection.run( - connection.space(TARANT_TABLE_OUTPUT).select(_id, index=TARANT_ID_SEARCH), only_data=False - ) - for _outpID in _outputs: - connection.run( - connection.space(TARANT_TABLE_OUTPUT).delete(_outpID[5], index="unique_search"), only_data=False - ) + try: + for _id in txn_ids: + _outputs = get_outputs_by_tx_id( connection, _id) + for x in range(len(_outputs)): + connection.connect().call("delete_output", (_outputs[x].id)) + for _id in txn_ids: + connection.run(connection.space(TARANT_TABLE_TRANSACTION).delete(_id), only_data=False) + except Exception as e: + logger.info(f"Could not insert unspent output: {e}") + raise OperationDataInsertionError() @register_query(TarantoolDBConnection)