diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-21 16:48:06 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-21 16:48:06 +0100 |
commit | bc2d8798e70f0667baa8598b58d9873aeb55a507 (patch) | |
tree | 3504f7f5df3a22c30ca40739e3a190d888793cc4 /common | |
parent | 0aa5b2187dcd7d8c91900dd5cb017481941bfc0f (diff) | |
download | sink-bc2d8798e70f0667baa8598b58d9873aeb55a507.tar.gz sink-bc2d8798e70f0667baa8598b58d9873aeb55a507.zip |
Print transaction span
Diffstat (limited to 'common')
-rw-r--r-- | common/storage_lmdb.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index 392ac0a..6923d7c 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp | |||
@@ -768,15 +768,29 @@ DataStore::Transaction::Stat DataStore::Transaction::stat() | |||
768 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { | 768 | while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { |
769 | iptr = static_cast<size_t*>(data.mv_data); | 769 | iptr = static_cast<size_t*>(data.mv_data); |
770 | freePages += *iptr; | 770 | freePages += *iptr; |
771 | bool bad = false; | ||
771 | size_t pg, prev; | 772 | size_t pg, prev; |
772 | ssize_t i, j, span = 0; | 773 | ssize_t i, j, span = 0; |
773 | j = *iptr++; | 774 | j = *iptr++; |
774 | for (i = j, prev = 1; --i >= 0; ) { | 775 | for (i = j, prev = 1; --i >= 0; ) { |
775 | pg = iptr[i]; | 776 | pg = iptr[i]; |
777 | if (pg <= prev) { | ||
778 | bad = true; | ||
779 | } | ||
776 | prev = pg; | 780 | prev = pg; |
777 | pg += span; | 781 | pg += span; |
778 | for (; i >= span && iptr[i-span] == pg; span++, pg++) ; | 782 | for (; i >= span && iptr[i-span] == pg; span++, pg++) ; |
779 | } | 783 | } |
784 | std::cout << " Transaction " << *(size_t *)key.mv_data << ", "<< j << " pages, maxspan " << span << (bad ? " [bad sequence]" : "") << std::endl; | ||
785 | for (--j; j >= 0; ) { | ||
786 | pg = iptr[j]; | ||
787 | for (span=1; --j >= 0 && iptr[j] == pg+span; span++); | ||
788 | if (span > 1) { | ||
789 | std::cout << " " << pg << "[" << span << "]\n"; | ||
790 | } else { | ||
791 | std::cout << " " << pg << std::endl; | ||
792 | } | ||
793 | } | ||
780 | } | 794 | } |
781 | mdb_cursor_close(cursor); | 795 | mdb_cursor_close(cursor); |
782 | return {mei.me_last_pgno + 1, freePages, mst.ms_psize, mainStat, freeStat}; | 796 | return {mei.me_last_pgno + 1, freePages, mst.ms_psize, mainStat, freeStat}; |