diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-15 09:05:58 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-12-15 09:05:58 +0100 |
commit | 2f504b6f264c90ded6b0226a565301da97d3918f (patch) | |
tree | b74cc605b1620729718e3e1a512fda35793d9259 /common/storage_lmdb.cpp | |
parent | 1ec122d6579a6f1850753a2b72ae04d4bd9981a0 (diff) | |
download | sink-2f504b6f264c90ded6b0226a565301da97d3918f.tar.gz sink-2f504b6f264c90ded6b0226a565301da97d3918f.zip |
Added a way to gather some db statistics.
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r-- | common/storage_lmdb.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index a247e38..e32618b 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -318,6 +318,27 @@ void Storage::NamedDatabase::findLatest(const QByteArray &k, | |||
318 | return; | 318 | return; |
319 | } | 319 | } |
320 | 320 | ||
321 | qint64 Storage::NamedDatabase::getSize() | ||
322 | { | ||
323 | if (!d || !d->transaction) { | ||
324 | return -1; | ||
325 | } | ||
326 | |||
327 | int rc; | ||
328 | MDB_stat stat; | ||
329 | rc = mdb_stat(d->transaction, d->dbi, &stat); | ||
330 | if (rc) { | ||
331 | qWarning() << "Something went wrong " << rc; | ||
332 | } | ||
333 | // std::cout << "overflow_pages: " << stat.ms_overflow_pages << std::endl; | ||
334 | // std::cout << "page size: " << stat.ms_psize << std::endl; | ||
335 | // std::cout << "branch_pages: " << stat.ms_branch_pages << std::endl; | ||
336 | // std::cout << "leaf_pages: " << stat.ms_leaf_pages << std::endl; | ||
337 | // std::cout << "depth: " << stat.ms_depth << std::endl; | ||
338 | // std::cout << "entries: " << stat.ms_entries << std::endl; | ||
339 | return stat.ms_psize * (stat.ms_leaf_pages + stat.ms_branch_pages + stat.ms_overflow_pages); | ||
340 | } | ||
341 | |||
321 | 342 | ||
322 | 343 | ||
323 | 344 | ||
@@ -428,9 +449,34 @@ Storage::NamedDatabase Storage::Transaction::openDatabase(const QByteArray &db, | |||
428 | return Storage::NamedDatabase(p); | 449 | return Storage::NamedDatabase(p); |
429 | } | 450 | } |
430 | 451 | ||
452 | QList<QByteArray> Storage::Transaction::getDatabaseNames() const | ||
453 | { | ||
454 | if (!d) { | ||
455 | qWarning() << "Invalid transaction"; | ||
456 | return QList<QByteArray>(); | ||
457 | } | ||
431 | 458 | ||
459 | int rc; | ||
460 | QList<QByteArray> list; | ||
461 | if ((rc = mdb_dbi_open(d->transaction, nullptr, 0, &d->dbi) == 0)) { | ||
462 | MDB_val key; | ||
463 | MDB_val data; | ||
464 | MDB_cursor *cursor; | ||
432 | 465 | ||
433 | 466 | rc = mdb_cursor_open(d->transaction, d->dbi, &cursor); | |
467 | if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0) { | ||
468 | list << QByteArray::fromRawData((char*)key.mv_data, key.mv_size); | ||
469 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { | ||
470 | list << QByteArray::fromRawData((char*)key.mv_data, key.mv_size); | ||
471 | } | ||
472 | } else { | ||
473 | qWarning() << "Failed to get a value" << rc; | ||
474 | } | ||
475 | } else { | ||
476 | qWarning() << "Failed to open db" << rc << QByteArray(mdb_strerror(rc)); | ||
477 | } | ||
478 | return list; | ||
479 | } | ||
434 | 480 | ||
435 | 481 | ||
436 | 482 | ||