blockchain: simplify/speedup handle_get_objects

This commit is contained in:
moneromooo-monero 2018-04-18 11:41:52 +01:00
parent f025ae9760
commit ef2cb63287
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3

View File

@ -1633,14 +1633,17 @@ bool Blockchain::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& arg, NO
std::vector<std::pair<cryptonote::blobdata,block>> blocks; std::vector<std::pair<cryptonote::blobdata,block>> blocks;
get_blocks(arg.blocks, blocks, rsp.missed_ids); get_blocks(arg.blocks, blocks, rsp.missed_ids);
for (const auto& bl: blocks) for (auto& bl: blocks)
{ {
std::vector<crypto::hash> missed_tx_ids; std::vector<crypto::hash> missed_tx_ids;
std::vector<cryptonote::blobdata> txs; std::vector<cryptonote::blobdata> txs;
rsp.blocks.push_back(block_complete_entry());
block_complete_entry& e = rsp.blocks.back();
// FIXME: s/rsp.missed_ids/missed_tx_id/ ? Seems like rsp.missed_ids // FIXME: s/rsp.missed_ids/missed_tx_id/ ? Seems like rsp.missed_ids
// is for missed blocks, not missed transactions as well. // is for missed blocks, not missed transactions as well.
get_transactions_blobs(bl.second.tx_hashes, txs, missed_tx_ids); get_transactions_blobs(bl.second.tx_hashes, e.txs, missed_tx_ids);
if (missed_tx_ids.size() != 0) if (missed_tx_ids.size() != 0)
{ {
@ -1657,20 +1660,12 @@ bool Blockchain::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& arg, NO
return false; return false;
} }
rsp.blocks.push_back(block_complete_entry());
block_complete_entry& e = rsp.blocks.back();
//pack block //pack block
e.block = bl.first; e.block = std::move(bl.first);
//pack transactions
for (const cryptonote::blobdata& tx: txs)
e.txs.push_back(tx);
} }
//get another transactions, if need //get and pack other transactions, if needed
std::vector<cryptonote::blobdata> txs; std::vector<cryptonote::blobdata> txs;
get_transactions_blobs(arg.txs, txs, rsp.missed_ids); get_transactions_blobs(arg.txs, rsp.txs, rsp.missed_ids);
//pack aside transactions
for (const auto& tx: txs)
rsp.txs.push_back(tx);
m_db->block_txn_stop(); m_db->block_txn_stop();
return true; return true;