mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 19:42:46 +01:00
merge bitcoin#25157: Fix -rpcwait with -netinfo returning negative time durations
This commit is contained in:
parent
484447cc86
commit
ccde10b914
@ -460,7 +460,6 @@ private:
|
|||||||
if (conn_type == "addr-fetch") return "addr";
|
if (conn_type == "addr-fetch") return "addr";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
const int64_t m_time_now{count_seconds(Now<CliSeconds>())};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static constexpr int ID_PEERINFO = 0;
|
static constexpr int ID_PEERINFO = 0;
|
||||||
@ -492,6 +491,7 @@ public:
|
|||||||
if (networkinfo["version"].get_int() < 200000) {
|
if (networkinfo["version"].get_int() < 200000) {
|
||||||
throw std::runtime_error("-netinfo requires dashd server to be running v20.0 and up");
|
throw std::runtime_error("-netinfo requires dashd server to be running v20.0 and up");
|
||||||
}
|
}
|
||||||
|
const int64_t time_now{count_seconds(Now<CliSeconds>())};
|
||||||
|
|
||||||
// Count peer connection totals, and if DetailsRequested(), store peer data in a vector of structs.
|
// Count peer connection totals, and if DetailsRequested(), store peer data in a vector of structs.
|
||||||
for (const UniValue& peer : batch[ID_PEERINFO]["result"].getValues()) {
|
for (const UniValue& peer : batch[ID_PEERINFO]["result"].getValues()) {
|
||||||
@ -522,7 +522,7 @@ public:
|
|||||||
const double min_ping{peer["minping"].isNull() ? -1 : peer["minping"].get_real()};
|
const double min_ping{peer["minping"].isNull() ? -1 : peer["minping"].get_real()};
|
||||||
const double ping{peer["pingtime"].isNull() ? -1 : peer["pingtime"].get_real()};
|
const double ping{peer["pingtime"].isNull() ? -1 : peer["pingtime"].get_real()};
|
||||||
const std::string addr{peer["addr"].get_str()};
|
const std::string addr{peer["addr"].get_str()};
|
||||||
const std::string age{conn_time == 0 ? "" : ToString((m_time_now - conn_time) / 60)};
|
const std::string age{conn_time == 0 ? "" : ToString((time_now - conn_time) / 60)};
|
||||||
const std::string sub_version{peer["subver"].get_str()};
|
const std::string sub_version{peer["subver"].get_str()};
|
||||||
const std::string transport{peer["transport_protocol_type"].isNull() ? "v1" : peer["transport_protocol_type"].get_str()};
|
const std::string transport{peer["transport_protocol_type"].isNull() ? "v1" : peer["transport_protocol_type"].get_str()};
|
||||||
const bool is_addr_relay_enabled{peer["addr_relay_enabled"].isNull() ? false : peer["addr_relay_enabled"].get_bool()};
|
const bool is_addr_relay_enabled{peer["addr_relay_enabled"].isNull() ? false : peer["addr_relay_enabled"].get_bool()};
|
||||||
@ -560,10 +560,10 @@ public:
|
|||||||
peer.transport_protocol_type.rfind('v', 0) == 0 ? peer.transport_protocol_type[1] : ' ',
|
peer.transport_protocol_type.rfind('v', 0) == 0 ? peer.transport_protocol_type[1] : ' ',
|
||||||
PingTimeToString(peer.min_ping),
|
PingTimeToString(peer.min_ping),
|
||||||
PingTimeToString(peer.ping),
|
PingTimeToString(peer.ping),
|
||||||
peer.last_send ? ToString(m_time_now - peer.last_send) : "",
|
peer.last_send ? ToString(time_now - peer.last_send) : "",
|
||||||
peer.last_recv ? ToString(m_time_now - peer.last_recv) : "",
|
peer.last_recv ? ToString(time_now - peer.last_recv) : "",
|
||||||
peer.last_trxn ? ToString((m_time_now - peer.last_trxn) / 60) : peer.is_block_relay ? "*" : "",
|
peer.last_trxn ? ToString((time_now - peer.last_trxn) / 60) : peer.is_block_relay ? "*" : "",
|
||||||
peer.last_blck ? ToString((m_time_now - peer.last_blck) / 60) : "",
|
peer.last_blck ? ToString((time_now - peer.last_blck) / 60) : "",
|
||||||
strprintf("%s%s", peer.is_bip152_hb_to ? "." : " ", peer.is_bip152_hb_from ? "*" : " "),
|
strprintf("%s%s", peer.is_bip152_hb_to ? "." : " ", peer.is_bip152_hb_from ? "*" : " "),
|
||||||
m_max_addr_processed_length, // variable spacing
|
m_max_addr_processed_length, // variable spacing
|
||||||
peer.addr_processed ? ToString(peer.addr_processed) : peer.is_addr_relay_enabled ? "" : ".",
|
peer.addr_processed ? ToString(peer.addr_processed) : peer.is_addr_relay_enabled ? "" : ".",
|
||||||
@ -874,7 +874,7 @@ static UniValue ConnectAndCallRPC(BaseRequestHandler* rh, const std::string& str
|
|||||||
// Execute and handle connection failures with -rpcwait.
|
// Execute and handle connection failures with -rpcwait.
|
||||||
const bool fWait = gArgs.GetBoolArg("-rpcwait", false);
|
const bool fWait = gArgs.GetBoolArg("-rpcwait", false);
|
||||||
const int timeout = gArgs.GetArg("-rpcwaittimeout", DEFAULT_WAIT_CLIENT_TIMEOUT);
|
const int timeout = gArgs.GetArg("-rpcwaittimeout", DEFAULT_WAIT_CLIENT_TIMEOUT);
|
||||||
const auto deadline{GetTime<std::chrono::microseconds>() + 1s * timeout};
|
const auto deadline{std::chrono::steady_clock::now() + 1s * timeout};
|
||||||
|
|
||||||
do {
|
do {
|
||||||
try {
|
try {
|
||||||
@ -887,8 +887,7 @@ static UniValue ConnectAndCallRPC(BaseRequestHandler* rh, const std::string& str
|
|||||||
}
|
}
|
||||||
break; // Connection succeeded, no need to retry.
|
break; // Connection succeeded, no need to retry.
|
||||||
} catch (const CConnectionFailed& e) {
|
} catch (const CConnectionFailed& e) {
|
||||||
const auto now{GetTime<std::chrono::microseconds>()};
|
if (fWait && (timeout <= 0 || std::chrono::steady_clock::now() < deadline)) {
|
||||||
if (fWait && (timeout <= 0 || now < deadline)) {
|
|
||||||
UninterruptibleSleep(1s);
|
UninterruptibleSleep(1s);
|
||||||
} else {
|
} else {
|
||||||
throw CConnectionFailed(strprintf("timeout on transient error: %s", e.what()));
|
throw CConnectionFailed(strprintf("timeout on transient error: %s", e.what()));
|
||||||
|
Loading…
Reference in New Issue
Block a user