From 0167d9c3a626c2ca74be5dfb655f6fe77a708144 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 3 Oct 2019 19:30:31 +0300 Subject: [PATCH] Remove StorageManager::gc_parameters_ local variable. GitOrigin-RevId: 7cb3e4595a7afe9681c0a6dc05249965b3243d4c --- td/telegram/StorageManager.cpp | 37 +++++++++++++++++----------------- td/telegram/StorageManager.h | 6 ++---- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/td/telegram/StorageManager.cpp b/td/telegram/StorageManager.cpp index 3840e3a73..f1888d8ef 100644 --- a/td/telegram/StorageManager.cpp +++ b/td/telegram/StorageManager.cpp @@ -67,7 +67,7 @@ void StorageManager::get_storage_stats(bool need_all_files, int32 dialog_limit, //TODO group same queries close_stats_worker(); } - if (pending_run_gc_.size() != 0) { + if (!pending_run_gc_.empty()) { close_gc_worker(); } stats_dialog_limit_ = dialog_limit; @@ -106,20 +106,21 @@ void StorageManager::run_gc(FileGcParameters parameters, Promise prom promise.set_error(Status::Error(500, "Request aborted")); return; } - if (pending_run_gc_.size() != 0) { + if (!pending_run_gc_.empty()) { close_gc_worker(); } - get_storage_stats(true /*need_all_file*/, - !gc_parameters_.owner_dialog_ids.empty() || !gc_parameters_.exclude_owner_dialog_ids.empty() || - gc_parameters_.dialog_limit != 0 /*split_by_owner_dialog_id*/, - PromiseCreator::lambda([actor_id = actor_id(this)](Result file_stats) { - send_closure(actor_id, &StorageManager::on_all_files, std::move(file_stats), false); - })); + bool split_by_owner_dialog_id = !parameters.owner_dialog_ids.empty() || + !parameters.exclude_owner_dialog_ids.empty() || parameters.dialog_limit != 0; + get_storage_stats(true /*need_all_files*/, split_by_owner_dialog_id, + PromiseCreator::lambda( + [actor_id = actor_id(this), parameters = std::move(parameters)](Result file_stats) { + send_closure(actor_id, &StorageManager::on_all_files, std::move(parameters), + std::move(file_stats), false); + })); - //NB: get_storage stats will cancel all gc queries + //NB: get_storage_stats will cancel all gc queries, so promise needs to be added after the call pending_run_gc_.emplace_back(std::move(promise)); - gc_parameters_ = std::move(parameters); } void StorageManager::on_file_stats(Result r_file_stats, uint32 generation) { @@ -146,19 +147,20 @@ void StorageManager::create_stats_worker() { } } -void StorageManager::on_all_files(Result r_file_stats, bool dummy) { +void StorageManager::on_all_files(FileGcParameters gc_parameters, Result r_file_stats, bool dummy) { + int32 dialog_limit = gc_parameters.dialog_limit; if (is_closed_ && r_file_stats.is_ok()) { r_file_stats = Status::Error(500, "Request aborted"); } if (r_file_stats.is_error()) { - return on_gc_finished(std::move(r_file_stats), false); + return on_gc_finished(dialog_limit, std::move(r_file_stats), false); } create_gc_worker(); - send_closure(gc_worker_, &FileGcWorker::run_gc, gc_parameters_, r_file_stats.move_as_ok().all_files, - PromiseCreator::lambda([actor_id = actor_id(this)](Result r_file_stats) { - send_closure(actor_id, &StorageManager::on_gc_finished, std::move(r_file_stats), false); + send_closure(gc_worker_, &FileGcWorker::run_gc, std::move(gc_parameters), r_file_stats.move_as_ok().all_files, + PromiseCreator::lambda([actor_id = actor_id(this), dialog_limit](Result r_file_stats) { + send_closure(actor_id, &StorageManager::on_gc_finished, dialog_limit, std::move(r_file_stats), false); })); } @@ -204,7 +206,7 @@ void StorageManager::create_gc_worker() { } } -void StorageManager::on_gc_finished(Result r_file_stats, bool dummy) { +void StorageManager::on_gc_finished(int32 dialog_limit, Result r_file_stats, bool dummy) { if (r_file_stats.is_error()) { if (r_file_stats.error().code() != 500) { LOG(ERROR) << "GC failed: " << r_file_stats.error(); @@ -216,7 +218,7 @@ void StorageManager::on_gc_finished(Result r_file_stats, bool dummy) return; } - send_stats(r_file_stats.move_as_ok(), gc_parameters_.dialog_limit, std::move(pending_run_gc_)); + send_stats(r_file_stats.move_as_ok(), dialog_limit, std::move(pending_run_gc_)); } void StorageManager::save_fast_stat() { @@ -279,7 +281,6 @@ void StorageManager::close_gc_worker() { for (auto &promise : promises) { promise.set_error(Status::Error(500, "Request aborted")); } - gc_generation_++; gc_worker_.reset(); gc_cancellation_token_source_.cancel(); } diff --git a/td/telegram/StorageManager.h b/td/telegram/StorageManager.h index dc93b378e..80564b516 100644 --- a/td/telegram/StorageManager.h +++ b/td/telegram/StorageManager.h @@ -83,15 +83,13 @@ class StorageManager : public Actor { // Gc ActorOwn gc_worker_; std::vector> pending_run_gc_; - uint32 gc_generation_{0}; - FileGcParameters gc_parameters_; uint32 last_gc_timestamp_ = 0; double next_gc_at_ = 0; - void on_all_files(Result r_file_stats, bool dummy); + void on_all_files(FileGcParameters gc_parameters, Result r_file_stats, bool dummy); void create_gc_worker(); - void on_gc_finished(Result r_file_stats, bool dummy); + void on_gc_finished(int32 dialog_limit, Result r_file_stats, bool dummy); void close_stats_worker(); void close_gc_worker();