From bc2d8798e70f0667baa8598b58d9873aeb55a507 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 21 Nov 2017 16:48:06 +0100 Subject: Print transaction span --- common/storage_lmdb.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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() while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { iptr = static_cast(data.mv_data); freePages += *iptr; + bool bad = false; size_t pg, prev; ssize_t i, j, span = 0; j = *iptr++; for (i = j, prev = 1; --i >= 0; ) { pg = iptr[i]; + if (pg <= prev) { + bad = true; + } prev = pg; pg += span; for (; i >= span && iptr[i-span] == pg; span++, pg++) ; } + std::cout << " Transaction " << *(size_t *)key.mv_data << ", "<< j << " pages, maxspan " << span << (bad ? " [bad sequence]" : "") << std::endl; + for (--j; j >= 0; ) { + pg = iptr[j]; + for (span=1; --j >= 0 && iptr[j] == pg+span; span++); + if (span > 1) { + std::cout << " " << pg << "[" << span << "]\n"; + } else { + std::cout << " " << pg << std::endl; + } + } } mdb_cursor_close(cursor); return {mei.me_last_pgno + 1, freePages, mst.ms_psize, mainStat, freeStat}; -- cgit v1.2.3