From 14c9d116be476d08dd18f2e9f4a8ed251a6bbf79 Mon Sep 17 00:00:00 2001 From: Gregory Maxwell Date: Sun, 24 Mar 2013 12:59:03 -0700 Subject: [PATCH] Make explicitly requested salvage operations keep going when there is an error. In my tests corrupted wallets would often result in BDB dropping an error just due to duplicate records being found, which appears harmless. --- src/db.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/db.cpp b/src/db.cpp index 94629f3c..907dba53 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -167,9 +167,18 @@ bool CDBEnv::Salvage(std::string strFile, bool fAggressive, Db db(&dbenv, 0); int result = db.verify(strFile.c_str(), NULL, &strDump, flags); - if (result != 0) + if (result == DB_VERIFY_BAD) { - printf("ERROR: db salvage failed\n"); + printf("Error: Salvage found errors, all data may not be recoverable.\n"); + if (!fAggressive) + { + printf("Error: Rerun with aggressive mode to ignore errors and continue.\n"); + return false; + } + } + if (result != 0 && result != DB_VERIFY_BAD) + { + printf("ERROR: db salvage failed: %d\n",result); return false; }