Send NetQuery to callback when closing.
GitOrigin-RevId: 6e564fd9401ae4352471d2938058d02e54c73f05
This commit is contained in:
parent
a09e94370b
commit
2c4678a1e3
@ -616,9 +616,11 @@ void ConfigManager::on_result(NetQueryPtr res) {
|
||||
config_sent_cnt_--;
|
||||
auto r_config = fetch_result<telegram_api::help_getConfig>(std::move(res));
|
||||
if (r_config.is_error()) {
|
||||
LOG(ERROR) << "TODO: getConfig failed: " << r_config.error();
|
||||
expire_ = Timestamp::in(60.0); // try again in a minute
|
||||
set_timeout_in(expire_.in());
|
||||
if (!G()->close_flag()) {
|
||||
LOG(ERROR) << "TODO: getConfig failed: " << r_config.error();
|
||||
expire_ = Timestamp::in(60.0); // try again in a minute
|
||||
set_timeout_in(expire_.in());
|
||||
}
|
||||
} else {
|
||||
on_dc_options_update(DcOptions());
|
||||
process_config(r_config.move_as_ok());
|
||||
|
@ -21,12 +21,14 @@ void NetQuery::on_net_write(size_t size) {
|
||||
}
|
||||
G()->get_net_stats_file_callbacks().at(file_type_)->on_write(size);
|
||||
}
|
||||
|
||||
void NetQuery::on_net_read(size_t size) {
|
||||
if (file_type_ == -1) {
|
||||
return;
|
||||
}
|
||||
G()->get_net_stats_file_callbacks().at(file_type_)->on_read(size);
|
||||
}
|
||||
|
||||
int32 NetQuery::tl_magic(const BufferSlice &buffer_slice) {
|
||||
auto slice = buffer_slice.as_slice();
|
||||
if (slice.size() < 4) {
|
||||
|
@ -244,9 +244,11 @@ class NetQuery : public ListNode {
|
||||
debug_cnt_++;
|
||||
VLOG(net_query) << *this << " " << tag("debug", debug_str_);
|
||||
}
|
||||
|
||||
void set_callback(ActorShared<NetQueryCallback> callback) {
|
||||
callback_ = std::move(callback);
|
||||
}
|
||||
|
||||
ActorShared<NetQueryCallback> move_callback() {
|
||||
return std::move(callback_);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "td/utils/Status.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
void NetQueryDelayer::delay(NetQueryPtr query) {
|
||||
query->debug("try delay");
|
||||
query->is_ready();
|
||||
@ -116,4 +117,5 @@ void NetQueryDelayer::tear_down() {
|
||||
G()->net_query_dispatcher().dispatch(std::move(query_slot.query_));
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace td
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "td/utils/Container.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
class NetQueryDelayer : public Actor {
|
||||
public:
|
||||
explicit NetQueryDelayer(ActorShared<> parent) : parent_(std::move(parent)) {
|
||||
@ -32,4 +33,5 @@ class NetQueryDelayer : public Actor {
|
||||
|
||||
void tear_down() override;
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
|
@ -26,16 +26,23 @@
|
||||
#include "td/utils/Slice.h"
|
||||
|
||||
namespace td {
|
||||
|
||||
void NetQueryDispatcher::complete_net_query(NetQueryPtr net_query) {
|
||||
auto callback = net_query->move_callback();
|
||||
if (callback.empty()) {
|
||||
net_query->debug("sent to td (no callback)");
|
||||
send_closure(G()->td(), &NetQueryCallback::on_result, std::move(net_query));
|
||||
} else {
|
||||
net_query->debug("sent to callback", true);
|
||||
send_closure(std::move(callback), &NetQueryCallback::on_result, std::move(net_query));
|
||||
}
|
||||
}
|
||||
|
||||
void NetQueryDispatcher::dispatch(NetQueryPtr net_query) {
|
||||
net_query->debug("dispatch");
|
||||
if (stop_flag_.load(std::memory_order_relaxed)) {
|
||||
// Set error to avoid warning
|
||||
// No need to send result somewhere, it probably will be ignored anyway
|
||||
net_query->set_error(Status::Error(500, "Internal Server Error: closing"));
|
||||
net_query->clear();
|
||||
net_query.reset();
|
||||
// G()->net_query_creator().release(std::move(net_query));
|
||||
return;
|
||||
return complete_net_query(std::move(net_query));
|
||||
}
|
||||
|
||||
if (net_query->is_ready()) {
|
||||
@ -67,15 +74,7 @@ void NetQueryDispatcher::dispatch(NetQueryPtr net_query) {
|
||||
}
|
||||
|
||||
if (net_query->is_ready()) {
|
||||
auto callback = net_query->move_callback();
|
||||
if (callback.empty()) {
|
||||
net_query->debug("sent to td (no callback)");
|
||||
send_closure(G()->td(), &NetQueryCallback::on_result, std::move(net_query));
|
||||
} else {
|
||||
net_query->debug("sent to callback", true);
|
||||
send_closure(std::move(callback), &NetQueryCallback::on_result, std::move(net_query));
|
||||
}
|
||||
return;
|
||||
return complete_net_query(std::move(net_query));
|
||||
}
|
||||
|
||||
if (net_query->dispatch_ttl > 0) {
|
||||
|
@ -30,6 +30,7 @@ class PublicRsaKeyWatchdog;
|
||||
} // namespace td
|
||||
|
||||
namespace td {
|
||||
|
||||
// Not just dispatcher.
|
||||
class NetQueryDispatcher {
|
||||
public:
|
||||
@ -83,6 +84,9 @@ class NetQueryDispatcher {
|
||||
static int32 get_session_count();
|
||||
static bool get_use_pfs();
|
||||
|
||||
static void complete_net_query(NetQueryPtr net_query);
|
||||
|
||||
void try_fix_migrate(NetQueryPtr &net_query);
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
|
Reference in New Issue
Block a user