Drop binlog events if message database was deleted.

This commit is contained in:
levlam 2023-05-15 18:16:55 +03:00
parent 8880e56967
commit e626b5f68f
5 changed files with 44 additions and 33 deletions

View File

@ -38951,11 +38951,12 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
if (G()->close_flag()) {
return;
}
bool have_old_message_database = G()->use_message_database() && !G()->td_db()->was_dialog_db_created();
for (auto &event : events) {
CHECK(event.id_ != 0);
switch (event.type_) {
case LogEvent::HandlerType::SendMessage: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -38996,7 +38997,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::SendBotStartMessage: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39036,7 +39037,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::SendInlineQueryResultMessage: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39076,7 +39077,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::SendScreenshotTakenNotificationMessage: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39109,7 +39110,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ForwardMessages: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
continue;
}
@ -39187,7 +39188,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteMessage: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39211,7 +39212,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteMessagesOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39235,7 +39236,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteScheduledMessagesOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39260,7 +39261,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteDialogHistoryOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39280,7 +39281,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteTopicHistoryOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39341,7 +39342,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::DeleteDialogMessagesByDateOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39361,7 +39362,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReadHistoryOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39414,7 +39415,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReadMessageThreadHistoryOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39440,7 +39441,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReadMessageContentsOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39459,7 +39460,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReadAllDialogMentionsOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39478,7 +39479,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReadAllDialogReactionsOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39497,7 +39498,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ToggleDialogIsPinnedOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39516,7 +39517,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ReorderPinnedDialogsOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39540,7 +39541,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ToggleDialogIsMarkedAsUnreadOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39561,7 +39562,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ToggleDialogIsBlockedOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39580,7 +39581,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::SaveDialogDraftMessageOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39600,7 +39601,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::UpdateDialogNotificationSettingsOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39627,7 +39628,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::ToggleDialogReportSpamStateOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39646,7 +39647,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::SetDialogFolderIdOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39668,7 +39669,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::RegetDialog: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -39690,7 +39691,7 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::UnpinAllDialogMessagesOnServer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}

View File

@ -4215,8 +4215,9 @@ void NotificationManager::on_binlog_events(vector<BinlogEvent> &&events) {
return;
}
VLOG(notifications) << "Begin to process " << events.size() << " binlog events";
bool have_old_message_database = G()->use_message_database() && !G()->td_db()->was_dialog_db_created();
for (auto &event : events) {
if (!G()->use_message_database() || is_disabled() || max_notification_group_count_ == 0) {
if (!have_old_message_database || is_disabled() || max_notification_group_count_ == 0) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}

View File

@ -1843,10 +1843,11 @@ void PollManager::on_binlog_events(vector<BinlogEvent> &&events) {
if (G()->close_flag()) {
return;
}
bool have_old_message_database = G()->use_message_database() && !G()->td_db()->was_dialog_db_created();
for (auto &event : events) {
switch (event.type_) {
case LogEvent::HandlerType::SetPollAnswer: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}
@ -1865,7 +1866,7 @@ void PollManager::on_binlog_events(vector<BinlogEvent> &&events) {
break;
}
case LogEvent::HandlerType::StopPoll: {
if (!G()->use_message_database()) {
if (!have_old_message_database) {
binlog_erase(G()->td_db()->get_binlog(), event.id_);
break;
}

View File

@ -322,6 +322,9 @@ Status TdDb::init_sqlite(const Parameters &parameters, const DbKey &key, const D
bool use_dialog_db = parameters.use_message_database_;
bool use_message_thread_db = parameters.use_message_database_ && false;
bool use_message_database_ = parameters.use_message_database_;
was_dialog_db_created_ = false;
if (!use_sqlite) {
SqliteDb::destroy(sql_database_path).ignore();
return Status::OK();
@ -346,9 +349,8 @@ Status TdDb::init_sqlite(const Parameters &parameters, const DbKey &key, const D
LOG(INFO) << "Have PRAGMA user_version = " << user_version;
// init DialogDb
bool dialog_db_was_created = false;
if (use_dialog_db) {
TRY_STATUS(init_dialog_db(db, user_version, binlog_pmc, dialog_db_was_created));
TRY_STATUS(init_dialog_db(db, user_version, binlog_pmc, was_dialog_db_created_));
} else {
TRY_STATUS(drop_dialog_db(db, user_version));
}
@ -367,7 +369,7 @@ Status TdDb::init_sqlite(const Parameters &parameters, const DbKey &key, const D
TRY_STATUS(drop_message_db(db, user_version));
}
// init filesDb
// init FileDb
if (use_file_database_) {
TRY_STATUS(init_file_db(db, user_version));
} else {
@ -381,7 +383,7 @@ Status TdDb::init_sqlite(const Parameters &parameters, const DbKey &key, const D
TRY_STATUS(db.set_user_version(db_version));
}
if (dialog_db_was_created) {
if (was_dialog_db_created_) {
binlog_pmc.erase_by_prefix("pinned_dialog_ids");
binlog_pmc.erase_by_prefix("last_server_dialog_date");
binlog_pmc.erase_by_prefix("unread_message_count");

View File

@ -107,6 +107,10 @@ class TdDb {
return parameters_.use_message_database_;
}
bool was_dialog_db_created() const {
return was_dialog_db_created_;
}
std::shared_ptr<FileDbInterface> get_file_db_shared();
std::shared_ptr<SqliteConnectionSafe> &get_sqlite_connection_safe();
#define get_binlog() get_binlog_impl(__FILE__, __LINE__)
@ -145,6 +149,8 @@ class TdDb {
private:
Parameters parameters_;
bool was_dialog_db_created_ = false;
std::shared_ptr<SqliteConnectionSafe> sql_connection_;
std::shared_ptr<FileDbInterface> file_db_;