From ffc1f95789a72a556dfba143b6d2169930771f7a Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:09:47 +1000 Subject: [PATCH] nicer error logging for BTree Repacker recoverAll was really just sitting there --- source/core/StarBTreeDatabase.cpp | 5 +++++ source/core/StarBTreeDatabase.hpp | 1 + source/utility/btree_repacker.cpp | 15 ++++++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/source/core/StarBTreeDatabase.cpp b/source/core/StarBTreeDatabase.cpp index b188f20..19b0bd2 100644 --- a/source/core/StarBTreeDatabase.cpp +++ b/source/core/StarBTreeDatabase.cpp @@ -196,6 +196,11 @@ void BTreeDatabase::forAll(function v) { m_impl.forAll(std::move(v)); } +void BTreeDatabase::recoverAll(function v, function e) { + ReadLocker readLocker(m_lock); + m_impl.recoverAll(std::move(v), std::move(e)); +} + bool BTreeDatabase::insert(ByteArray const& k, ByteArray const& data) { WriteLocker writeLocker(m_lock); checkKeySize(k); diff --git a/source/core/StarBTreeDatabase.hpp b/source/core/StarBTreeDatabase.hpp index 8f7a4fd..f1b88a1 100644 --- a/source/core/StarBTreeDatabase.hpp +++ b/source/core/StarBTreeDatabase.hpp @@ -64,6 +64,7 @@ public: void forEach(ByteArray const& lower, ByteArray const& upper, function v); void forAll(function v); + void recoverAll(function v, function e); // Returns true if a value was overwritten bool insert(ByteArray const& k, ByteArray const& data); diff --git a/source/utility/btree_repacker.cpp b/source/utility/btree_repacker.cpp index 4276571..d711a64 100644 --- a/source/utility/btree_repacker.cpp +++ b/source/utility/btree_repacker.cpp @@ -36,11 +36,16 @@ int main(int argc, char** argv) { newDb.open(); coutf("Repacking {}...\n", bTreePath); //copy the data over - unsigned count = 0; - db.forAll([&count, &newDb](ByteArray key, ByteArray data) { - newDb.insert(key, data); + unsigned count = 0, overwritten = 0; + auto visitor = [&](ByteArray key, ByteArray data) { + if (newDb.insert(key, data)) + ++overwritten; ++count; - }); + }; + auto errorHandler = [&](String const& error, std::exception const& e) { + coutf("{}: {}\n", error, e.what()); + }; + db.recoverAll(visitor, errorHandler); //close the old db db.close(); @@ -48,7 +53,7 @@ int main(int argc, char** argv) { newDb.commit(); newDb.close(); - coutf("Repacked BTree to {} in {}s\n", outputFilename, Time::monotonicTime() - startTime); + coutf("Repacked BTree to {} in {:.6f}s\n({} inserts, {} overwritten)\n", outputFilename, Time::monotonicTime() - startTime, count, overwritten); return 0; } catch (std::exception const& e) {