mirror of
https://github.com/monero-project/monero.git
synced 2024-12-28 20:36:13 -05:00
Use MDB_PREV_MULTIPLE
in get_global_output_indices
This commit is contained in:
parent
7a4755d3a4
commit
02abe3590d
@ -2475,6 +2475,34 @@ void BlockchainLMDB::get_output_global_indices(const uint64_t& amount, const std
|
||||
LOG_PRINT_L1("Index: " << index << " Elems: " << num_elems << " partial results found for get_output_tx_and_index");
|
||||
break;
|
||||
}
|
||||
if (!curcount && index > num_elems/2)
|
||||
{
|
||||
mdb_cursor_get(cur, &k, &v, MDB_LAST_DUP);
|
||||
mdb_cursor_get(cur, &k, &v, MDB_PREV); /* kludge to unset C_EOF */
|
||||
mdb_cursor_get(cur, &k, &v, MDB_NEXT);
|
||||
mdb_cursor_get(cur, &k, &v, MDB_GET_MULTIPLE);
|
||||
|
||||
curcount = num_elems;
|
||||
while(1)
|
||||
{
|
||||
TIME_MEASURE_START(db1);
|
||||
int count = v.mv_size / sizeof(uint64_t);
|
||||
curcount -= count;
|
||||
if (curcount > index)
|
||||
{
|
||||
mdb_cursor_get(cur, &k, &v, MDB_PREV_MULTIPLE);
|
||||
} else
|
||||
{
|
||||
blockstart = curcount;
|
||||
curcount += count;
|
||||
break;
|
||||
}
|
||||
TIME_MEASURE_FINISH(db1);
|
||||
t_dbmul += db1;
|
||||
}
|
||||
|
||||
} else
|
||||
{
|
||||
while (index >= curcount)
|
||||
{
|
||||
TIME_MEASURE_START(db1);
|
||||
@ -2492,6 +2520,7 @@ void BlockchainLMDB::get_output_global_indices(const uint64_t& amount, const std
|
||||
TIME_MEASURE_FINISH(db1);
|
||||
t_dbmul += db1;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_PRINT_L3("Records returned: " << curcount << " Index: " << index);
|
||||
TIME_MEASURE_START(db2);
|
||||
|
Loading…
Reference in New Issue
Block a user