From 6b0cb8dadba9db95517633c1b2f7220d049e470a Mon Sep 17 00:00:00 2001 From: benevanoff Date: Mon, 5 Apr 2021 18:56:19 -0500 Subject: [PATCH] support pruning of new databases --- main.qml | 3 ++- src/daemon/DaemonManager.cpp | 16 +++++++++++++++- src/daemon/DaemonManager.h | 3 ++- wizard/WizardDaemonSettings.qml | 22 ++++++++++++++++++++++ wizard/WizardModeSelection.qml | 2 ++ 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/main.qml b/main.qml index 039594d5..e0cd6f7e 100644 --- a/main.qml +++ b/main.qml @@ -724,7 +724,7 @@ ApplicationWindow { const noSync = appWindow.walletMode === 0; const bootstrapNodeAddress = persistentSettings.walletMode < 2 ? "auto" : persistentSettings.bootstrapNodeAddress - daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, bootstrapNodeAddress, noSync); + daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, bootstrapNodeAddress, noSync, persistentSettings.pruneBlockchain); } function stopDaemon(callback, splash){ @@ -1410,6 +1410,7 @@ ApplicationWindow { property bool checkForUpdates: true property bool autosave: true property int autosaveMinutes: 10 + property bool pruneBlockchain: false property bool fiatPriceEnabled: false property bool fiatPriceToggle: false diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index b7fb12db..5eadb792 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -27,6 +27,7 @@ // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "DaemonManager.h" +#include "common/util.h" #include #include #include @@ -47,7 +48,7 @@ namespace { static const int DAEMON_START_TIMEOUT_SECONDS = 120; } -bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const QString &dataDir, const QString &bootstrapNodeAddress, bool noSync /* = false*/) +bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const QString &dataDir, const QString &bootstrapNodeAddress, bool noSync /* = false*/, bool pruneBlockchain /* = false*/) { if (!QFileInfo(m_monerod).isFile()) { @@ -85,6 +86,12 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const arguments << "--bootstrap-daemon-address" << bootstrapNodeAddress; } + if (pruneBlockchain) { + if (!checkLmdbExists(dataDir)) { // check that DB has not already been created + arguments << "--prune-blockchain"; + } + } + if (noSync) { arguments << "--no-sync"; } @@ -322,6 +329,13 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const return result; } +bool DaemonManager::checkLmdbExists(QString datadir) { + if (datadir.isEmpty() || datadir.isNull()) { + datadir = QString::fromStdString(tools::get_default_data_dir()); + } + return validateDataDir(datadir).value("lmdbExists").value(); +} + DaemonManager::DaemonManager(QObject *parent) : QObject(parent) , m_scheduler(this) diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h index ac94c50d..2f884665 100644 --- a/src/daemon/DaemonManager.h +++ b/src/daemon/DaemonManager.h @@ -47,7 +47,7 @@ public: explicit DaemonManager(QObject *parent = 0); ~DaemonManager(); - Q_INVOKABLE bool start(const QString &flags, NetworkType::Type nettype, const QString &dataDir = "", const QString &bootstrapNodeAddress = "", bool noSync = false); + Q_INVOKABLE bool start(const QString &flags, NetworkType::Type nettype, const QString &dataDir = "", const QString &bootstrapNodeAddress = "", bool noSync = false, bool pruneBlockchain = false); Q_INVOKABLE void stopAsync(NetworkType::Type nettype, const QJSValue& callback); Q_INVOKABLE bool noSync() const noexcept; @@ -57,6 +57,7 @@ public: Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const; Q_INVOKABLE void exit(); Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const; + Q_INVOKABLE bool checkLmdbExists(QString datadir); private: diff --git a/wizard/WizardDaemonSettings.qml b/wizard/WizardDaemonSettings.qml index 3f1f2204..6fffba7c 100644 --- a/wizard/WizardDaemonSettings.qml +++ b/wizard/WizardDaemonSettings.qml @@ -94,6 +94,28 @@ ColumnLayout { } } + RowLayout { + id: pruningOptionRow + MoneroComponents.CheckBox { + id: pruneBlockchainCheckBox + checked: !existingDbWarning.visible ? persistentSettings.pruneBlockchain : false + enabled: !existingDbWarning.visible + onClicked: { + persistentSettings.pruneBlockchain = !persistentSettings.pruneBlockchain + this.checked = persistentSettings.pruneBlockchain + } + text: qsTr("Prune blockchain") + translationManager.emptyString + } + + Text { + id: existingDbWarning + text: "A blockchain database already exists here. Select a new location to start a pruned node" + visible: daemonManager ? daemonManager.checkLmdbExists(blockchainFolder.text) : false + color: MoneroComponents.Style.defaultFontColor + font.family: MoneroComponents.Style.fontRegular.name + } + } + ColumnLayout{ Layout.topMargin: 6 spacing: 0 diff --git a/wizard/WizardModeSelection.qml b/wizard/WizardModeSelection.qml index 39fac9a2..4d2fde53 100644 --- a/wizard/WizardModeSelection.qml +++ b/wizard/WizardModeSelection.qml @@ -119,6 +119,7 @@ Rectangle { onMenuClicked: { if(appWindow.persistentSettings.nettype == 0){ + appWindow.persistentSettings.pruneBlockchain = true; applyWalletMode(1, 'wizardModeBootstrap'); } } @@ -139,6 +140,7 @@ Rectangle { imageIcon: "qrc:///images/local-node-full.png" onMenuClicked: { + appWindow.persistentSettings.pruneBlockchain = false; // can be toggled on next page applyWalletMode(2, 'wizardHome'); } }