blockchain_db: add a txpool tx getter which returns existence
Avoids exception spam for the "nope, not found" case
This commit is contained in:
parent
e3da0ca828
commit
235df7f484
7 changed files with 31 additions and 5 deletions
|
@ -1313,6 +1313,16 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const = 0;
|
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief get a txpool transaction's blob
|
||||||
|
*
|
||||||
|
* @param txid the transaction id of the transation to lookup
|
||||||
|
* @param bd the blob to return
|
||||||
|
*
|
||||||
|
* @return true if the txid was in the txpool, false otherwise
|
||||||
|
*/
|
||||||
|
virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get a txpool transaction's blob
|
* @brief get a txpool transaction's blob
|
||||||
*
|
*
|
||||||
|
|
|
@ -1576,7 +1576,7 @@ txpool_tx_meta_t BlockchainLMDB::get_txpool_tx_meta(const crypto::hash& txid) co
|
||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
cryptonote::blobdata BlockchainLMDB::get_txpool_tx_blob(const crypto::hash& txid) const
|
bool BlockchainLMDB::get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
|
@ -1587,12 +1587,21 @@ cryptonote::blobdata BlockchainLMDB::get_txpool_tx_blob(const crypto::hash& txid
|
||||||
MDB_val k = {sizeof(txid), (void *)&txid};
|
MDB_val k = {sizeof(txid), (void *)&txid};
|
||||||
MDB_val v;
|
MDB_val v;
|
||||||
auto result = mdb_cursor_get(m_cur_txpool_blob, &k, &v, MDB_SET);
|
auto result = mdb_cursor_get(m_cur_txpool_blob, &k, &v, MDB_SET);
|
||||||
|
if (result == MDB_NOTFOUND)
|
||||||
|
return false;
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
throw1(DB_ERROR(lmdb_error("Error finding txpool tx meta: ", result).c_str()));
|
throw1(DB_ERROR(lmdb_error("Error finding txpool tx blob: ", result).c_str()));
|
||||||
|
|
||||||
blobdata bd;
|
|
||||||
bd.assign(reinterpret_cast<const char*>(v.mv_data), v.mv_size);
|
bd.assign(reinterpret_cast<const char*>(v.mv_data), v.mv_size);
|
||||||
TXN_POSTFIX_RDONLY();
|
TXN_POSTFIX_RDONLY();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
cryptonote::blobdata BlockchainLMDB::get_txpool_tx_blob(const crypto::hash& txid) const
|
||||||
|
{
|
||||||
|
cryptonote::blobdata bd;
|
||||||
|
if (!get_txpool_tx_blob(txid, bd))
|
||||||
|
throw1(DB_ERROR("Tx not found in txpool: "));
|
||||||
return bd;
|
return bd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -245,6 +245,7 @@ public:
|
||||||
virtual bool txpool_has_tx(const crypto::hash &txid) const;
|
virtual bool txpool_has_tx(const crypto::hash &txid) const;
|
||||||
virtual void remove_txpool_tx(const crypto::hash& txid);
|
virtual void remove_txpool_tx(const crypto::hash& txid);
|
||||||
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const;
|
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const;
|
||||||
|
virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const;
|
||||||
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const;
|
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const;
|
||||||
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)> f, bool include_blob = false) const;
|
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)> f, bool include_blob = false) const;
|
||||||
|
|
||||||
|
|
|
@ -4005,6 +4005,11 @@ txpool_tx_meta_t Blockchain::get_txpool_tx_meta(const crypto::hash& txid) const
|
||||||
return m_db->get_txpool_tx_meta(txid);
|
return m_db->get_txpool_tx_meta(txid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Blockchain::get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const
|
||||||
|
{
|
||||||
|
return m_db->get_txpool_tx_blob(txid, bd);
|
||||||
|
}
|
||||||
|
|
||||||
cryptonote::blobdata Blockchain::get_txpool_tx_blob(const crypto::hash& txid) const
|
cryptonote::blobdata Blockchain::get_txpool_tx_blob(const crypto::hash& txid) const
|
||||||
{
|
{
|
||||||
return m_db->get_txpool_tx_blob(txid);
|
return m_db->get_txpool_tx_blob(txid);
|
||||||
|
|
|
@ -862,6 +862,7 @@ namespace cryptonote
|
||||||
void remove_txpool_tx(const crypto::hash &txid);
|
void remove_txpool_tx(const crypto::hash &txid);
|
||||||
uint64_t get_txpool_tx_count() const;
|
uint64_t get_txpool_tx_count() const;
|
||||||
txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const;
|
txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const;
|
||||||
|
bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const;
|
||||||
cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const;
|
cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const;
|
||||||
bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const;
|
bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const;
|
||||||
|
|
||||||
|
|
|
@ -627,8 +627,7 @@ namespace cryptonote
|
||||||
CRITICAL_REGION_LOCAL1(m_blockchain);
|
CRITICAL_REGION_LOCAL1(m_blockchain);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txblob = m_blockchain.get_txpool_tx_blob(id);
|
return m_blockchain.get_txpool_tx_blob(id, txblob);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
catch (const std::exception &e)
|
catch (const std::exception &e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -118,6 +118,7 @@ public:
|
||||||
virtual bool txpool_has_tx(const crypto::hash &txid) const { return false; }
|
virtual bool txpool_has_tx(const crypto::hash &txid) const { return false; }
|
||||||
virtual void remove_txpool_tx(const crypto::hash& txid) {}
|
virtual void remove_txpool_tx(const crypto::hash& txid) {}
|
||||||
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const { return txpool_tx_meta_t(); }
|
virtual txpool_tx_meta_t get_txpool_tx_meta(const crypto::hash& txid) const { return txpool_tx_meta_t(); }
|
||||||
|
virtual bool get_txpool_tx_blob(const crypto::hash& txid, cryptonote::blobdata &bd) const { return false; }
|
||||||
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const { return ""; }
|
virtual cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const { return ""; }
|
||||||
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const { return false; }
|
virtual bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const { return false; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue