Add debug for "Lost promise" errors.

This commit is contained in:
levlam 2022-08-18 21:32:36 +03:00
parent 26bd2c71b3
commit db5ad187d0
2 changed files with 10 additions and 10 deletions

View File

@ -2940,12 +2940,12 @@ void Td::request(uint64 id, tl_object_ptr<td_api::Function> function) {
return; return;
} }
request_set_.insert(id);
if (function == nullptr) { if (function == nullptr) {
return send_error_impl(id, make_error(400, "Request is empty")); return callback_->on_error(id, make_error(400, "Request is empty"));
} }
VLOG(td_requests) << "Receive request " << id << ": " << to_string(function); VLOG(td_requests) << "Receive request " << id << ": " << to_string(function);
request_set_.emplace(id, function->get_id());
if (is_synchronous_request(function.get())) { if (is_synchronous_request(function.get())) {
// send response synchronously // send response synchronously
return send_result(id, static_request(std::move(function))); return send_result(id, static_request(std::move(function)));
@ -3352,7 +3352,7 @@ void Td::clear_requests() {
alarm_timeout_.cancel_timeout(alarm_id); alarm_timeout_.cancel_timeout(alarm_id);
} }
while (!request_set_.empty()) { while (!request_set_.empty()) {
uint64 id = *request_set_.begin(); uint64 id = request_set_.begin()->first;
if (destroy_flag_) { if (destroy_flag_) {
send_error_impl(id, make_error(401, "Unauthorized")); send_error_impl(id, make_error(401, "Unauthorized"));
} else { } else {
@ -4070,11 +4070,11 @@ void Td::send_result(uint64 id, tl_object_ptr<td_api::Object> object) {
auto it = request_set_.find(id); auto it = request_set_.find(id);
if (it != request_set_.end()) { if (it != request_set_.end()) {
request_set_.erase(it);
VLOG(td_requests) << "Sending result for request " << id << ": " << to_string(object);
if (object == nullptr) { if (object == nullptr) {
object = make_tl_object<td_api::error>(404, "Not Found"); object = make_tl_object<td_api::error>(404, "Not Found");
} }
VLOG(td_requests) << "Sending result for request " << id << ": " << to_string(object);
request_set_.erase(it);
callback_->on_result(id, std::move(object)); callback_->on_result(id, std::move(object));
} }
} }
@ -4084,11 +4084,11 @@ void Td::send_error_impl(uint64 id, tl_object_ptr<td_api::error> error) {
CHECK(error != nullptr); CHECK(error != nullptr);
auto it = request_set_.find(id); auto it = request_set_.find(id);
if (it != request_set_.end()) { if (it != request_set_.end()) {
request_set_.erase(it);
VLOG(td_requests) << "Sending error for request " << id << ": " << oneline(to_string(error));
if (error->code_ == 0 && error->message_ == "Lost promise") { if (error->code_ == 0 && error->message_ == "Lost promise") {
LOG(FATAL) << "Lost promise for query " << id; LOG(FATAL) << "Lost promise for query " << id << " of type " << it->second;
} }
VLOG(td_requests) << "Sending error for request " << id << ": " << oneline(to_string(error));
request_set_.erase(it);
callback_->on_error(id, std::move(error)); callback_->on_error(id, std::move(error));
} }
} }

View File

@ -33,7 +33,7 @@
#include "td/utils/Status.h" #include "td/utils/Status.h"
#include <memory> #include <memory>
#include <unordered_set> #include <unordered_map>
#include <utility> #include <utility>
namespace td { namespace td {
@ -284,7 +284,7 @@ class Td final : public Actor {
ConnectionState connection_state_ = ConnectionState::Empty; ConnectionState connection_state_ = ConnectionState::Empty;
std::unordered_multiset<uint64> request_set_; std::unordered_multimap<uint64, int32> request_set_;
int actor_refcnt_ = 0; int actor_refcnt_ = 0;
int request_actor_refcnt_ = 0; int request_actor_refcnt_ = 0;
int stop_cnt_ = 2; int stop_cnt_ = 2;