Fail to forward old messages after restart.
GitOrigin-RevId: 948954d3f6b9e3c7c4a8479233c95115cc676620
This commit is contained in:
parent
dccef30582
commit
91950e9452
@ -26179,8 +26179,8 @@ MessagesManager::Message *MessagesManager::continue_send_message(DialogId dialog
|
|||||||
m->have_previous = true;
|
m->have_previous = true;
|
||||||
m->have_next = true;
|
m->have_next = true;
|
||||||
|
|
||||||
LOG(WARNING) << "Continue to send " << m->message_id << " to " << dialog_id << " initially sent at " << m->send_date
|
LOG(INFO) << "Continue to send " << m->message_id << " to " << dialog_id << " initially sent at " << m->send_date
|
||||||
<< " from binlog";
|
<< " from binlog";
|
||||||
|
|
||||||
if (!have_input_peer(dialog_id, AccessRights::Read)) {
|
if (!have_input_peer(dialog_id, AccessRights::Read)) {
|
||||||
binlog_erase(G()->td_db()->get_binlog(), logevent_id);
|
binlog_erase(G()->td_db()->get_binlog(), logevent_id);
|
||||||
@ -26202,9 +26202,7 @@ MessagesManager::Message *MessagesManager::continue_send_message(DialogId dialog
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto can_send_status = can_send_message(dialog_id);
|
auto can_send_status = can_send_message(dialog_id);
|
||||||
const int32 MAX_RESEND_DELAY = 86400;
|
|
||||||
if (can_send_status.is_ok() && result_message->send_date < now - MAX_RESEND_DELAY) {
|
if (can_send_status.is_ok() && result_message->send_date < now - MAX_RESEND_DELAY) {
|
||||||
LOG(WARNING) << "Fail sending old message to " << dialog_id;
|
|
||||||
can_send_status = Status::Error(400, "Message is too old to be resent automatically");
|
can_send_status = Status::Error(400, "Message is too old to be resent automatically");
|
||||||
}
|
}
|
||||||
if (can_send_status.is_error()) {
|
if (can_send_status.is_error()) {
|
||||||
@ -26377,22 +26375,25 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
auto now = G()->unix_time();
|
||||||
for (auto &m : messages) {
|
for (auto &m : messages) {
|
||||||
m->message_id = get_next_yet_unsent_message_id(to_dialog);
|
m->message_id = get_next_yet_unsent_message_id(to_dialog);
|
||||||
m->random_y = get_random_y(m->message_id);
|
m->random_y = get_random_y(m->message_id);
|
||||||
m->date = G()->unix_time();
|
m->date = now;
|
||||||
m->content = dup_message_content(to_dialog_id, m->content.get(), true);
|
m->content = dup_message_content(to_dialog_id, m->content.get(), true);
|
||||||
m->have_previous = true;
|
m->have_previous = true;
|
||||||
m->have_next = true;
|
m->have_next = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(INFO) << "Continue to forward " << messages.size() << " messages to " << to_dialog_id << " from binlog";
|
if (!have_input_peer(from_dialog_id, AccessRights::Read) || can_send_message(to_dialog_id).is_error() ||
|
||||||
|
messages.empty() || messages[0]->send_date < now - MAX_RESEND_DELAY) {
|
||||||
if (!have_input_peer(from_dialog_id, AccessRights::Read) || can_send_message(to_dialog_id).is_error()) {
|
LOG(WARNING) << "Can't continue forwarding " << messages.size() << " message(s) to " << to_dialog_id;
|
||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG(INFO) << "Continue to forward " << messages.size() << " message(s) to " << to_dialog_id << " from binlog";
|
||||||
|
|
||||||
bool need_update = false;
|
bool need_update = false;
|
||||||
bool need_update_dialog_pos = false;
|
bool need_update_dialog_pos = false;
|
||||||
vector<Message *> forwarded_messages;
|
vector<Message *> forwarded_messages;
|
||||||
|
@ -1938,6 +1938,8 @@ class MessagesManager : public Actor {
|
|||||||
static constexpr int32 MIN_LIVE_LOCATION_PERIOD = 60; // seconds, server side limit
|
static constexpr int32 MIN_LIVE_LOCATION_PERIOD = 60; // seconds, server side limit
|
||||||
static constexpr int32 MAX_LIVE_LOCATION_PERIOD = 86400; // seconds, server side limit
|
static constexpr int32 MAX_LIVE_LOCATION_PERIOD = 86400; // seconds, server side limit
|
||||||
|
|
||||||
|
static constexpr int32 MAX_RESEND_DELAY = 86400; // seconds, some resonable limit
|
||||||
|
|
||||||
static constexpr int32 MAX_PRELOADED_DIALOGS = 1000;
|
static constexpr int32 MAX_PRELOADED_DIALOGS = 1000;
|
||||||
|
|
||||||
static constexpr double DIALOG_ACTION_TIMEOUT = 5.5;
|
static constexpr double DIALOG_ACTION_TIMEOUT = 5.5;
|
||||||
|
Reference in New Issue
Block a user