Enable DelayDispacher. Improve errors and logging.
GitOrigin-RevId: e8d648e14183fe4a9409555eff5c6e167b5bcca2
This commit is contained in:
parent
bc7599925e
commit
6e880f7ea0
@ -10,6 +10,7 @@
|
|||||||
#include "td/telegram/net/NetQueryDispatcher.h"
|
#include "td/telegram/net/NetQueryDispatcher.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
void DelayDispatcher::send_with_callback(NetQueryPtr query, ActorShared<NetQueryCallback> callback) {
|
void DelayDispatcher::send_with_callback(NetQueryPtr query, ActorShared<NetQueryCallback> callback) {
|
||||||
queue_.push({std::move(query), std::move(callback)});
|
queue_.push({std::move(query), std::move(callback)});
|
||||||
loop();
|
loop();
|
||||||
@ -29,7 +30,7 @@ void DelayDispatcher::loop() {
|
|||||||
queue_.pop();
|
queue_.pop();
|
||||||
G()->net_query_dispatcher().dispatch_with_callback(std::move(query.net_query), std::move(query.callback));
|
G()->net_query_dispatcher().dispatch_with_callback(std::move(query.net_query), std::move(query.callback));
|
||||||
|
|
||||||
wakeup_at_ = Timestamp::in(DELAY);
|
wakeup_at_ = Timestamp::in(delay_);
|
||||||
|
|
||||||
if (queue_.empty()) {
|
if (queue_.empty()) {
|
||||||
return;
|
return;
|
||||||
@ -37,4 +38,5 @@ void DelayDispatcher::loop() {
|
|||||||
|
|
||||||
set_timeout_at(wakeup_at_.at());
|
set_timeout_at(wakeup_at_.at());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -5,16 +5,22 @@
|
|||||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "td/telegram/net/NetQuery.h"
|
#include "td/telegram/net/NetQuery.h"
|
||||||
|
|
||||||
#include "td/actor/actor.h"
|
#include "td/actor/actor.h"
|
||||||
|
|
||||||
#include "td/utils/Time.h"
|
#include "td/utils/Time.h"
|
||||||
|
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
class DelayDispatcher : public Actor {
|
class DelayDispatcher : public Actor {
|
||||||
public:
|
public:
|
||||||
|
explicit DelayDispatcher(double delay) : delay_(delay) {
|
||||||
|
}
|
||||||
|
|
||||||
void send_with_callback(NetQueryPtr query, ActorShared<NetQueryCallback> callback);
|
void send_with_callback(NetQueryPtr query, ActorShared<NetQueryCallback> callback);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -24,8 +30,9 @@ class DelayDispatcher : public Actor {
|
|||||||
};
|
};
|
||||||
std::queue<Query> queue_;
|
std::queue<Query> queue_;
|
||||||
Timestamp wakeup_at_;
|
Timestamp wakeup_at_;
|
||||||
static constexpr double DELAY = 0.000;
|
double delay_;
|
||||||
|
|
||||||
void loop() override;
|
void loop() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -89,8 +89,8 @@ void FileLoader::start_up() {
|
|||||||
if (ordered_flag_) {
|
if (ordered_flag_) {
|
||||||
ordered_parts_ = OrderedEventsProcessor<std::pair<Part, NetQueryPtr>>(parts_manager_.get_ready_prefix_count());
|
ordered_parts_ = OrderedEventsProcessor<std::pair<Part, NetQueryPtr>>(parts_manager_.get_ready_prefix_count());
|
||||||
}
|
}
|
||||||
if (file_info.need_delay && false) {
|
if (file_info.need_delay) {
|
||||||
delay_dispatcher_ = create_actor<DelayDispatcher>("DelayDispatcher");
|
delay_dispatcher_ = create_actor<DelayDispatcher>("DelayDispatcher", 0.003);
|
||||||
}
|
}
|
||||||
resource_state_.set_unit_size(parts_manager_.get_part_size());
|
resource_state_.set_unit_size(parts_manager_.get_part_size());
|
||||||
update_estimated_limit();
|
update_estimated_limit();
|
||||||
@ -131,7 +131,8 @@ Status FileLoader::do_loop() {
|
|||||||
if (parts_manager_.ready()) {
|
if (parts_manager_.ready()) {
|
||||||
TRY_STATUS(parts_manager_.finish());
|
TRY_STATUS(parts_manager_.finish());
|
||||||
TRY_STATUS(on_ok(parts_manager_.get_size()));
|
TRY_STATUS(on_ok(parts_manager_.get_size()));
|
||||||
LOG(INFO) << "Bad download order rate: " << (100.0 * debug_bad_part_order_ / debug_total_parts_) << "% "
|
LOG(INFO) << "Bad download order rate: "
|
||||||
|
<< (debug_total_parts_ == 0 ? 0.0 : 100.0 * debug_bad_part_order_ / debug_total_parts_) << "% "
|
||||||
<< debug_bad_part_order_ << "/" << debug_total_parts_;
|
<< debug_bad_part_order_ << "/" << debug_total_parts_;
|
||||||
stop_flag_ = true;
|
stop_flag_ = true;
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
|
@ -544,18 +544,21 @@ Status FileManager::check_local_location(FullLocalFileLocation &location, int64
|
|||||||
size = stat.size_;
|
size = stat.size_;
|
||||||
}
|
}
|
||||||
if (location.mtime_nsec_ == 0) {
|
if (location.mtime_nsec_ == 0) {
|
||||||
LOG(INFO) << "Set file modification time to " << stat.mtime_nsec_;
|
LOG(INFO) << "Set file \"" << location.path_ << "\" modification time to " << stat.mtime_nsec_;
|
||||||
location.mtime_nsec_ = stat.mtime_nsec_;
|
location.mtime_nsec_ = stat.mtime_nsec_;
|
||||||
} else if (location.mtime_nsec_ != stat.mtime_nsec_) {
|
} else if (location.mtime_nsec_ != stat.mtime_nsec_) {
|
||||||
LOG(INFO) << "File was nodified: old mtime = " << location.mtime_nsec_ << ", new mtime = " << stat.mtime_nsec_;
|
LOG(INFO) << "File \"" << location.path_ << "\" was nodified: old mtime = " << location.mtime_nsec_
|
||||||
return Status::Error("File was modified");
|
<< ", new mtime = " << stat.mtime_nsec_;
|
||||||
|
return Status::Error(PSLICE() << "File \"" << location.path_ << "\" was modified");
|
||||||
}
|
}
|
||||||
if ((location.file_type_ == FileType::Thumbnail || location.file_type_ == FileType::EncryptedThumbnail) &&
|
if ((location.file_type_ == FileType::Thumbnail || location.file_type_ == FileType::EncryptedThumbnail) &&
|
||||||
size >= MAX_THUMBNAIL_SIZE) {
|
size >= MAX_THUMBNAIL_SIZE) {
|
||||||
return Status::Error(PSLICE() << "File is too big for thumbnail " << tag("size", format::as_size(size)));
|
return Status::Error(PSLICE() << "File \"" << location.path_ << "\" is too big for thumbnail "
|
||||||
|
<< tag("size", format::as_size(size)));
|
||||||
}
|
}
|
||||||
if (size >= MAX_FILE_SIZE) {
|
if (size >= MAX_FILE_SIZE) {
|
||||||
return Status::Error(PSLICE() << "File is too big " << tag("size", format::as_size(size)));
|
return Status::Error(PSLICE() << "File \"" << location.path_ << "\" is too big "
|
||||||
|
<< tag("size", format::as_size(size)));
|
||||||
}
|
}
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
@ -563,6 +566,9 @@ Status FileManager::check_local_location(FullLocalFileLocation &location, int64
|
|||||||
static Status check_partial_local_location(const PartialLocalFileLocation &location) {
|
static Status check_partial_local_location(const PartialLocalFileLocation &location) {
|
||||||
TRY_RESULT(stat, stat(location.path_));
|
TRY_RESULT(stat, stat(location.path_));
|
||||||
if (!stat.is_reg_) {
|
if (!stat.is_reg_) {
|
||||||
|
if (stat.is_dir_) {
|
||||||
|
return Status::Error(PSLICE() << "Can't use directory \"" << location.path_ << "\" as a file path");
|
||||||
|
}
|
||||||
return Status::Error("File must be a regular file");
|
return Status::Error("File must be a regular file");
|
||||||
}
|
}
|
||||||
// can't check mtime. Hope nobody will mess with this file in our temporary dir.
|
// can't check mtime. Hope nobody will mess with this file in our temporary dir.
|
||||||
@ -1262,6 +1268,8 @@ void FileManager::load_from_pmc(FileNodePtr node, bool new_remote, bool new_loca
|
|||||||
generate = file_view.generate_location();
|
generate = file_view.generate_location();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG(INFO) << "Load from pmc " << file_id << "/" << file_view.file_id() << ", new_remote = " << new_remote
|
||||||
|
<< ", 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::FromDb, "load_from_pmc", false));
|
||||||
@ -1270,13 +1278,13 @@ void FileManager::load_from_pmc(FileNodePtr node, bool new_remote, bool new_loca
|
|||||||
return Status::OK();
|
return Status::OK();
|
||||||
};
|
};
|
||||||
if (new_remote) {
|
if (new_remote) {
|
||||||
load(remote);
|
LOG_STATUS(load(remote));
|
||||||
}
|
}
|
||||||
if (new_local) {
|
if (new_local) {
|
||||||
load(local);
|
LOG_STATUS(load(local));
|
||||||
}
|
}
|
||||||
if (new_generate) {
|
if (new_generate) {
|
||||||
load(generate);
|
LOG_STATUS(load(generate));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user