Add more logging and minor file reference fixes.
GitOrigin-RevId: 42fd08c7e7d8c4d0be12e5cddb352dd874553edb
This commit is contained in:
parent
49965b4ab7
commit
24128120cb
@ -225,8 +225,9 @@ class FileDb : public FileDbInterface {
|
|||||||
generate_key = as_key(*file_data.generate_);
|
generate_key = as_key(*file_data.generate_);
|
||||||
}
|
}
|
||||||
LOG(DEBUG) << "SAVE " << id.get() << " -> " << file_data << " "
|
LOG(DEBUG) << "SAVE " << id.get() << " -> " << file_data << " "
|
||||||
<< tag("remote", format::as_hex_dump<4>(Slice(remote_key)))
|
<< tag("remote_key", format::as_hex_dump<4>(Slice(remote_key)))
|
||||||
<< tag("local", format::as_hex_dump<4>(Slice(local_key)));
|
<< tag("local_key", format::as_hex_dump<4>(Slice(local_key)))
|
||||||
|
<< tag("generate_key", format::as_hex_dump<4>(Slice(generate_key)));
|
||||||
send_closure(file_db_actor_, &FileDbActor::store_file_data, id, serialize(file_data), remote_key, local_key,
|
send_closure(file_db_actor_, &FileDbActor::store_file_data, id, serialize(file_data), remote_key, local_key,
|
||||||
generate_key);
|
generate_key);
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "td/utils/port/path.h"
|
#include "td/utils/port/path.h"
|
||||||
#include "td/utils/port/Stat.h"
|
#include "td/utils/port/Stat.h"
|
||||||
#include "td/utils/ScopeGuard.h"
|
#include "td/utils/ScopeGuard.h"
|
||||||
|
#include "td/utils/StringBuilder.h"
|
||||||
#include "td/utils/tl_helpers.h"
|
#include "td/utils/tl_helpers.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -43,6 +44,22 @@ namespace {
|
|||||||
constexpr int64 MAX_FILE_SIZE = 1500 * (1 << 20) /* 1500MB */;
|
constexpr int64 MAX_FILE_SIZE = 1500 * (1 << 20) /* 1500MB */;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
StringBuilder &operator<<(StringBuilder &string_builder, FileLocationSource source) {
|
||||||
|
switch (source) {
|
||||||
|
case FileLocationSource::None:
|
||||||
|
return string_builder << "None";
|
||||||
|
case FileLocationSource::FromUser:
|
||||||
|
return string_builder << "User";
|
||||||
|
case FileLocationSource::FromDatabase:
|
||||||
|
return string_builder << "Database";
|
||||||
|
case FileLocationSource::FromServer:
|
||||||
|
return string_builder << "Server";
|
||||||
|
default:
|
||||||
|
UNREACHABLE();
|
||||||
|
return string_builder << "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NewRemoteFileLocation::NewRemoteFileLocation(RemoteFileLocation remote, FileLocationSource source) {
|
NewRemoteFileLocation::NewRemoteFileLocation(RemoteFileLocation remote, FileLocationSource source) {
|
||||||
switch (remote.type()) {
|
switch (remote.type()) {
|
||||||
case RemoteFileLocation::Type::Empty:
|
case RemoteFileLocation::Type::Empty:
|
||||||
@ -949,7 +966,7 @@ Result<FileId> FileManager::register_file(FileData &&data, FileLocationSource fi
|
|||||||
bool has_remote = data.remote_.type() == RemoteFileLocation::Type::Full;
|
bool has_remote = data.remote_.type() == RemoteFileLocation::Type::Full;
|
||||||
bool has_generate = data.generate_ != nullptr;
|
bool has_generate = data.generate_ != nullptr;
|
||||||
if (data.local_.type() == LocalFileLocation::Type::Full && !force) {
|
if (data.local_.type() == LocalFileLocation::Type::Full && !force) {
|
||||||
if (file_location_source == FileLocationSource::FromDb) {
|
if (file_location_source == FileLocationSource::FromDatabase) {
|
||||||
PathView path_view(data.local_.full().path_);
|
PathView path_view(data.local_.full().path_);
|
||||||
if (path_view.is_relative()) {
|
if (path_view.is_relative()) {
|
||||||
data.local_.full().path_ = PSTRING()
|
data.local_.full().path_ = PSTRING()
|
||||||
@ -1073,6 +1090,7 @@ static int merge_choose_file_source_location(FileLocationSource x, FileLocationS
|
|||||||
|
|
||||||
static int merge_choose_remote_location(const FullRemoteFileLocation &x, FileLocationSource x_source,
|
static int merge_choose_remote_location(const FullRemoteFileLocation &x, FileLocationSource x_source,
|
||||||
const FullRemoteFileLocation &y, FileLocationSource y_source) {
|
const FullRemoteFileLocation &y, FileLocationSource y_source) {
|
||||||
|
LOG(INFO) << "Choose between " << x << " from " << x_source << " and " << y << " from " << y_source;
|
||||||
if (x.is_web() != y.is_web()) {
|
if (x.is_web() != y.is_web()) {
|
||||||
return x.is_web(); // prefer non-web
|
return x.is_web(); // prefer non-web
|
||||||
}
|
}
|
||||||
@ -1086,11 +1104,12 @@ static int merge_choose_remote_location(const FullRemoteFileLocation &x, FileLoc
|
|||||||
return merge_choose_file_source_location(x_source, y_source);
|
return merge_choose_file_source_location(x_source, y_source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (x.get_access_hash() != y.get_access_hash()) {
|
if (x.get_access_hash() != y.get_access_hash() && (x_source != y_source || x.is_web() || x.get_id() == y.get_id())) {
|
||||||
return merge_choose_file_source_location(x_source, y_source);
|
return merge_choose_file_source_location(x_source, y_source);
|
||||||
}
|
}
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int merge_choose_remote_location(const NewRemoteFileLocation &x, const NewRemoteFileLocation &y) {
|
static int merge_choose_remote_location(const NewRemoteFileLocation &x, const NewRemoteFileLocation &y) {
|
||||||
if (x.is_full_alive != y.is_full_alive) {
|
if (x.is_full_alive != y.is_full_alive) {
|
||||||
return !x.is_full_alive;
|
return !x.is_full_alive;
|
||||||
@ -1211,7 +1230,7 @@ void FileManager::do_cancel_generate(FileNodePtr node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) {
|
Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sync) {
|
||||||
LOG(DEBUG) << x_file_id << " VS " << y_file_id;
|
LOG(DEBUG) << "Merge new file " << x_file_id << " and old file " << y_file_id;
|
||||||
|
|
||||||
if (!x_file_id.is_valid()) {
|
if (!x_file_id.is_valid()) {
|
||||||
return Status::Error("First file_id is invalid");
|
return Status::Error("First file_id is invalid");
|
||||||
@ -1240,7 +1259,7 @@ Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (x_node->remote_.full && y_node->remote_.full && !x_node->remote_.full.value().is_web() &&
|
if (x_node->remote_.full && y_node->remote_.full && !x_node->remote_.full.value().is_web() &&
|
||||||
!y_node->remote_.full.value().is_web() &&
|
!y_node->remote_.full.value().is_web() && y_node->remote_.is_full_alive &&
|
||||||
x_node->remote_.full.value().get_dc_id() != y_node->remote_.full.value().get_dc_id()) {
|
x_node->remote_.full.value().get_dc_id() != y_node->remote_.full.value().get_dc_id()) {
|
||||||
LOG(ERROR) << "File remote location was changed from " << y_node->remote_.full.value() << " to "
|
LOG(ERROR) << "File remote location was changed from " << y_node->remote_.full.value() << " to "
|
||||||
<< x_node->remote_.full.value();
|
<< x_node->remote_.full.value();
|
||||||
@ -1268,8 +1287,7 @@ Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy
|
|||||||
}
|
}
|
||||||
if (encryption_key_i == -1) {
|
if (encryption_key_i == -1) {
|
||||||
if (nodes[remote_i]->remote_.full && nodes[local_i]->local_.type() != LocalFileLocation::Type::Partial) {
|
if (nodes[remote_i]->remote_.full && nodes[local_i]->local_.type() != LocalFileLocation::Type::Partial) {
|
||||||
//???
|
LOG(ERROR) << "Different encryption key in files, but lets choose same key as remote location";
|
||||||
LOG(ERROR) << "Different encryption key in files, but go Choose same key as remote location";
|
|
||||||
encryption_key_i = remote_i;
|
encryption_key_i = remote_i;
|
||||||
} else {
|
} else {
|
||||||
return Status::Error("Can't merge files. Different encryption keys");
|
return Status::Error("Can't merge files. Different encryption keys");
|
||||||
@ -1301,7 +1319,8 @@ Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy
|
|||||||
<< ", node_i = " << node_i << ", local_i = " << local_i << ", remote_i = " << remote_i
|
<< ", node_i = " << node_i << ", local_i = " << local_i << ", remote_i = " << remote_i
|
||||||
<< ", generate_i = " << generate_i << ", size_i = " << size_i << ", remote_name_i = " << remote_name_i
|
<< ", generate_i = " << generate_i << ", size_i = " << size_i << ", remote_name_i = " << remote_name_i
|
||||||
<< ", url_i = " << url_i << ", owner_i = " << owner_i << ", encryption_key_i = " << encryption_key_i
|
<< ", url_i = " << url_i << ", owner_i = " << owner_i << ", encryption_key_i = " << encryption_key_i
|
||||||
<< ", main_file_id_i = " << main_file_id_i;
|
<< ", main_file_id_i = " << main_file_id_i << ", trusted_by_source = " << trusted_by_source
|
||||||
|
<< ", x_source = " << x_node->remote_.full_source << ", y_source = " << y_node->remote_.full_source;
|
||||||
if (local_i == other_node_i) {
|
if (local_i == other_node_i) {
|
||||||
do_cancel_download(node);
|
do_cancel_download(node);
|
||||||
node->set_download_offset(other_node->download_offset_);
|
node->set_download_offset(other_node->download_offset_);
|
||||||
@ -1680,7 +1699,8 @@ void FileManager::load_from_pmc(FileNodePtr node, bool new_remote, bool new_loca
|
|||||||
<< ", new_local = " << new_local << ", new_generate = " << new_generate;
|
<< ", new_local = " << new_local << ", new_generate = " << new_generate;
|
||||||
auto load = [&](auto location) {
|
auto load = [&](auto location) {
|
||||||
TRY_RESULT(file_data, file_db_->get_file_data_sync(location));
|
TRY_RESULT(file_data, file_db_->get_file_data_sync(location));
|
||||||
TRY_RESULT(new_file_id, register_file(std::move(file_data), FileLocationSource::FromDb, "load_from_pmc", false));
|
TRY_RESULT(new_file_id,
|
||||||
|
register_file(std::move(file_data), FileLocationSource::FromDatabase, "load_from_pmc", false));
|
||||||
TRY_RESULT(main_file_id, merge(file_id, new_file_id));
|
TRY_RESULT(main_file_id, merge(file_id, new_file_id));
|
||||||
file_id = main_file_id;
|
file_id = main_file_id;
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
|
@ -46,7 +46,7 @@ extern int VERBOSITY_NAME(update_file);
|
|||||||
class FileData;
|
class FileData;
|
||||||
class FileDbInterface;
|
class FileDbInterface;
|
||||||
|
|
||||||
enum class FileLocationSource : int8 { None, FromUser, FromDb, FromServer };
|
enum class FileLocationSource : int8 { None, FromUser, FromDatabase, FromServer };
|
||||||
|
|
||||||
struct NewRemoteFileLocation {
|
struct NewRemoteFileLocation {
|
||||||
NewRemoteFileLocation() = default;
|
NewRemoteFileLocation() = default;
|
||||||
|
@ -155,8 +155,8 @@ FileId FileManager::parse_file(ParserT &parser) {
|
|||||||
if (parser.version() >= static_cast<int32>(Version::StoreFileOwnerId)) {
|
if (parser.version() >= static_cast<int32>(Version::StoreFileOwnerId)) {
|
||||||
parse(owner_dialog_id, parser);
|
parse(owner_dialog_id, parser);
|
||||||
}
|
}
|
||||||
return register_remote(full_remote_location, FileLocationSource::FromDb, owner_dialog_id, size, expected_size,
|
return register_remote(full_remote_location, FileLocationSource::FromDatabase, owner_dialog_id, size,
|
||||||
name);
|
expected_size, name);
|
||||||
}
|
}
|
||||||
case FileStoreType::Local: {
|
case FileStoreType::Local: {
|
||||||
FullLocalFileLocation full_local_location;
|
FullLocalFileLocation full_local_location;
|
||||||
@ -200,7 +200,7 @@ FileId FileManager::parse_file(ParserT &parser) {
|
|||||||
full_generated_location.conversion_ = PSTRING() << "#file_id#" << download_file_id.get();
|
full_generated_location.conversion_ = PSTRING() << "#file_id#" << download_file_id.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto r_file_id = register_generate(full_generated_location.file_type_, FileLocationSource::FromDb,
|
auto r_file_id = register_generate(full_generated_location.file_type_, FileLocationSource::FromDatabase,
|
||||||
full_generated_location.original_path_, full_generated_location.conversion_,
|
full_generated_location.original_path_, full_generated_location.conversion_,
|
||||||
owner_dialog_id, expected_size);
|
owner_dialog_id, expected_size);
|
||||||
if (r_file_id.is_ok()) {
|
if (r_file_id.is_ok()) {
|
||||||
@ -217,7 +217,7 @@ FileId FileManager::parse_file(ParserT &parser) {
|
|||||||
if (parser.version() >= static_cast<int32>(Version::StoreFileOwnerId)) {
|
if (parser.version() >= static_cast<int32>(Version::StoreFileOwnerId)) {
|
||||||
parse(owner_dialog_id, parser);
|
parse(owner_dialog_id, parser);
|
||||||
}
|
}
|
||||||
return register_url(url, type, FileLocationSource::FromDb, owner_dialog_id);
|
return register_url(url, type, FileLocationSource::FromDatabase, owner_dialog_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FileId();
|
return FileId();
|
||||||
|
Loading…
Reference in New Issue
Block a user