Do not try to force file reupload too often.
GitOrigin-RevId: 533e25add08f00daf06c1ce1e42a111c930ef41e
This commit is contained in:
parent
afca63a4f4
commit
bda15f31e4
@ -1492,6 +1492,10 @@ Result<FileId> FileManager::merge(FileId x_file_id, FileId y_file_id, bool no_sy
|
|||||||
node->need_load_from_pmc_ |= other_node->need_load_from_pmc_;
|
node->need_load_from_pmc_ |= other_node->need_load_from_pmc_;
|
||||||
node->can_search_locally_ &= other_node->can_search_locally_;
|
node->can_search_locally_ &= other_node->can_search_locally_;
|
||||||
|
|
||||||
|
if (other_node->last_successful_force_reupload_time_ > node->last_successful_force_reupload_time_) {
|
||||||
|
node->last_successful_force_reupload_time_ = other_node->last_successful_force_reupload_time_;
|
||||||
|
}
|
||||||
|
|
||||||
if (main_file_id_i == other_node_i) {
|
if (main_file_id_i == other_node_i) {
|
||||||
context_->on_merge_files(other_node->main_file_id_, node->main_file_id_);
|
context_->on_merge_files(other_node->main_file_id_, node->main_file_id_);
|
||||||
node->main_file_id_ = other_node->main_file_id_;
|
node->main_file_id_ = other_node->main_file_id_;
|
||||||
@ -2167,7 +2171,7 @@ void FileManager::run_download(FileNodePtr node) {
|
|||||||
download_limit, priority);
|
download_limit, priority);
|
||||||
}
|
}
|
||||||
|
|
||||||
class ForceUploadActor : public Actor {
|
class FileManager::ForceUploadActor : public Actor {
|
||||||
public:
|
public:
|
||||||
ForceUploadActor(FileManager *file_manager, FileId file_id, std::shared_ptr<FileManager::UploadCallback> callback,
|
ForceUploadActor(FileManager *file_manager, FileId file_id, std::shared_ptr<FileManager::UploadCallback> callback,
|
||||||
int32 new_priority, uint64 upload_order, ActorShared<> parent)
|
int32 new_priority, uint64 upload_order, ActorShared<> parent)
|
||||||
@ -2248,6 +2252,7 @@ class ForceUploadActor : public Actor {
|
|||||||
|
|
||||||
void on_ok() {
|
void on_ok() {
|
||||||
callback_.reset();
|
callback_.reset();
|
||||||
|
send_closure(G()->file_manager(), &FileManager::on_force_reupload_success, file_id_);
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2284,16 +2289,14 @@ class ForceUploadActor : public Actor {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void FileManager::on_force_reupload_success(FileId file_id) {
|
||||||
|
auto node = get_sync_file_node(file_id);
|
||||||
|
CHECK(node);
|
||||||
|
node->last_successful_force_reupload_time_ = Time::now();
|
||||||
|
}
|
||||||
|
|
||||||
void FileManager::resume_upload(FileId file_id, std::vector<int> bad_parts, std::shared_ptr<UploadCallback> callback,
|
void FileManager::resume_upload(FileId file_id, std::vector<int> bad_parts, std::shared_ptr<UploadCallback> callback,
|
||||||
int32 new_priority, uint64 upload_order, bool force) {
|
int32 new_priority, uint64 upload_order, bool force) {
|
||||||
if (bad_parts.size() == 1 && bad_parts[0] == -1) {
|
|
||||||
create_actor<ForceUploadActor>("ForceUploadActor", this, file_id, std::move(callback), new_priority, upload_order,
|
|
||||||
context_->create_reference())
|
|
||||||
.release();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LOG(INFO) << "Resume upload of file " << file_id << " with priority " << new_priority << " and force = " << force;
|
|
||||||
|
|
||||||
auto node = get_sync_file_node(file_id);
|
auto node = get_sync_file_node(file_id);
|
||||||
if (!node) {
|
if (!node) {
|
||||||
LOG(INFO) << "File " << file_id << " not found";
|
LOG(INFO) << "File " << file_id << " not found";
|
||||||
@ -2302,6 +2305,23 @@ void FileManager::resume_upload(FileId file_id, std::vector<int> bad_parts, std:
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bad_parts.size() == 1 && bad_parts[0] == -1) {
|
||||||
|
if (node->last_successful_force_reupload_time_ >= Time::now() - 60) {
|
||||||
|
LOG(INFO) << "Recently reuploaded file " << file_id << ", do not try again";
|
||||||
|
if (callback) {
|
||||||
|
callback->on_upload_error(file_id, Status::Error("Failed to reupload file"));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
create_actor<ForceUploadActor>("ForceUploadActor", this, file_id, std::move(callback), new_priority, upload_order,
|
||||||
|
context_->create_reference())
|
||||||
|
.release();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LOG(INFO) << "Resume upload of file " << file_id << " with priority " << new_priority << " and force = " << force;
|
||||||
|
|
||||||
if (force) {
|
if (force) {
|
||||||
node->remote_.is_full_alive = false;
|
node->remote_.is_full_alive = false;
|
||||||
}
|
}
|
||||||
|
@ -147,6 +147,8 @@ class FileNode {
|
|||||||
|
|
||||||
FileId main_file_id_;
|
FileId main_file_id_;
|
||||||
|
|
||||||
|
double last_successful_force_reupload_time_ = -1e10;
|
||||||
|
|
||||||
FileId upload_pause_;
|
FileId upload_pause_;
|
||||||
int8 upload_priority_ = 0;
|
int8 upload_priority_ = 0;
|
||||||
int8 download_priority_ = 0;
|
int8 download_priority_ = 0;
|
||||||
@ -513,6 +515,8 @@ class FileManager : public FileLoadManager::Callback {
|
|||||||
std::shared_ptr<UploadCallback> upload_callback_;
|
std::shared_ptr<UploadCallback> upload_callback_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ForceUploadActor;
|
||||||
|
|
||||||
ActorShared<> parent_;
|
ActorShared<> parent_;
|
||||||
unique_ptr<Context> context_;
|
unique_ptr<Context> context_;
|
||||||
std::shared_ptr<FileDbInterface> file_db_;
|
std::shared_ptr<FileDbInterface> file_db_;
|
||||||
@ -595,6 +599,8 @@ class FileManager : public FileLoadManager::Callback {
|
|||||||
|
|
||||||
FileNodePtr get_sync_file_node(FileId file_id);
|
FileNodePtr get_sync_file_node(FileId file_id);
|
||||||
|
|
||||||
|
void on_force_reupload_success(FileId file_id);
|
||||||
|
|
||||||
// void release_file_node(FileNodeId id);
|
// void release_file_node(FileNodeId id);
|
||||||
void do_cancel_download(FileNodePtr node);
|
void do_cancel_download(FileNodePtr node);
|
||||||
void do_cancel_upload(FileNodePtr node);
|
void do_cancel_upload(FileNodePtr node);
|
||||||
|
Reference in New Issue
Block a user