Skip to content

Commit

Permalink
DaemonManager: take dataDir into account when sending cmd
Browse files Browse the repository at this point in the history
  • Loading branch information
selsta committed Oct 7, 2022
1 parent aef4a98 commit 80ade41
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 31 deletions.
1 change: 1 addition & 0 deletions components/NetworkStatusItem.qml
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ Rectangle {
daemonManager.sendCommandAsync(
["set_bootstrap_daemon", "auto"],
appWindow.currentWallet.nettype,
persistentSettings.blockchainDataDir,
callback);

refreshMouseArea.visible = false;
Expand Down
6 changes: 3 additions & 3 deletions main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ ApplicationWindow {

// If wallet isnt connected, advanced wallet mode and no daemon is running - Ask
if (appWindow.walletMode >= 2 && !persistentSettings.useRemoteNode && !walletInitialized && disconnected) {
daemonManager.runningAsync(persistentSettings.nettype, function(running) {
daemonManager.runningAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, function(running) {
if (!running) {
daemonManagerDialog.open();
}
Expand Down Expand Up @@ -714,7 +714,7 @@ ApplicationWindow {
appWindow.showProcessingSplash(qsTr("Waiting for daemon to stop..."));
}
p2poolManager.exit()
daemonManager.stopAsync(persistentSettings.nettype, function(result) {
daemonManager.stopAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, function(result) {
daemonStartStopInProgress = 0;
if (splash) {
hideProcessingSplash();
Expand Down Expand Up @@ -2141,7 +2141,7 @@ ApplicationWindow {
if (currentWallet) {
handler(!currentWallet.disconnected);
} else {
daemonManager.runningAsync(persistentSettings.nettype, handler);
daemonManager.runningAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, handler);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion pages/Mining.qml
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ Rectangle {
startP2Pool()
}
else {
daemonManager.stopAsync(persistentSettings.nettype, startP2PoolLocal)
daemonManager.stopAsync(persistentSettings.nettype, persistentSettings.blockchainDataDir, startP2PoolLocal)
}
}
else {
Expand Down
2 changes: 1 addition & 1 deletion pages/settings/SettingsLog.qml
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ Rectangle {
onAccepted: {
if(text.length > 0) {
consoleArea.logCommand(">>> " + text)
daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, function(result) {
daemonManager.sendCommandAsync(text.split(" "), currentWallet.nettype, persistentSettings.blockchainDataDir, function(result) {
if (!result) {
appWindow.showStatusMessage(qsTr("Failed to send command"), 3);
}
Expand Down
43 changes: 24 additions & 19 deletions src/daemon/DaemonManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
}

// Start start watcher
m_scheduler.run([this, nettype, noSync] {
if (startWatcher(nettype)) {
m_scheduler.run([this, nettype, dataDir, noSync] {
if (startWatcher(nettype, dataDir)) {
emit daemonStarted();
m_noSync = noSync;
} else {
Expand All @@ -142,13 +142,13 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
return true;
}

void DaemonManager::stopAsync(NetworkType::Type nettype, const QJSValue& callback)
void DaemonManager::stopAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback)
{
const auto feature = m_scheduler.run([this, nettype] {
const auto feature = m_scheduler.run([this, nettype, dataDir] {
QString message;
sendCommand({"exit"}, nettype, message);
sendCommand({"exit"}, nettype, dataDir, message);

return QJSValueList({stopWatcher(nettype)});
return QJSValueList({stopWatcher(nettype, dataDir)});
}, callback);

if (!feature.first)
Expand All @@ -157,14 +157,14 @@ void DaemonManager::stopAsync(NetworkType::Type nettype, const QJSValue& callbac
}
}

bool DaemonManager::startWatcher(NetworkType::Type nettype) const
bool DaemonManager::startWatcher(NetworkType::Type nettype, const QString &dataDir) const
{
// Check if daemon is started every 2 seconds
QElapsedTimer timer;
timer.start();
while(true && !m_app_exit && timer.elapsed() / 1000 < DAEMON_START_TIMEOUT_SECONDS ) {
QThread::sleep(2);
if(!running(nettype)) {
if(!running(nettype, dataDir)) {
qDebug() << "daemon not running. checking again in 2 seconds.";
} else {
qDebug() << "daemon is started. Waiting 5 seconds to let daemon catch up";
Expand All @@ -175,14 +175,14 @@ bool DaemonManager::startWatcher(NetworkType::Type nettype) const
return false;
}

bool DaemonManager::stopWatcher(NetworkType::Type nettype) const
bool DaemonManager::stopWatcher(NetworkType::Type nettype, const QString &dataDir) const
{
// Check if daemon is running every 2 seconds. Kill if still running after 10 seconds
int counter = 0;
while(true && !m_app_exit) {
QThread::sleep(2);
counter++;
if(running(nettype)) {
if(running(nettype, dataDir)) {
qDebug() << "Daemon still running. " << counter;
if(counter >= 5) {
qDebug() << "Killing it! ";
Expand Down Expand Up @@ -236,10 +236,10 @@ void DaemonManager::printError()
}
}

bool DaemonManager::running(NetworkType::Type nettype) const
bool DaemonManager::running(NetworkType::Type nettype, const QString &dataDir) const
{
QString status;
sendCommand({"sync_info"}, nettype, status);
sendCommand({"sync_info"}, nettype, dataDir, status);
qDebug() << status;
return status.contains("Height:");
}
Expand All @@ -249,14 +249,14 @@ bool DaemonManager::noSync() const noexcept
return m_noSync;
}

void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& callback) const
void DaemonManager::runningAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const
{
m_scheduler.run([this, nettype] {
return QJSValueList({running(nettype)});
m_scheduler.run([this, nettype, dataDir] {
return QJSValueList({running(nettype, dataDir)});
}, callback);
}

bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const
bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, QString &message) const
{
QProcess p;
QStringList external_cmd(cmd);
Expand All @@ -267,6 +267,11 @@ bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettyp
else if (nettype == NetworkType::STAGENET)
external_cmd << "--stagenet";

// Custom data-dir
if (!dataDir.isEmpty()) {
external_cmd << "--data-dir" << dataDir;
}

qDebug() << "sending external cmd: " << external_cmd;


Expand All @@ -278,11 +283,11 @@ bool DaemonManager::sendCommand(const QStringList &cmd, NetworkType::Type nettyp
return started;
}

void DaemonManager::sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const
void DaemonManager::sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const
{
m_scheduler.run([this, cmd, nettype] {
m_scheduler.run([this, cmd, nettype, dataDir] {
QString message;
return QJSValueList({sendCommand(cmd, nettype, message)});
return QJSValueList({sendCommand(cmd, nettype, dataDir, message)});
}, callback);
}

Expand Down
14 changes: 7 additions & 7 deletions src/daemon/DaemonManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,23 @@ class DaemonManager : public QObject
~DaemonManager();

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 void stopAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback);

Q_INVOKABLE bool noSync() const noexcept;
// return true if daemon process is started
Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QJSValue& callback) const;
Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const;
// Send daemon command from qml and prints output in console window.
Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QJSValue& callback) const;
Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const;
Q_INVOKABLE void exit();
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
Q_INVOKABLE bool checkLmdbExists(QString datadir);

private:

bool running(NetworkType::Type nettype) const;
bool sendCommand(const QStringList &cmd, NetworkType::Type nettype, QString &message) const;
bool startWatcher(NetworkType::Type nettype) const;
bool stopWatcher(NetworkType::Type nettype) const;
bool running(NetworkType::Type nettype, const QString &dataDir) const;
bool sendCommand(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, QString &message) const;
bool startWatcher(NetworkType::Type nettype, const QString &dataDir) const;
bool stopWatcher(NetworkType::Type nettype, const QString &dataDir) const;
signals:
void daemonStarted() const;
void daemonStopped() const;
Expand Down

0 comments on commit 80ade41

Please sign in to comment.