Merge pull request #1493
0478ac68
blockchain: allow marking "tx not found" without an exception (moneromooo-monero)
This commit is contained in:
commit
23cf963332
@ -1019,6 +1019,20 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual transaction get_tx(const crypto::hash& h) const = 0;
|
virtual transaction get_tx(const crypto::hash& h) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief fetches the transaction with the given hash
|
||||||
|
*
|
||||||
|
* The subclass should return the transaction stored which has the given
|
||||||
|
* hash.
|
||||||
|
*
|
||||||
|
* If the transaction does not exist, the subclass should return false.
|
||||||
|
*
|
||||||
|
* @param h the hash to look for
|
||||||
|
*
|
||||||
|
* @return true iff the transaction was found
|
||||||
|
*/
|
||||||
|
virtual bool get_tx(const crypto::hash& h, transaction &tx) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief fetches the total number of transactions ever
|
* @brief fetches the total number of transactions ever
|
||||||
*
|
*
|
||||||
|
@ -1791,7 +1791,7 @@ uint64_t BlockchainLMDB::get_tx_unlock_time(const crypto::hash& h) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
transaction BlockchainLMDB::get_tx(const crypto::hash& h) const
|
bool BlockchainLMDB::get_tx(const crypto::hash& h, transaction &tx) const
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
@ -1810,19 +1810,27 @@ transaction BlockchainLMDB::get_tx(const crypto::hash& h) const
|
|||||||
get_result = mdb_cursor_get(m_cur_txs, &val_tx_id, &result, MDB_SET);
|
get_result = mdb_cursor_get(m_cur_txs, &val_tx_id, &result, MDB_SET);
|
||||||
}
|
}
|
||||||
if (get_result == MDB_NOTFOUND)
|
if (get_result == MDB_NOTFOUND)
|
||||||
throw1(TX_DNE(std::string("tx with hash ").append(epee::string_tools::pod_to_hex(h)).append(" not found in db").c_str()));
|
return false;
|
||||||
else if (get_result)
|
else if (get_result)
|
||||||
throw0(DB_ERROR(lmdb_error("DB error attempting to fetch tx from hash", get_result).c_str()));
|
throw0(DB_ERROR(lmdb_error("DB error attempting to fetch tx from hash", get_result).c_str()));
|
||||||
|
|
||||||
blobdata bd;
|
blobdata bd;
|
||||||
bd.assign(reinterpret_cast<char*>(result.mv_data), result.mv_size);
|
bd.assign(reinterpret_cast<char*>(result.mv_data), result.mv_size);
|
||||||
|
|
||||||
transaction tx;
|
|
||||||
if (!parse_and_validate_tx_from_blob(bd, tx))
|
if (!parse_and_validate_tx_from_blob(bd, tx))
|
||||||
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
throw0(DB_ERROR("Failed to parse tx from blob retrieved from the db"));
|
||||||
|
|
||||||
TXN_POSTFIX_RDONLY();
|
TXN_POSTFIX_RDONLY();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transaction BlockchainLMDB::get_tx(const crypto::hash& h) const
|
||||||
|
{
|
||||||
|
transaction tx;
|
||||||
|
|
||||||
|
if (!get_tx(h, tx))
|
||||||
|
throw1(TX_DNE(std::string("tx with hash ").append(epee::string_tools::pod_to_hex(h)).append(" not found in db").c_str()));
|
||||||
return tx;
|
return tx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +209,8 @@ public:
|
|||||||
|
|
||||||
virtual transaction get_tx(const crypto::hash& h) const;
|
virtual transaction get_tx(const crypto::hash& h) const;
|
||||||
|
|
||||||
|
virtual bool get_tx(const crypto::hash& h, transaction &tx) const;
|
||||||
|
|
||||||
virtual uint64_t get_tx_count() const;
|
virtual uint64_t get_tx_count() const;
|
||||||
|
|
||||||
virtual std::vector<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const;
|
virtual std::vector<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const;
|
||||||
|
@ -1895,11 +1895,11 @@ bool Blockchain::get_transactions(const t_ids_container& txs_ids, t_tx_container
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txs.push_back(m_db->get_tx(tx_hash));
|
transaction tx;
|
||||||
}
|
if (m_db->get_tx(tx_hash, tx))
|
||||||
catch (const TX_DNE& e)
|
txs.push_back(std::move(tx));
|
||||||
{
|
else
|
||||||
missed_txs.push_back(tx_hash);
|
missed_txs.push_back(tx_hash);
|
||||||
}
|
}
|
||||||
catch (const std::exception& e)
|
catch (const std::exception& e)
|
||||||
{
|
{
|
||||||
|
@ -78,6 +78,7 @@ public:
|
|||||||
virtual bool tx_exists(const crypto::hash& h, uint64_t& tx_index) const { return false; }
|
virtual bool tx_exists(const crypto::hash& h, uint64_t& tx_index) const { return false; }
|
||||||
virtual uint64_t get_tx_unlock_time(const crypto::hash& h) const { return 0; }
|
virtual uint64_t get_tx_unlock_time(const crypto::hash& h) const { return 0; }
|
||||||
virtual transaction get_tx(const crypto::hash& h) const { return transaction(); }
|
virtual transaction get_tx(const crypto::hash& h) const { return transaction(); }
|
||||||
|
virtual bool get_tx(const crypto::hash& h, transaction &tx) const { return false; }
|
||||||
virtual uint64_t get_tx_count() const { return 0; }
|
virtual uint64_t get_tx_count() const { return 0; }
|
||||||
virtual std::vector<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const { return std::vector<transaction>(); }
|
virtual std::vector<transaction> get_tx_list(const std::vector<crypto::hash>& hlist) const { return std::vector<transaction>(); }
|
||||||
virtual uint64_t get_tx_block_height(const crypto::hash& h) const { return 0; }
|
virtual uint64_t get_tx_block_height(const crypto::hash& h) const { return 0; }
|
||||||
|
Loading…
Reference in New Issue
Block a user