Wallet Repair Buttons: refactoring and remove old repair args before restart

This commit is contained in:
crowning- 2015-05-28 23:09:14 +02:00
parent 6f49808caa
commit a4dce4340a
7 changed files with 75 additions and 57 deletions

View File

@ -58,7 +58,7 @@ CWallet* pwalletMain = NULL;
int nWalletBackups = 10;
#endif
bool fFeeEstimatesInitialized = false;
bool wallet_restart = false; // true: restart false: shutdown
bool fRestartRequested = false; // true: restart false: shutdown
#ifdef WIN32
// Win32 LevelDB doesn't use filedescriptors, and the ones used for
@ -145,9 +145,9 @@ static CCoinsViewDB *pcoinsdbview = NULL;
static CCoinsViewErrorCatcher *pcoinscatcher = NULL;
/** Preparing steps before shutting down or restarting the wallet */
void Prepare_Shutdown()
void PrepareShutdown()
{
wallet_restart = true; // Needed when we restart the wallet
fRestartRequested = true; // Needed when we restart the wallet
LogPrintf("%s: In progress...\n", __func__);
static CCriticalSection cs_Shutdown;
TRY_LOCK(cs_Shutdown, lockShutdown);
@ -208,18 +208,18 @@ void Prepare_Shutdown()
/**
* Shutdown is split into 2 parts:
* Part 1: shut down everything but the main wallet instance (done in Prepare_Shutdown() )
* Part 1: shut down everything but the main wallet instance (done in PrepareShutdown() )
* Part 2: delete wallet instance
*
* In case of a restart Prepare_Shutdown() was already called before, but this method here gets
* In case of a restart PrepareShutdown() was already called before, but this method here gets
* called implicitly when the parent object is deleted. In this case we have to skip the
* Prepare_Shutdown() part because it was already executed and just delete the wallet instance.
* PrepareShutdown() part because it was already executed and just delete the wallet instance.
*/
void Shutdown()
{
// Shutdown part 1: prepare shutdown
if(!wallet_restart){
Prepare_Shutdown();
if(!fRestartRequested){
PrepareShutdown();
}
// Shutdown part 2: delete wallet instance

View File

@ -20,7 +20,7 @@ extern CWallet* pwalletMain;
void StartShutdown();
bool ShutdownRequested();
void Shutdown();
void Prepare_Shutdown();
void PrepareShutdown();
bool AppInit2(boost::thread_group& threadGroup);
/** The help message mode determines what help message to show */

View File

@ -357,7 +357,7 @@ void BitcoinGUI::createActions(const NetworkStyle *networkStyle)
openNetworkAction->setStatusTip(tr("Show network monitor"));
openPeersAction = new QAction(QIcon(":/icons/connect_4"), tr("&Peers list"), this);
openPeersAction->setStatusTip(tr("Show peers info"));
openRepairAction = new QAction(QIcon(":/icons/options"), tr("&Repair Wallet"), this);
openRepairAction = new QAction(QIcon(":/icons/options"), tr("Wallet &Repair"), this);
openRepairAction->setStatusTip(tr("Repair Wallet Options"));
openConfEditorAction = new QAction(QIcon(":/icons/edit"), tr("Open &Configuration File"), this);
openConfEditorAction->setStatusTip(tr("Open configuration file"));

View File

@ -282,13 +282,13 @@ void BitcoinCore::initialize()
}
void BitcoinCore::restart(QStringList args)
{
{
try
{
qDebug() << __func__ << ": Running Restart in thread";
threadGroup.interrupt_all();
threadGroup.join_all();
Prepare_Shutdown();
PrepareShutdown();
qDebug() << __func__ << ": Shutdown finished";
emit shutdownResult(1);
CExplicitNetCleanup::callCleanup();

View File

@ -1073,7 +1073,7 @@
<rect>
<x>10</x>
<y>90</y>
<width>180</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1092,7 +1092,7 @@
<rect>
<x>10</x>
<y>140</y>
<width>180</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1111,7 +1111,7 @@
<rect>
<x>10</x>
<y>190</y>
<width>180</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1130,7 +1130,7 @@
<rect>
<x>10</x>
<y>240</y>
<width>180</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1149,7 +1149,7 @@
<rect>
<x>10</x>
<y>290</y>
<width>180</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1188,9 +1188,9 @@
<widget class="QLabel" name="label_repair_salvage">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>80</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>
@ -1204,9 +1204,9 @@
<widget class="QLabel" name="label_repair_rescan">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>129</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>
@ -1220,9 +1220,9 @@
<widget class="QLabel" name="label_repair_zap1">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>179</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>
@ -1236,9 +1236,9 @@
<widget class="QLabel" name="label_repair_zap2">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>229</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>
@ -1252,14 +1252,14 @@
<widget class="QLabel" name="label_repair_upgrade">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>279</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>-upgradewallet: Upgrade wallet to latest format on startup. (Note: this is NOT an update of the wallet itself !)</string>
<string>-upgradewallet: Upgrade wallet to latest format on startup. (Note: this is NOT an update of the wallet itself!)</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@ -1293,7 +1293,7 @@
<rect>
<x>10</x>
<y>340</y>
<width>181</width>
<width>221</width>
<height>23</height>
</rect>
</property>
@ -1304,9 +1304,9 @@
<widget class="QLabel" name="label_repair_reindex">
<property name="geometry">
<rect>
<x>210</x>
<x>250</x>
<y>330</y>
<width>511</width>
<width>471</width>
<height>41</height>
</rect>
</property>

View File

@ -42,6 +42,14 @@ const QSize ICON_SIZE(24, 24);
const int INITIAL_TRAFFIC_GRAPH_MINS = 30;
// Repair parameters
const QString SALVAGEWALLET("-salvagewallet");
const QString RESCAN("-rescan");
const QString ZAPTXES1("-zapwallettxes=1");
const QString ZAPTXES2("-zapwallettxes=2");
const QString UPGRADEWALLET("-upgradewallet");
const QString REINDEX("-reindex");
const struct {
const char *url;
const char *source;
@ -222,12 +230,12 @@ RPCConsole::RPCConsole(QWidget *parent) :
connect(ui->btnClearTrafficGraph, SIGNAL(clicked()), ui->trafficGraph, SLOT(clear()));
// Wallet Repair Buttons
connect(ui->btn_salvagewallet, SIGNAL(clicked()), this, SLOT(wallet_salvage()));
connect(ui->btn_rescan, SIGNAL(clicked()), this, SLOT(wallet_rescan()));
connect(ui->btn_zapwallettxes1, SIGNAL(clicked()), this, SLOT(wallet_zaptxes1()));
connect(ui->btn_zapwallettxes2, SIGNAL(clicked()), this, SLOT(wallet_zaptxes2()));
connect(ui->btn_upgradewallet, SIGNAL(clicked()), this, SLOT(wallet_upgrade()));
connect(ui->btn_reindex, SIGNAL(clicked()), this, SLOT(wallet_reindex()));
connect(ui->btn_salvagewallet, SIGNAL(clicked()), this, SLOT(walletSalvage()));
connect(ui->btn_rescan, SIGNAL(clicked()), this, SLOT(walletRescan()));
connect(ui->btn_zapwallettxes1, SIGNAL(clicked()), this, SLOT(walletZaptxes1()));
connect(ui->btn_zapwallettxes2, SIGNAL(clicked()), this, SLOT(walletZaptxes2()));
connect(ui->btn_upgradewallet, SIGNAL(clicked()), this, SLOT(walletUpgrade()));
connect(ui->btn_reindex, SIGNAL(clicked()), this, SLOT(walletReindex()));
// set library version labels
ui->openSSLVersion->setText(SSLeay_version(SSLEAY_VERSION));
@ -345,49 +353,59 @@ static QString categoryClass(int category)
}
/** Restart wallet with "-salvagewallet" */
void RPCConsole::wallet_salvage()
void RPCConsole::walletSalvage()
{
build_parameter_list(QString("-salvagewallet"));
buildParameterlist(SALVAGEWALLET);
}
/** Restart wallet with "-rescan" */
void RPCConsole::wallet_rescan()
void RPCConsole::walletRescan()
{
build_parameter_list(QString("-rescan"));
buildParameterlist(RESCAN);
}
/** Restart wallet with "-zapwallettxes=1" */
void RPCConsole::wallet_zaptxes1()
void RPCConsole::walletZaptxes1()
{
build_parameter_list(QString("-zapwallettxes=1"));
buildParameterlist(ZAPTXES1);
}
/** Restart wallet with "-zapwallettxes=2" */
void RPCConsole::wallet_zaptxes2()
void RPCConsole::walletZaptxes2()
{
build_parameter_list(QString("-zapwallettxes=2"));
buildParameterlist(ZAPTXES2);
}
/** Restart wallet with "-upgradewallet" */
void RPCConsole::wallet_upgrade()
void RPCConsole::walletUpgrade()
{
build_parameter_list(QString("-upgradewallet"));
buildParameterlist(UPGRADEWALLET);
}
/** Restart wallet with "-reindex" */
void RPCConsole::wallet_reindex()
void RPCConsole::walletReindex()
{
build_parameter_list(QString("-reindex"));
buildParameterlist(REINDEX);
}
/** Build command-line parameter list for restart */
void RPCConsole::build_parameter_list(QString arg)
void RPCConsole::buildParameterlist(QString arg)
{
// Get command-line arguments and remove the application name
QStringList args = QApplication::arguments();
args.removeFirst();
// Remove existing repair-options
args.removeAll(SALVAGEWALLET);
args.removeAll(RESCAN);
args.removeAll(ZAPTXES1);
args.removeAll(ZAPTXES2);
args.removeAll(UPGRADEWALLET);
args.removeAll(REINDEX);
// Append repair parameter to command line. We don't care whether it might already be there
args.append(arg);
// Send command-line arguments to BitcoinGUI::handleRestart()
emit handleRestart(args);
}

View File

@ -61,12 +61,12 @@ public slots:
void clear();
/** Wallet repair options */
void wallet_salvage();
void wallet_rescan();
void wallet_zaptxes1();
void wallet_zaptxes2();
void wallet_upgrade();
void wallet_reindex();
void walletSalvage();
void walletRescan();
void walletZaptxes1();
void walletZaptxes2();
void walletUpgrade();
void walletReindex();
void reject();
void message(int category, const QString &message, bool html = false);
@ -111,7 +111,7 @@ private:
void startExecutor();
void setTrafficGraphRange(int mins);
/** Build parameter list for restart */
void build_parameter_list(QString arg);
void buildParameterlist(QString arg);
/** show detailed information on ui about selected node */
void updateNodeDetail(const CNodeCombinedStats *stats);