Browse Source

memory pool for requested destination. Reduced request attaempts to 5

pull/1941/merge
orignal 7 months ago
parent
commit
d0cf385f4b
  1. 9
      libi2pd/NetDbRequests.cpp
  2. 6
      libi2pd/NetDbRequests.h

9
libi2pd/NetDbRequests.cpp

@ -107,11 +107,13 @@ namespace data @@ -107,11 +107,13 @@ namespace data
void NetDbRequests::Start ()
{
m_LastPoolCleanUpTime = i2p::util::GetSecondsSinceEpoch ();
}
void NetDbRequests::Stop ()
{
m_RequestedDestinations.clear ();
m_RequestedDestinationsPool.CleanUpMt ();
}
@ -119,7 +121,7 @@ namespace data @@ -119,7 +121,7 @@ namespace data
bool isExploratory, bool direct, RequestedDestination::RequestComplete requestComplete)
{
// request RouterInfo directly
auto dest = std::make_shared<RequestedDestination> (destination, isExploratory, direct);
auto dest = m_RequestedDestinationsPool.AcquireSharedMt (destination, isExploratory, direct);
dest->SetRequestComplete (requestComplete);
{
std::unique_lock<std::mutex> l(m_RequestedDestinationsMutex);
@ -182,6 +184,11 @@ namespace data @@ -182,6 +184,11 @@ namespace data
void NetDbRequests::ManageRequests ()
{
uint64_t ts = i2p::util::GetSecondsSinceEpoch ();
if (ts > m_LastPoolCleanUpTime + REQUESTED_DESTINATIONS_POOL_CLEANUP_INTERVAL)
{
m_RequestedDestinationsPool.CleanUpMt ();
m_LastPoolCleanUpTime = ts;
}
std::unique_lock<std::mutex> l(m_RequestedDestinationsMutex);
for (auto it = m_RequestedDestinations.begin (); it != m_RequestedDestinations.end ();)
{

6
libi2pd/NetDbRequests.h

@ -15,17 +15,19 @@ @@ -15,17 +15,19 @@
#include <unordered_map>
#include "Identity.h"
#include "RouterInfo.h"
#include "util.h"
namespace i2p
{
namespace data
{
const size_t MAX_NUM_REQUEST_ATTEMPTS = 7;
const size_t MAX_NUM_REQUEST_ATTEMPTS = 5;
const uint64_t MANAGE_REQUESTS_INTERVAL = 1; // in seconds
const uint64_t MIN_REQUEST_TIME = 5; // in seconds
const uint64_t MAX_REQUEST_TIME = MAX_NUM_REQUEST_ATTEMPTS * (MIN_REQUEST_TIME + MANAGE_REQUESTS_INTERVAL);
const uint64_t MAX_EXPLORATORY_REQUEST_TIME = 30; // in seconds
const uint64_t REQUEST_CACHE_TIME = MAX_REQUEST_TIME + 40; // in seconds
const uint64_t REQUESTED_DESTINATIONS_POOL_CLEANUP_INTERVAL = 191; // in seconds
class RequestedDestination
{
@ -83,6 +85,8 @@ namespace data @@ -83,6 +85,8 @@ namespace data
mutable std::mutex m_RequestedDestinationsMutex;
std::unordered_map<IdentHash, std::shared_ptr<RequestedDestination> > m_RequestedDestinations;
i2p::util::MemoryPoolMt<RequestedDestination> m_RequestedDestinationsPool;
uint64_t m_LastPoolCleanUpTime = 0; // in seconds
};
}
}

Loading…
Cancel
Save