Add source to try_flush_node.
GitOrigin-RevId: 7cf8c352d6d3c5158adb0ee867e52538075950d1
This commit is contained in:
parent
071e8b1d6d
commit
c252e9ceb5
@ -687,7 +687,7 @@ Status FileManager::check_local_location(FileNodePtr node) {
|
|||||||
}
|
}
|
||||||
if (status.is_error()) {
|
if (status.is_error()) {
|
||||||
node->drop_local_location();
|
node->drop_local_location();
|
||||||
try_flush_node(node);
|
try_flush_node(node, "check_local_location");
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -746,7 +746,7 @@ void FileManager::on_file_unlink(const FullLocalFileLocation &location) {
|
|||||||
auto file_node = get_sync_file_node(file_id);
|
auto file_node = get_sync_file_node(file_id);
|
||||||
CHECK(file_node);
|
CHECK(file_node);
|
||||||
file_node->drop_local_location();
|
file_node->drop_local_location();
|
||||||
try_flush_node_info(file_node);
|
try_flush_node_info(file_node, "on_file_unlink");
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<FileId> FileManager::register_local(FullLocalFileLocation location, DialogId owner_dialog_id, int64 size,
|
Result<FileId> FileManager::register_local(FullLocalFileLocation location, DialogId owner_dialog_id, int64 size,
|
||||||
@ -904,7 +904,7 @@ Result<FileId> FileManager::register_file(FileData data, FileLocationSource file
|
|||||||
merge(file_id, id, no_sync_merge).ignore();
|
merge(file_id, id, no_sync_merge).ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
try_flush_node(get_file_node(file_id));
|
try_flush_node(get_file_node(file_id), "register_file");
|
||||||
auto main_file_id = get_file_node(file_id)->main_file_id_;
|
auto main_file_id = get_file_node(file_id)->main_file_id_;
|
||||||
try_forget_file_id(file_id);
|
try_forget_file_id(file_id);
|
||||||
return FileId(main_file_id.get(), remote_key);
|
return FileId(main_file_id.get(), remote_key);
|
||||||
@ -1272,12 +1272,12 @@ Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy
|
|||||||
// node might not changed, but we need to merge nodes in pmc anyway
|
// node might not changed, but we need to merge nodes in pmc anyway
|
||||||
node->on_pmc_changed();
|
node->on_pmc_changed();
|
||||||
}
|
}
|
||||||
try_flush_node(node, node_i != remote_i, node_i != local_i, node_i != generate_i, other_pmc_id);
|
try_flush_node_full(node, node_i != remote_i, node_i != local_i, node_i != generate_i, other_pmc_id);
|
||||||
|
|
||||||
return node->main_file_id_;
|
return node->main_file_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::try_flush_node(FileNodePtr node, bool new_remote, bool new_local, bool new_generate,
|
void FileManager::try_flush_node_full(FileNodePtr node, bool new_remote, bool new_local, bool new_generate,
|
||||||
FileDbId other_pmc_id) {
|
FileDbId other_pmc_id) {
|
||||||
if (node->need_pmc_flush()) {
|
if (node->need_pmc_flush()) {
|
||||||
if (file_db_) {
|
if (file_db_) {
|
||||||
@ -1290,15 +1290,27 @@ void FileManager::try_flush_node(FileNodePtr node, bool new_remote, bool new_loc
|
|||||||
node->on_pmc_flushed();
|
node->on_pmc_flushed();
|
||||||
}
|
}
|
||||||
|
|
||||||
try_flush_node_info(node);
|
try_flush_node_info(node, "try_flush_node_full");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::try_flush_node_info(FileNodePtr node) {
|
void FileManager::try_flush_node(FileNodePtr node, const char *source) {
|
||||||
|
if (node->need_pmc_flush()) {
|
||||||
|
if (file_db_) {
|
||||||
|
load_from_pmc(node, true, true, true);
|
||||||
|
flush_to_pmc(node, false, false, false);
|
||||||
|
}
|
||||||
|
node->on_pmc_flushed();
|
||||||
|
}
|
||||||
|
|
||||||
|
try_flush_node_info(node, source);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileManager::try_flush_node_info(FileNodePtr node, const char *source) {
|
||||||
if (node->need_info_flush()) {
|
if (node->need_info_flush()) {
|
||||||
for (auto file_id : vector<FileId>(node->file_ids_)) {
|
for (auto file_id : vector<FileId>(node->file_ids_)) {
|
||||||
auto *info = get_file_id_info(file_id);
|
auto *info = get_file_id_info(file_id);
|
||||||
if (info->send_updates_flag_) {
|
if (info->send_updates_flag_) {
|
||||||
VLOG(update_file) << "Send UpdateFile about file " << file_id;
|
VLOG(update_file) << "Send UpdateFile about file " << file_id << " from " << source;
|
||||||
context_->on_file_updated(file_id);
|
context_->on_file_updated(file_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1457,7 +1469,7 @@ bool FileManager::set_encryption_key(FileId file_id, FileEncryptionKey key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
node->set_encryption_key(std::move(key));
|
node->set_encryption_key(std::move(key));
|
||||||
try_flush_node(node);
|
try_flush_node(node, "set_encryption_key");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1529,7 +1541,7 @@ void FileManager::delete_file(FileId file_id, Promise<Unit> promise, const char
|
|||||||
unlink(file_view.local_location().path_).ignore();
|
unlink(file_view.local_location().path_).ignore();
|
||||||
context_->on_new_file(-file_view.size());
|
context_->on_new_file(-file_view.size());
|
||||||
node->drop_local_location();
|
node->drop_local_location();
|
||||||
try_flush_node(node);
|
try_flush_node(node, "delete_file 1");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (file_view.get_type() == FileType::Encrypted) {
|
if (file_view.get_type() == FileType::Encrypted) {
|
||||||
@ -1539,7 +1551,7 @@ void FileManager::delete_file(FileId file_id, Promise<Unit> promise, const char
|
|||||||
LOG(INFO) << "Unlink partial file " << file_id << " at " << node->local_.partial().path_;
|
LOG(INFO) << "Unlink partial file " << file_id << " at " << node->local_.partial().path_;
|
||||||
unlink(node->local_.partial().path_).ignore();
|
unlink(node->local_.partial().path_).ignore();
|
||||||
node->drop_local_location();
|
node->drop_local_location();
|
||||||
try_flush_node(node);
|
try_flush_node(node, "delete_file 2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1608,7 +1620,7 @@ void FileManager::download(FileId file_id, std::shared_ptr<DownloadCallback> cal
|
|||||||
run_generate(node);
|
run_generate(node);
|
||||||
run_download(node);
|
run_download(node);
|
||||||
|
|
||||||
try_flush_node(node);
|
try_flush_node(node, "download");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::download_set_offset(FileId file_id, int64 offset) {
|
void FileManager::download_set_offset(FileId file_id, int64 offset) {
|
||||||
@ -1623,7 +1635,7 @@ void FileManager::download_set_offset(FileId file_id, int64 offset) {
|
|||||||
file_node->set_download_offset(offset);
|
file_node->set_download_offset(offset);
|
||||||
run_generate(file_node);
|
run_generate(file_node);
|
||||||
run_download(file_node);
|
run_download(file_node);
|
||||||
try_flush_node(file_node);
|
try_flush_node(file_node, "download_set_offset");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::run_download(FileNodePtr node) {
|
void FileManager::run_download(FileNodePtr node) {
|
||||||
@ -1730,7 +1742,7 @@ void FileManager::resume_upload(FileId file_id, std::vector<int> bad_parts, std:
|
|||||||
|
|
||||||
run_generate(node);
|
run_generate(node);
|
||||||
run_upload(node, std::move(bad_parts));
|
run_upload(node, std::move(bad_parts));
|
||||||
try_flush_node(node);
|
try_flush_node(node, "resume_upload");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileManager::delete_partial_remote_location(FileId file_id) {
|
bool FileManager::delete_partial_remote_location(FileId file_id) {
|
||||||
@ -1763,7 +1775,7 @@ bool FileManager::delete_partial_remote_location(FileId file_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_upload(node, std::vector<int>());
|
run_upload(node, std::vector<int>());
|
||||||
try_flush_node(node);
|
try_flush_node(node, "delete_partial_remote_location");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2313,7 +2325,7 @@ void FileManager::on_partial_download(QueryId query_id, const PartialLocalFileLo
|
|||||||
file_node->set_size(size);
|
file_node->set_size(size);
|
||||||
}
|
}
|
||||||
file_node->set_local_location(LocalFileLocation(partial_local), ready_size, -1, -1 /* TODO */);
|
file_node->set_local_location(LocalFileLocation(partial_local), ready_size, -1, -1 /* TODO */);
|
||||||
try_flush_node(file_node);
|
try_flush_node(file_node, "on_partial_download");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::on_hash(QueryId query_id, string hash) {
|
void FileManager::on_hash(QueryId query_id, string hash) {
|
||||||
@ -2358,7 +2370,7 @@ void FileManager::on_partial_upload(QueryId query_id, const PartialRemoteFileLoc
|
|||||||
}
|
}
|
||||||
|
|
||||||
file_node->set_remote_location(RemoteFileLocation(partial_remote), FileLocationSource::None, ready_size);
|
file_node->set_remote_location(RemoteFileLocation(partial_remote), FileLocationSource::None, ready_size);
|
||||||
try_flush_node(file_node);
|
try_flush_node(file_node, "on_partial_upload");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size) {
|
void FileManager::on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size) {
|
||||||
@ -2498,7 +2510,7 @@ void FileManager::on_partial_generate(QueryId query_id, const PartialLocalFileLo
|
|||||||
LocalFileLocation(partial_local));
|
LocalFileLocation(partial_local));
|
||||||
}
|
}
|
||||||
|
|
||||||
try_flush_node(file_node);
|
try_flush_node(file_node, "on_partial_generate");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileManager::on_generate_ok(QueryId query_id, const FullLocalFileLocation &local) {
|
void FileManager::on_generate_ok(QueryId query_id, const FullLocalFileLocation &local) {
|
||||||
@ -2572,7 +2584,7 @@ void FileManager::on_error(QueryId query_id, Status status) {
|
|||||||
|
|
||||||
void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type, bool was_active, Status status) {
|
void FileManager::on_error_impl(FileNodePtr node, FileManager::Query::Type type, bool was_active, Status status) {
|
||||||
SCOPE_EXIT {
|
SCOPE_EXIT {
|
||||||
try_flush_node(node);
|
try_flush_node(node, "on_error");
|
||||||
};
|
};
|
||||||
if (status.code() != 1 && !G()->close_flag()) {
|
if (status.code() != 1 && !G()->close_flag()) {
|
||||||
LOG(WARNING) << "Failed to upload/download/generate file: " << status << ". Query type = " << type
|
LOG(WARNING) << "Failed to upload/download/generate file: " << status << ". Query type = " << type
|
||||||
|
@ -460,9 +460,9 @@ class FileManager : public FileLoadManager::Callback {
|
|||||||
|
|
||||||
Status check_local_location(FileNodePtr node);
|
Status check_local_location(FileNodePtr node);
|
||||||
Status check_local_location(FullLocalFileLocation &location, int64 &size);
|
Status check_local_location(FullLocalFileLocation &location, int64 &size);
|
||||||
void try_flush_node(FileNodePtr node, bool new_remote = false, bool new_local = false, bool new_generate = false,
|
void try_flush_node_full(FileNodePtr node, bool new_remote, bool new_local, bool new_generate, FileDbId other_pmc_id);
|
||||||
FileDbId other_pmc_id = Auto());
|
void try_flush_node(FileNodePtr node, const char *source);
|
||||||
void try_flush_node_info(FileNodePtr node);
|
void try_flush_node_info(FileNodePtr node, const char *source);
|
||||||
void clear_from_pmc(FileNodePtr node);
|
void clear_from_pmc(FileNodePtr node);
|
||||||
void flush_to_pmc(FileNodePtr node, bool new_remote, bool new_local, bool new_generate);
|
void flush_to_pmc(FileNodePtr node, bool new_remote, bool new_local, bool new_generate);
|
||||||
void load_from_pmc(FileNodePtr node, bool new_remote, bool new_local, bool new_generate);
|
void load_from_pmc(FileNodePtr node, bool new_remote, bool new_local, bool new_generate);
|
||||||
|
Reference in New Issue
Block a user