Misc. network related
- Add interface for bytes sent/received - Allow wallet refresh while daemon is not synchronized - emit success boolean for refreshed() - don't call refreshThreadFunc (we don't need it) - lower rpc timeout from 3m30s (?!) to 10 seconds
This commit is contained in:
parent
4edba5301a
commit
25e497db3f
|
@ -274,5 +274,4 @@ void TransactionHistoryImpl::refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
}
|
||||||
namespace Bitmonero = Monero;
|
|
||||||
|
|
|
@ -68,8 +68,8 @@ namespace {
|
||||||
static const int MAX_REFRESH_INTERVAL_MILLIS = 1000 * 60 * 1;
|
static const int MAX_REFRESH_INTERVAL_MILLIS = 1000 * 60 * 1;
|
||||||
// Default refresh interval when connected to remote node
|
// Default refresh interval when connected to remote node
|
||||||
static const int DEFAULT_REMOTE_NODE_REFRESH_INTERVAL_MILLIS = 1000 * 10;
|
static const int DEFAULT_REMOTE_NODE_REFRESH_INTERVAL_MILLIS = 1000 * 10;
|
||||||
// Connection timeout 30 sec
|
// Connection timeout 10 sec
|
||||||
static const int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 1000 * 30;
|
static const int DEFAULT_CONNECTION_TIMEOUT_MILLIS = 1000 * 10;
|
||||||
|
|
||||||
std::string get_default_ringdb_path(cryptonote::network_type nettype)
|
std::string get_default_ringdb_path(cryptonote::network_type nettype)
|
||||||
{
|
{
|
||||||
|
@ -435,10 +435,6 @@ WalletImpl::WalletImpl(NetworkType nettype, uint64_t kdf_rounds)
|
||||||
|
|
||||||
m_refreshIntervalMillis = DEFAULT_REFRESH_INTERVAL_MILLIS;
|
m_refreshIntervalMillis = DEFAULT_REFRESH_INTERVAL_MILLIS;
|
||||||
|
|
||||||
m_refreshThread = boost::thread([this] () {
|
|
||||||
this->refreshThreadFunc();
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WalletImpl::~WalletImpl()
|
WalletImpl::~WalletImpl()
|
||||||
|
@ -1062,7 +1058,7 @@ uint64_t WalletImpl::daemonBlockChainHeight() const
|
||||||
if(m_wallet->light_wallet()) {
|
if(m_wallet->light_wallet()) {
|
||||||
return m_wallet->get_light_wallet_scanned_block_height();
|
return m_wallet->get_light_wallet_scanned_block_height();
|
||||||
}
|
}
|
||||||
if (!m_is_connected)
|
if (!m_is_connected && m_synchronized)
|
||||||
return 0;
|
return 0;
|
||||||
std::string err;
|
std::string err;
|
||||||
uint64_t result = m_wallet->get_daemon_blockchain_height(err);
|
uint64_t result = m_wallet->get_daemon_blockchain_height(err);
|
||||||
|
@ -1081,7 +1077,7 @@ uint64_t WalletImpl::daemonBlockChainTargetHeight() const
|
||||||
if(m_wallet->light_wallet()) {
|
if(m_wallet->light_wallet()) {
|
||||||
return m_wallet->get_light_wallet_blockchain_height();
|
return m_wallet->get_light_wallet_blockchain_height();
|
||||||
}
|
}
|
||||||
if (!m_is_connected)
|
if (!m_is_connected && m_synchronized)
|
||||||
return 0;
|
return 0;
|
||||||
std::string err;
|
std::string err;
|
||||||
uint64_t result = m_wallet->get_daemon_blockchain_target_height(err);
|
uint64_t result = m_wallet->get_daemon_blockchain_target_height(err);
|
||||||
|
@ -2451,37 +2447,34 @@ void WalletImpl::refreshThreadFunc()
|
||||||
|
|
||||||
void WalletImpl::doRefresh()
|
void WalletImpl::doRefresh()
|
||||||
{
|
{
|
||||||
|
bool success = true;
|
||||||
bool rescan = m_refreshShouldRescan.exchange(false);
|
bool rescan = m_refreshShouldRescan.exchange(false);
|
||||||
// synchronizing async and sync refresh calls
|
// synchronizing async and sync refresh calls
|
||||||
boost::lock_guard<boost::mutex> guarg(m_refreshMutex2);
|
boost::lock_guard<boost::mutex> guarg(m_refreshMutex2);
|
||||||
do try {
|
do try {
|
||||||
LOG_PRINT_L3(__FUNCTION__ << ": doRefresh, rescan = "<<rescan);
|
LOG_PRINT_L3(__FUNCTION__ << ": doRefresh, rescan = "<<rescan);
|
||||||
// Syncing daemon and refreshing wallet simultaneously is very resource intensive.
|
if(rescan)
|
||||||
// Disable refresh if wallet is disconnected or daemon isn't synced.
|
m_wallet->rescan_blockchain(false);
|
||||||
if (m_wallet->light_wallet() || daemonSynced()) {
|
m_wallet->refresh(trustedDaemon());
|
||||||
if(rescan)
|
if (!m_synchronized) {
|
||||||
m_wallet->rescan_blockchain(false);
|
m_synchronized = true;
|
||||||
m_wallet->refresh(trustedDaemon());
|
|
||||||
if (!m_synchronized) {
|
|
||||||
m_synchronized = true;
|
|
||||||
}
|
|
||||||
// assuming if we have empty history, it wasn't initialized yet
|
|
||||||
// for further history changes client need to update history in
|
|
||||||
// "on_money_received" and "on_money_sent" callbacks
|
|
||||||
if (m_history->count() == 0) {
|
|
||||||
m_history->refresh();
|
|
||||||
}
|
|
||||||
m_wallet->find_and_save_rings(false);
|
|
||||||
} else {
|
|
||||||
LOG_PRINT_L3(__FUNCTION__ << ": skipping refresh - daemon is not synced");
|
|
||||||
}
|
}
|
||||||
|
// assuming if we have empty history, it wasn't initialized yet
|
||||||
|
// for further history changes client need to update history in
|
||||||
|
// "on_money_received" and "on_money_sent" callbacks
|
||||||
|
if (m_history->count() == 0) {
|
||||||
|
m_history->refresh();
|
||||||
|
}
|
||||||
|
m_wallet->find_and_save_rings(false);
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
|
success = false;
|
||||||
setStatusError(e.what());
|
setStatusError(e.what());
|
||||||
break;
|
break;
|
||||||
}while(!rescan && (rescan=m_refreshShouldRescan.exchange(false))); // repeat if not rescanned and rescan was requested
|
}while(!rescan && (rescan=m_refreshShouldRescan.exchange(false))); // repeat if not rescanned and rescan was requested
|
||||||
|
|
||||||
|
m_is_connected = success;
|
||||||
if (m_wallet2Callback->getListener()) {
|
if (m_wallet2Callback->getListener()) {
|
||||||
m_wallet2Callback->getListener()->refreshed();
|
m_wallet2Callback->getListener()->refreshed(success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2544,8 +2537,14 @@ void WalletImpl::pendingTxPostProcess(PendingTransactionImpl * pending)
|
||||||
|
|
||||||
bool WalletImpl::doInit(const string &daemon_address, const std::string &proxy_address, uint64_t upper_transaction_size_limit, bool ssl)
|
bool WalletImpl::doInit(const string &daemon_address, const std::string &proxy_address, uint64_t upper_transaction_size_limit, bool ssl)
|
||||||
{
|
{
|
||||||
if (!m_wallet->init(daemon_address, m_daemon_login, proxy_address, upper_transaction_size_limit))
|
if (!m_wallet->init(daemon_address,
|
||||||
return false;
|
m_daemon_login,
|
||||||
|
proxy_address,
|
||||||
|
upper_transaction_size_limit,
|
||||||
|
trustedDaemon(),
|
||||||
|
ssl ? epee::net_utils::ssl_support_t::e_ssl_support_autodetect : epee::net_utils::ssl_support_t::e_ssl_support_disabled)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// in case new wallet, this will force fast-refresh (pulling hashes instead of blocks)
|
// in case new wallet, this will force fast-refresh (pulling hashes instead of blocks)
|
||||||
// If daemon isn't synced a calculated block height will be used instead
|
// If daemon isn't synced a calculated block height will be used instead
|
||||||
|
|
|
@ -478,7 +478,7 @@ struct WalletListener
|
||||||
/**
|
/**
|
||||||
* @brief refreshed - called when wallet refreshed by background thread or explicitly refreshed by calling "refresh" synchronously
|
* @brief refreshed - called when wallet refreshed by background thread or explicitly refreshed by calling "refresh" synchronously
|
||||||
*/
|
*/
|
||||||
virtual void refreshed() = 0;
|
virtual void refreshed(bool success) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief called by device if the action is required
|
* @brief called by device if the action is required
|
||||||
|
|
|
@ -49,7 +49,7 @@ using namespace epee;
|
||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
|
|
||||||
static const std::chrono::seconds rpc_timeout = std::chrono::minutes(3) + std::chrono::seconds(30);
|
static const std::chrono::seconds rpc_timeout = std::chrono::seconds(10);
|
||||||
|
|
||||||
NodeRPCProxy::NodeRPCProxy(epee::net_utils::http::abstract_http_client &http_client, rpc_payment_state_t &rpc_payment_state, boost::recursive_mutex &mutex)
|
NodeRPCProxy::NodeRPCProxy(epee::net_utils::http::abstract_http_client &http_client, rpc_payment_state_t &rpc_payment_state, boost::recursive_mutex &mutex)
|
||||||
: m_http_client(http_client)
|
: m_http_client(http_client)
|
||||||
|
|
|
@ -232,7 +232,7 @@ private:
|
||||||
friend class wallet_keys_unlocker;
|
friend class wallet_keys_unlocker;
|
||||||
friend class wallet_device_callback;
|
friend class wallet_device_callback;
|
||||||
public:
|
public:
|
||||||
static constexpr const std::chrono::seconds rpc_timeout = std::chrono::minutes(3) + std::chrono::seconds(30);
|
static constexpr const std::chrono::seconds rpc_timeout = std::chrono::seconds(10);
|
||||||
|
|
||||||
enum RefreshType {
|
enum RefreshType {
|
||||||
RefreshFull,
|
RefreshFull,
|
||||||
|
|
Loading…
Reference in New Issue