Merge pull request #1034 from majestrate/dht-timeout-fixes-2020-01-10

dht timeout tweak
pull/1042/head
Jeff 5 years ago committed by GitHub
commit 0e2c5736a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -598,7 +598,7 @@ namespace llarp
TXOwner peer(askpeer, ++ids);
_pendingIntrosetLookups.NewTX(
peer, asker, addr,
new ServiceAddressLookup(asker, addr, this, R, handler));
new ServiceAddressLookup(asker, addr, this, R, handler), (R * 2000));
}
void
@ -611,7 +611,7 @@ namespace llarp
TXOwner peer(askpeer, ++ids);
_pendingIntrosetLookups.NewTX(
peer, asker, addr,
new ServiceAddressLookup(asker, addr, this, 0, handler));
new ServiceAddressLookup(asker, addr, this, 0, handler), 1000);
}
void

@ -13,8 +13,7 @@ namespace llarp
{
namespace dht
{
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS = 30000UL >
template < typename K, typename V, typename K_Hash >
struct TXHolder
{
using TXPtr = std::unique_ptr< TX< K, V > >;
@ -72,7 +71,7 @@ namespace llarp
void
NewTX(const TXOwner& askpeer, const TXOwner& whoasked, const K& k,
TX< K, V >* t);
TX< K, V >* t, llarp_time_t requestTimeoutMS = 15000);
/// mark tx as not fond
void
@ -93,11 +92,9 @@ namespace llarp
Expire(llarp_time_t now);
};
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS >
template < typename K, typename V, typename K_Hash >
const TX< K, V >*
TXHolder< K, V, K_Hash, requestTimeoutMS >::GetPendingLookupFrom(
const TXOwner& owner) const
TXHolder< K, V, K_Hash >::GetPendingLookupFrom(const TXOwner& owner) const
{
auto itr = tx.find(owner);
if(itr == tx.end())
@ -108,12 +105,12 @@ namespace llarp
return itr->second.get();
}
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS >
template < typename K, typename V, typename K_Hash >
void
TXHolder< K, V, K_Hash, requestTimeoutMS >::NewTX(const TXOwner& askpeer,
const TXOwner& whoasked,
const K& k, TX< K, V >* t)
TXHolder< K, V, K_Hash >::NewTX(const TXOwner& askpeer,
const TXOwner& whoasked, const K& k,
TX< K, V >* t,
llarp_time_t requestTimeoutMS)
{
(void)whoasked;
tx.emplace(askpeer, std::unique_ptr< TX< K, V > >(t));
@ -131,11 +128,10 @@ namespace llarp
}
}
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS >
template < typename K, typename V, typename K_Hash >
void
TXHolder< K, V, K_Hash, requestTimeoutMS >::NotFound(
const TXOwner& from, const std::unique_ptr< Key_t >& next)
TXHolder< K, V, K_Hash >::NotFound(const TXOwner& from,
const std::unique_ptr< Key_t >& next)
{
auto txitr = tx.find(from);
if(txitr == tx.end())
@ -148,13 +144,11 @@ namespace llarp
Inform(from, txitr->second->target, {}, true, true);
}
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS >
template < typename K, typename V, typename K_Hash >
void
TXHolder< K, V, K_Hash, requestTimeoutMS >::Inform(TXOwner from, K key,
std::vector< V > values,
bool sendreply,
bool removeTimeouts)
TXHolder< K, V, K_Hash >::Inform(TXOwner from, K key,
std::vector< V > values, bool sendreply,
bool removeTimeouts)
{
auto range = waiting.equal_range(key);
auto itr = range.first;
@ -187,15 +181,14 @@ namespace llarp
}
}
template < typename K, typename V, typename K_Hash,
llarp_time_t requestTimeoutMS >
template < typename K, typename V, typename K_Hash >
void
TXHolder< K, V, K_Hash, requestTimeoutMS >::Expire(llarp_time_t now)
TXHolder< K, V, K_Hash >::Expire(llarp_time_t now)
{
auto itr = timeouts.begin();
while(itr != timeouts.end())
{
if(now > itr->second && now - itr->second >= requestTimeoutMS)
if(now >= itr->second)
{
Inform(TXOwner{}, itr->first, {}, true, false);
itr = timeouts.erase(itr);

@ -36,7 +36,7 @@ namespace llarp
/// determine if this request has timed out
bool
IsTimedOut(llarp_time_t now, llarp_time_t timeout = 60000) const
IsTimedOut(llarp_time_t now, llarp_time_t timeout = 20000) const
{
if(now <= m_created)
return false;

Loading…
Cancel
Save