From 9862652e14bde58c665be2220ac93f07d8148a76 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 19 Feb 2020 17:57:30 +0300 Subject: [PATCH] Use the exact file size instead of the real file size in fast storage statistics on Windows, because the real file size is smaller then expected before the file is synced. GitOrigin-RevId: 451231c899c1b6c6b80b46e2cb42bd3b94def0a5 --- td/telegram/StorageManager.cpp | 14 ++++++++++---- td/telegram/StorageManager.h | 2 +- td/telegram/Td.cpp | 4 ++-- td/telegram/files/FileManager.cpp | 6 +++--- td/telegram/files/FileManager.h | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/td/telegram/StorageManager.cpp b/td/telegram/StorageManager.cpp index 373332cf..5035db4b 100644 --- a/td/telegram/StorageManager.cpp +++ b/td/telegram/StorageManager.cpp @@ -42,13 +42,19 @@ void StorageManager::start_up() { load_fast_stat(); } -void StorageManager::on_new_file(int64 size, int32 cnt) { - LOG(INFO) << "Add " << cnt << " file of size " << size << " to fast storage statistics"; +void StorageManager::on_new_file(int64 size, int64 real_size, int32 cnt) { + LOG(INFO) << "Add " << cnt << " file of size " << size << " with real size " << real_size + << " to fast storage statistics"; fast_stat_.cnt += cnt; - fast_stat_.size += size; +#if TD_WINDOWS + auto add_size = size; +#else + auto add_size = real_size; +#endif + fast_stat_.size += add_size; if (fast_stat_.cnt < 0 || fast_stat_.size < 0) { - LOG(ERROR) << "Wrong fast stat after adding size " << size << " and cnt " << cnt; + LOG(ERROR) << "Wrong fast stat after adding size " << add_size << " and cnt " << cnt; fast_stat_ = FileTypeStat(); } save_fast_stat(); diff --git a/td/telegram/StorageManager.h b/td/telegram/StorageManager.h index af3c4c56..810041d3 100644 --- a/td/telegram/StorageManager.h +++ b/td/telegram/StorageManager.h @@ -38,7 +38,7 @@ class StorageManager : public Actor { void run_gc(FileGcParameters parameters, Promise promise); void update_use_storage_optimizer(); - void on_new_file(int64 size, int32 cnt); + void on_new_file(int64 size, int64 real_size, int32 cnt); private: static constexpr uint32 GC_EACH = 60 * 60 * 24; // 1 day diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 64017a7d..d503f25d 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -4178,8 +4178,8 @@ void Td::init_file_manager() { explicit FileManagerContext(Td *td) : td_(td) { } - void on_new_file(int64 size, int32 cnt) final { - send_closure(G()->storage_manager(), &StorageManager::on_new_file, size, cnt); + void on_new_file(int64 size, int64 real_size, int32 cnt) final { + send_closure(G()->storage_manager(), &StorageManager::on_new_file, size, real_size, cnt); } void on_file_updated(FileId file_id) final { diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index 9a5e07d2..27300848 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -2020,7 +2020,7 @@ void FileManager::delete_file(FileId file_id, Promise promise, const char LOG(INFO) << "Unlink file " << file_id << " at " << file_view.local_location().path_; clear_from_pmc(node); - context_->on_new_file(-file_view.get_allocated_local_size(), -1); + context_->on_new_file(-file_view.size(), -file_view.get_allocated_local_size(), -1); unlink(file_view.local_location().path_).ignore(); node->drop_local_location(); try_flush_node(node, "delete_file 1"); @@ -3272,7 +3272,7 @@ void FileManager::on_download_ok(QueryId query_id, const FullLocalFileLocation & LOG(ERROR) << "Can't register local file after download: " << r_new_file_id.error(); } else { if (is_new) { - context_->on_new_file(get_file_view(r_new_file_id.ok()).get_allocated_local_size(), 1); + context_->on_new_file(size, get_file_view(r_new_file_id.ok()).get_allocated_local_size(), 1); } LOG_STATUS(merge(r_new_file_id.ok(), file_id)); } @@ -3439,7 +3439,7 @@ void FileManager::on_generate_ok(QueryId query_id, const FullLocalFileLocation & FileView file_view(file_node); if (!file_view.has_generate_location() || !begins_with(file_view.generate_location().conversion_, "#file_id#")) { - context_->on_new_file(file_view.get_allocated_local_size(), 1); + context_->on_new_file(file_view.size(), file_view.get_allocated_local_size(), 1); } run_upload(file_node, {}); diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index 820460c5..08f8a8a5 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -361,7 +361,7 @@ class FileManager : public FileLoadManager::Callback { class Context { public: - virtual void on_new_file(int64 size, int32 cnt) = 0; + virtual void on_new_file(int64 size, int64 real_size, int32 cnt) = 0; virtual void on_file_updated(FileId size) = 0;