mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Retry dht query in adnl-peer if peer does not respond for too long
This commit is contained in:
parent
4ddb14c136
commit
cae9ccfacf
2 changed files with 15 additions and 0 deletions
|
@ -119,6 +119,7 @@ void AdnlPeerPairImpl::discover() {
|
||||||
void AdnlPeerPairImpl::receive_packet_checked(AdnlPacket packet) {
|
void AdnlPeerPairImpl::receive_packet_checked(AdnlPacket packet) {
|
||||||
last_received_packet_ = td::Timestamp::now();
|
last_received_packet_ = td::Timestamp::now();
|
||||||
try_reinit_at_ = td::Timestamp::never();
|
try_reinit_at_ = td::Timestamp::never();
|
||||||
|
drop_addr_list_at_ = td::Timestamp::never();
|
||||||
request_reverse_ping_after_ = td::Timestamp::in(15.0);
|
request_reverse_ping_after_ = td::Timestamp::in(15.0);
|
||||||
auto d = Adnl::adnl_start_time();
|
auto d = Adnl::adnl_start_time();
|
||||||
if (packet.dst_reinit_date() > d) {
|
if (packet.dst_reinit_date() > d) {
|
||||||
|
@ -415,6 +416,9 @@ void AdnlPeerPairImpl::send_packet_continue(AdnlPacket packet, td::actor::ActorI
|
||||||
if (!try_reinit_at_ && last_received_packet_ < td::Timestamp::in(-5.0)) {
|
if (!try_reinit_at_ && last_received_packet_ < td::Timestamp::in(-5.0)) {
|
||||||
try_reinit_at_ = td::Timestamp::in(10.0);
|
try_reinit_at_ = td::Timestamp::in(10.0);
|
||||||
}
|
}
|
||||||
|
if (!drop_addr_list_at_ && last_received_packet_ < td::Timestamp::in(-60.0 * 9.0)) {
|
||||||
|
drop_addr_list_at_ = td::Timestamp::in(60.0);
|
||||||
|
}
|
||||||
packet.run_basic_checks().ensure();
|
packet.run_basic_checks().ensure();
|
||||||
auto B = serialize_tl_object(packet.tl(), true);
|
auto B = serialize_tl_object(packet.tl(), true);
|
||||||
if (via_channel) {
|
if (via_channel) {
|
||||||
|
@ -692,6 +696,16 @@ void AdnlPeerPairImpl::reinit(td::int32 date) {
|
||||||
}
|
}
|
||||||
|
|
||||||
td::Result<std::pair<td::actor::ActorId<AdnlNetworkConnection>, bool>> AdnlPeerPairImpl::get_conn() {
|
td::Result<std::pair<td::actor::ActorId<AdnlNetworkConnection>, bool>> AdnlPeerPairImpl::get_conn() {
|
||||||
|
if (drop_addr_list_at_ && drop_addr_list_at_.is_in_past()) {
|
||||||
|
drop_addr_list_at_ = td::Timestamp::never();
|
||||||
|
priority_addr_list_ = AdnlAddressList{};
|
||||||
|
priority_conns_.clear();
|
||||||
|
addr_list_ = AdnlAddressList{};
|
||||||
|
conns_.clear();
|
||||||
|
has_reverse_addr_ = false;
|
||||||
|
return td::Status::Error(ErrorCode::notready, "no active connections");
|
||||||
|
}
|
||||||
|
|
||||||
if (!priority_addr_list_.empty() && priority_addr_list_.expire_at() < td::Clocks::system()) {
|
if (!priority_addr_list_.empty() && priority_addr_list_.expire_at() < td::Clocks::system()) {
|
||||||
priority_addr_list_ = AdnlAddressList{};
|
priority_addr_list_ = AdnlAddressList{};
|
||||||
priority_conns_.clear();
|
priority_conns_.clear();
|
||||||
|
|
|
@ -266,6 +266,7 @@ class AdnlPeerPairImpl : public AdnlPeerPair {
|
||||||
|
|
||||||
td::Timestamp last_received_packet_ = td::Timestamp::never();
|
td::Timestamp last_received_packet_ = td::Timestamp::never();
|
||||||
td::Timestamp try_reinit_at_ = td::Timestamp::never();
|
td::Timestamp try_reinit_at_ = td::Timestamp::never();
|
||||||
|
td::Timestamp drop_addr_list_at_ = td::Timestamp::never();
|
||||||
|
|
||||||
bool has_reverse_addr_ = false;
|
bool has_reverse_addr_ = false;
|
||||||
td::Timestamp request_reverse_ping_after_ = td::Timestamp::now();
|
td::Timestamp request_reverse_ping_after_ = td::Timestamp::now();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue