Browse Source

faster DHT refresh

miguelfreitas
Denis Ryabov 11 years ago
parent
commit
6c4c656be4
  1. 1
      libtorrent/include/libtorrent/kademlia/node.hpp
  2. 17
      libtorrent/src/kademlia/node.cpp

1
libtorrent/include/libtorrent/kademlia/node.hpp

@ -300,6 +300,7 @@ private: @@ -300,6 +300,7 @@ private:
ptime m_last_tracker_tick;
ptime m_next_storage_refresh;
int m_refresh_per_tick;
std::pair<node_id, int> m_last_refreshed_item;
// secret random numbers used to create write tokens

17
libtorrent/src/kademlia/node.cpp

@ -579,8 +579,8 @@ bool node_impl::refresh_storage() { @@ -579,8 +579,8 @@ bool node_impl::refresh_storage() {
(multi && item.local_add_time && item.local_add_time + 60*60*24*2 > time(NULL)) ) {
num_refreshable++;
if( refresh_next_item ) {
refresh_next_item = false;
if( refresh_next_item && m_refresh_per_tick ) {
--m_refresh_per_tick;
m_last_refreshed_item = std::make_pair(i->first,jIdx);
#ifdef TORRENT_DHT_VERBOSE_LOGGING
printf("node dht: refreshing storage: [%s,%s,%s]\n",
@ -611,13 +611,16 @@ bool node_impl::refresh_storage() { @@ -611,13 +611,16 @@ bool node_impl::refresh_storage() {
m_last_refreshed_item = std::make_pair(m_storage_table.begin()->first,0);
}
time_duration sleepToRefresh;
if( num_refreshable ) {
sleepToRefresh = minutes(60) / num_refreshable;
const time_duration tickInterval = seconds(5);
const time_duration fullRefreshInterval = minutes(30);
const time_duration sleepInterval = minutes(10);
const time_duration sleepToRefresh = std::min( sleepInterval, fullRefreshInterval / (num_refreshable ? num_refreshable : 1) );
m_next_storage_refresh = time_now() + sleepToRefresh;
if( sleepToRefresh > tickInterval ) {
m_refresh_per_tick = 1;
} else {
sleepToRefresh = minutes(10);
m_refresh_per_tick = tickInterval.diff/sleepToRefresh.diff;
}
m_next_storage_refresh = time_now() + sleepToRefresh;
/*
printf("node dht: next storage refresh in %s\n",

Loading…
Cancel
Save