Add FileGenerateManager::QueryId.
This commit is contained in:
parent
755d9e6689
commit
72019eab50
@ -28,6 +28,7 @@ namespace td {
|
||||
class FileDownloadManager final : public Actor {
|
||||
public:
|
||||
using QueryId = uint64;
|
||||
|
||||
class Callback {
|
||||
public:
|
||||
virtual ~Callback();
|
||||
|
@ -265,7 +265,7 @@ class WebFileDownloadGenerateActor final : public FileGenerateActor {
|
||||
|
||||
class FileExternalGenerateActor final : public FileGenerateActor {
|
||||
public:
|
||||
FileExternalGenerateActor(uint64 query_id, const FullGenerateFileLocation &generate_location,
|
||||
FileExternalGenerateActor(FileGenerateManager::QueryId query_id, const FullGenerateFileLocation &generate_location,
|
||||
const LocalFileLocation &local_location, string name,
|
||||
unique_ptr<FileGenerateCallback> callback, ActorShared<> parent)
|
||||
: query_id_(query_id)
|
||||
@ -294,7 +294,7 @@ class FileExternalGenerateActor final : public FileGenerateActor {
|
||||
}
|
||||
|
||||
private:
|
||||
uint64 query_id_;
|
||||
FileGenerateManager::QueryId query_id_;
|
||||
FullGenerateFileLocation generate_location_;
|
||||
LocalFileLocation local_;
|
||||
string name_;
|
||||
@ -422,7 +422,7 @@ static Status check_mtime(std::string &conversion, CSlice original_path) {
|
||||
<< tag("actual modification time", actual_mtime));
|
||||
}
|
||||
|
||||
void FileGenerateManager::generate_file(uint64 query_id, FullGenerateFileLocation generate_location,
|
||||
void FileGenerateManager::generate_file(QueryId query_id, FullGenerateFileLocation generate_location,
|
||||
const LocalFileLocation &local_location, string name,
|
||||
unique_ptr<FileGenerateCallback> callback) {
|
||||
LOG(INFO) << "Begin to generate file with " << generate_location;
|
||||
@ -455,7 +455,7 @@ void FileGenerateManager::generate_file(uint64 query_id, FullGenerateFileLocatio
|
||||
}
|
||||
}
|
||||
|
||||
void FileGenerateManager::cancel(uint64 query_id) {
|
||||
void FileGenerateManager::cancel(QueryId query_id) {
|
||||
auto it = query_id_to_query_.find(query_id);
|
||||
if (it == query_id_to_query_.end()) {
|
||||
return;
|
||||
@ -463,7 +463,7 @@ void FileGenerateManager::cancel(uint64 query_id) {
|
||||
it->second.worker_.reset();
|
||||
}
|
||||
|
||||
void FileGenerateManager::external_file_generate_write_part(uint64 query_id, int64 offset, string data,
|
||||
void FileGenerateManager::external_file_generate_write_part(QueryId query_id, int64 offset, string data,
|
||||
Promise<> promise) {
|
||||
auto it = query_id_to_query_.find(query_id);
|
||||
if (it == query_id_to_query_.end()) {
|
||||
@ -474,8 +474,8 @@ void FileGenerateManager::external_file_generate_write_part(uint64 query_id, int
|
||||
std::move(safe_promise));
|
||||
}
|
||||
|
||||
void FileGenerateManager::external_file_generate_progress(uint64 query_id, int64 expected_size, int64 local_prefix_size,
|
||||
Promise<> promise) {
|
||||
void FileGenerateManager::external_file_generate_progress(QueryId query_id, int64 expected_size,
|
||||
int64 local_prefix_size, Promise<> promise) {
|
||||
auto it = query_id_to_query_.find(query_id);
|
||||
if (it == query_id_to_query_.end()) {
|
||||
return promise.set_error(Status::Error(400, "Unknown generation_id"));
|
||||
@ -485,7 +485,7 @@ void FileGenerateManager::external_file_generate_progress(uint64 query_id, int64
|
||||
std::move(safe_promise));
|
||||
}
|
||||
|
||||
void FileGenerateManager::external_file_generate_finish(uint64 query_id, Status status, Promise<> promise) {
|
||||
void FileGenerateManager::external_file_generate_finish(QueryId query_id, Status status, Promise<> promise) {
|
||||
auto it = query_id_to_query_.find(query_id);
|
||||
if (it == query_id_to_query_.end()) {
|
||||
return promise.set_error(Status::Error(400, "Unknown generation_id"));
|
||||
@ -495,7 +495,7 @@ void FileGenerateManager::external_file_generate_finish(uint64 query_id, Status
|
||||
std::move(safe_promise));
|
||||
}
|
||||
|
||||
void FileGenerateManager::do_cancel(uint64 query_id) {
|
||||
void FileGenerateManager::do_cancel(QueryId query_id) {
|
||||
query_id_to_query_.erase(query_id);
|
||||
}
|
||||
|
||||
|
@ -34,18 +34,20 @@ class FileGenerateCallback {
|
||||
|
||||
class FileGenerateManager final : public Actor {
|
||||
public:
|
||||
using QueryId = uint64;
|
||||
|
||||
explicit FileGenerateManager(ActorShared<> parent) : parent_(std::move(parent)) {
|
||||
}
|
||||
|
||||
void generate_file(uint64 query_id, FullGenerateFileLocation generate_location,
|
||||
void generate_file(QueryId query_id, FullGenerateFileLocation generate_location,
|
||||
const LocalFileLocation &local_location, string name, unique_ptr<FileGenerateCallback> callback);
|
||||
void cancel(uint64 query_id);
|
||||
void cancel(QueryId query_id);
|
||||
|
||||
// external updates about file generation state
|
||||
void external_file_generate_write_part(uint64 query_id, int64 offset, string data, Promise<> promise);
|
||||
void external_file_generate_progress(uint64 query_id, int64 expected_size, int64 local_prefix_size,
|
||||
void external_file_generate_write_part(QueryId query_id, int64 offset, string data, Promise<> promise);
|
||||
void external_file_generate_progress(QueryId query_id, int64 expected_size, int64 local_prefix_size,
|
||||
Promise<> promise);
|
||||
void external_file_generate_finish(uint64 query_id, Status status, Promise<> promise);
|
||||
void external_file_generate_finish(QueryId query_id, Status status, Promise<> promise);
|
||||
|
||||
private:
|
||||
struct Query {
|
||||
@ -60,13 +62,13 @@ class FileGenerateManager final : public Actor {
|
||||
};
|
||||
|
||||
ActorShared<> parent_;
|
||||
std::map<uint64, Query> query_id_to_query_;
|
||||
std::map<QueryId, Query> query_id_to_query_;
|
||||
bool close_flag_ = false;
|
||||
|
||||
void hangup() final;
|
||||
void hangup_shared() final;
|
||||
void loop() final;
|
||||
void do_cancel(uint64 query_id);
|
||||
void do_cancel(QueryId query_id);
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
|
@ -2925,18 +2925,19 @@ void FileManager::delete_file_reference(FileId file_id, Slice file_reference) {
|
||||
|
||||
void FileManager::external_file_generate_write_part(int64 generation_id, int64 offset, string data, Promise<> promise) {
|
||||
send_closure(file_generate_manager_, &FileGenerateManager::external_file_generate_write_part,
|
||||
static_cast<uint64>(generation_id), offset, std::move(data), std::move(promise));
|
||||
static_cast<FileGenerateManager::QueryId>(generation_id), offset, std::move(data), std::move(promise));
|
||||
}
|
||||
|
||||
void FileManager::external_file_generate_progress(int64 generation_id, int64 expected_size, int64 local_prefix_size,
|
||||
Promise<> promise) {
|
||||
send_closure(file_generate_manager_, &FileGenerateManager::external_file_generate_progress,
|
||||
static_cast<uint64>(generation_id), expected_size, local_prefix_size, std::move(promise));
|
||||
static_cast<FileGenerateManager::QueryId>(generation_id), expected_size, local_prefix_size,
|
||||
std::move(promise));
|
||||
}
|
||||
|
||||
void FileManager::external_file_generate_finish(int64 generation_id, Status status, Promise<> promise) {
|
||||
send_closure(file_generate_manager_, &FileGenerateManager::external_file_generate_finish,
|
||||
static_cast<uint64>(generation_id), std::move(status), std::move(promise));
|
||||
static_cast<FileGenerateManager::QueryId>(generation_id), std::move(status), std::move(promise));
|
||||
}
|
||||
|
||||
void FileManager::run_generate(FileNodePtr node) {
|
||||
@ -2993,7 +2994,7 @@ void FileManager::run_generate(FileNodePtr node) {
|
||||
return;
|
||||
}
|
||||
|
||||
FileDownloadManager::QueryId query_id = queries_container_.create(Query{file_id, Query::Type::Generate});
|
||||
FileGenerateManager::QueryId query_id = queries_container_.create(Query{file_id, Query::Type::Generate});
|
||||
node->generate_id_ = query_id;
|
||||
send_closure(file_generate_manager_, &FileGenerateManager::generate_file, query_id, *node->generate_, node->local_,
|
||||
node->suggested_path(), [file_manager = this, query_id] {
|
||||
@ -3002,7 +3003,7 @@ void FileManager::run_generate(FileNodePtr node) {
|
||||
uint64 query_id_;
|
||||
|
||||
public:
|
||||
Callback(ActorId<FileManager> actor, FileDownloadManager::QueryId query_id)
|
||||
Callback(ActorId<FileManager> actor, FileGenerateManager::QueryId query_id)
|
||||
: actor_(std::move(actor)), query_id_(query_id) {
|
||||
}
|
||||
void on_partial_generate(PartialLocalFileLocation partial_local, int64 expected_size) final {
|
||||
@ -3013,7 +3014,7 @@ void FileManager::run_generate(FileNodePtr node) {
|
||||
send_closure(actor_, &FileManager::on_generate_ok, query_id_, std::move(local));
|
||||
}
|
||||
void on_error(Status error) final {
|
||||
send_closure(actor_, &FileManager::on_download_error, query_id_, std::move(error));
|
||||
send_closure(actor_, &FileManager::on_generate_error, query_id_, std::move(error));
|
||||
}
|
||||
};
|
||||
return make_unique<Callback>(file_manager->actor_id(file_manager), query_id);
|
||||
@ -3963,7 +3964,7 @@ void FileManager::on_upload_full_ok(FileUploadManager::QueryId query_id, FullRem
|
||||
LOG_STATUS(merge(new_file_id, file_id));
|
||||
}
|
||||
|
||||
void FileManager::on_partial_generate(FileDownloadManager::QueryId query_id, PartialLocalFileLocation partial_local,
|
||||
void FileManager::on_partial_generate(FileGenerateManager::QueryId query_id, PartialLocalFileLocation partial_local,
|
||||
int64 expected_size) {
|
||||
if (is_closed_) {
|
||||
return;
|
||||
@ -4000,7 +4001,7 @@ void FileManager::on_partial_generate(FileDownloadManager::QueryId query_id, Par
|
||||
try_flush_node(file_node, "on_partial_generate");
|
||||
}
|
||||
|
||||
void FileManager::on_generate_ok(FileDownloadManager::QueryId query_id, FullLocalFileLocation local) {
|
||||
void FileManager::on_generate_ok(FileGenerateManager::QueryId query_id, FullLocalFileLocation local) {
|
||||
if (is_closed_) {
|
||||
return;
|
||||
}
|
||||
@ -4060,6 +4061,22 @@ void FileManager::on_download_error(FileDownloadManager::QueryId query_id, Statu
|
||||
on_error_impl(node, query.type_, was_active, std::move(status));
|
||||
}
|
||||
|
||||
void FileManager::on_generate_error(FileGenerateManager::QueryId query_id, Status status) {
|
||||
if (is_closed_) {
|
||||
return;
|
||||
}
|
||||
|
||||
Query query;
|
||||
bool was_active;
|
||||
std::tie(query, was_active) = finish_query(static_cast<Container<Query>::Id>(query_id));
|
||||
auto node = get_file_node(query.file_id_);
|
||||
if (!node) {
|
||||
LOG(ERROR) << "Can't find file node for " << query.file_id_ << " " << status;
|
||||
return;
|
||||
}
|
||||
on_error_impl(node, query.type_, was_active, std::move(status));
|
||||
}
|
||||
|
||||
void FileManager::on_upload_error(FileUploadManager::QueryId query_id, Status status) {
|
||||
if (is_closed_) {
|
||||
return;
|
||||
|
@ -147,7 +147,7 @@ class FileNode {
|
||||
FileDownloadManager::QueryId download_id_ = 0;
|
||||
|
||||
unique_ptr<FullGenerateFileLocation> generate_;
|
||||
FileDownloadManager::QueryId generate_id_ = 0;
|
||||
FileGenerateManager::QueryId generate_id_ = 0;
|
||||
|
||||
int64 size_ = 0;
|
||||
int64 expected_size_ = 0;
|
||||
@ -786,8 +786,9 @@ class FileManager final : public Actor {
|
||||
|
||||
void on_error_impl(FileNodePtr node, Query::Type type, bool was_active, Status status);
|
||||
|
||||
void on_partial_generate(FileDownloadManager::QueryId, PartialLocalFileLocation partial_local, int64 expected_size);
|
||||
void on_generate_ok(FileDownloadManager::QueryId, FullLocalFileLocation local);
|
||||
void on_partial_generate(FileGenerateManager::QueryId, PartialLocalFileLocation partial_local, int64 expected_size);
|
||||
void on_generate_ok(FileGenerateManager::QueryId, FullLocalFileLocation local);
|
||||
void on_generate_error(FileGenerateManager::QueryId query_id, Status status);
|
||||
|
||||
std::pair<Query, bool> finish_query(Container<Query>::Id query_id);
|
||||
|
||||
|
@ -26,6 +26,7 @@ namespace td {
|
||||
class FileUploadManager final : public Actor {
|
||||
public:
|
||||
using QueryId = uint64;
|
||||
|
||||
class Callback {
|
||||
public:
|
||||
virtual ~Callback();
|
||||
|
Loading…
x
Reference in New Issue
Block a user