fixes
This commit is contained in:
@@ -36,7 +36,9 @@ auto eviction::check_minimum_requirements(const std::string &file_path)
|
||||
-> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
auto opt_size = utils::file::file{file_path}.size();
|
||||
auto check_file = utils::file::file{file_path};
|
||||
|
||||
auto opt_size = check_file.size();
|
||||
if (not opt_size.has_value()) {
|
||||
utils::error::raise_error(function_name, utils::get_last_error_code(),
|
||||
file_path, "failed to get file size");
|
||||
@@ -45,20 +47,34 @@ auto eviction::check_minimum_requirements(const std::string &file_path)
|
||||
|
||||
auto file_size{opt_size.value()};
|
||||
if (file_size == 0U) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
file_path, "no file size");
|
||||
return false;
|
||||
}
|
||||
|
||||
auto reference_time = utils::file::file{file_path}.get_time(
|
||||
config_.get_eviction_uses_accessed_time()
|
||||
? utils::file::time_type::accessed
|
||||
: utils::file::time_type::modified);
|
||||
auto reference_time =
|
||||
check_file.get_time(config_.get_eviction_uses_accessed_time()
|
||||
? utils::file::time_type::accessed
|
||||
: utils::file::time_type::modified);
|
||||
|
||||
if (not reference_time.has_value()) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
file_path, "no reference_time");
|
||||
return false;
|
||||
}
|
||||
|
||||
event_system::instance().raise<debug_log>(
|
||||
std::string{function_name}, file_path,
|
||||
std::to_string(reference_time.value()));
|
||||
|
||||
auto delay = (config_.get_eviction_delay_mins() * 60UL) *
|
||||
utils::time::NANOS_PER_SECOND;
|
||||
|
||||
event_system::instance().raise<debug_log>(
|
||||
std::string{function_name}, file_path,
|
||||
std::to_string(reference_time.value() +
|
||||
static_cast<std::uint64_t>(delay)));
|
||||
|
||||
return ((reference_time.value() + static_cast<std::uint64_t>(delay)) <=
|
||||
utils::time::get_time_now());
|
||||
}
|
||||
@@ -92,18 +108,29 @@ void eviction::service_function() {
|
||||
while (not get_stop_requested() && should_evict &&
|
||||
not cached_files_list.empty()) {
|
||||
try {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
cached_files_list.front(),
|
||||
"analyzing0");
|
||||
std::string api_path;
|
||||
if (provider_.get_api_path_from_source(
|
||||
cached_files_list.front(), api_path) == api_error::success) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
api_path, "analyzing1");
|
||||
api_file file{};
|
||||
filesystem_item fsi{};
|
||||
if (provider_.get_filesystem_item_and_file(api_path, file, fsi) ==
|
||||
api_error::success) {
|
||||
event_system::instance().raise<debug_log>(
|
||||
std::string{function_name}, api_path, "analyzing2");
|
||||
// Only evict files that match expected size
|
||||
auto opt_size = utils::file::file{cached_files_list.front()}.size();
|
||||
if (opt_size.has_value()) {
|
||||
event_system::instance().raise<debug_log>(
|
||||
std::string{function_name}, api_path, "analyzing3");
|
||||
auto file_size{opt_size.value()};
|
||||
if (file_size == fsi.size) {
|
||||
event_system::instance().raise<debug_log>(
|
||||
std::string{function_name}, api_path, "analyzing4");
|
||||
// Try to evict file
|
||||
if (fm_.evict_file(fsi.api_path) &&
|
||||
config_.get_enable_max_cache_size()) {
|
||||
|
@@ -191,35 +191,43 @@ auto file_manager::evict_file(const std::string &api_path) -> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
if (provider_.is_read_only()) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
api_path, "read only");
|
||||
return false;
|
||||
}
|
||||
|
||||
recur_mutex_lock open_lock(open_file_mtx_);
|
||||
if (is_processing(api_path)) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
api_path, "processing");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (get_open_file_count(api_path) != 0U) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
api_path, "open count");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string pinned;
|
||||
auto res = provider_.get_item_meta(api_path, META_PINNED, pinned);
|
||||
if (res != api_error::success && res != api_error::item_not_found) {
|
||||
utils::error::raise_api_path_error(function_name, api_path, res,
|
||||
"failed to get pinned status");
|
||||
utils::error::raise_api_path_error(std::string{function_name}, api_path,
|
||||
res, "failed to get pinned status");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (not pinned.empty() && utils::string::to_bool(pinned)) {
|
||||
event_system::instance().raise<debug_log>(std::string{function_name},
|
||||
api_path, "pinned");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string source_path{};
|
||||
res = provider_.get_item_meta(api_path, META_SOURCE, source_path);
|
||||
if (res != api_error::success) {
|
||||
utils::error::raise_api_path_error(function_name, api_path, res,
|
||||
"failed to get source path");
|
||||
utils::error::raise_api_path_error(std::string{function_name}, api_path,
|
||||
res, "failed to get source path");
|
||||
return false;
|
||||
}
|
||||
if (source_path.empty()) {
|
||||
|
@@ -38,7 +38,7 @@ auto get_directory_files(std::string_view path, bool oldest_first,
|
||||
#if defined(_WIN32)
|
||||
WIN32_FIND_DATA fd{};
|
||||
auto search = utils::path::combine(abs_path, {"*.*"});
|
||||
auto find = ::FindFirstFile(search.c_str(), &fd);
|
||||
auto find = ::FindFirstFileA(search.c_str(), &fd);
|
||||
if (find != INVALID_HANDLE_VALUE) {
|
||||
try {
|
||||
do {
|
||||
@@ -49,15 +49,15 @@ auto get_directory_files(std::string_view path, bool oldest_first,
|
||||
auto sub_files =
|
||||
get_directory_files(full_path, oldest_first, recursive);
|
||||
ret.insert(ret.end(), sub_files.begin(), sub_files.end());
|
||||
} else {
|
||||
ULARGE_INTEGER li{};
|
||||
li.HighPart = fd.ftLastWriteTime.dwHighDateTime;
|
||||
li.LowPart = fd.ftLastWriteTime.dwLowDateTime;
|
||||
lookup[full_path] = li.QuadPart;
|
||||
ret.emplace_back(full_path);
|
||||
}
|
||||
} else {
|
||||
ULARGE_INTEGER li{};
|
||||
li.HighPart = fd.ftLastWriteTime.dwHighDateTime;
|
||||
li.LowPart = fd.ftLastWriteTime.dwLowDateTime;
|
||||
lookup[full_path] = li.QuadPart;
|
||||
ret.emplace_back(full_path);
|
||||
}
|
||||
} while (::FindNextFile(find, &fd) != 0);
|
||||
} while (::FindNextFileA(find, &fd) != 0);
|
||||
} catch (const std::exception &e) {
|
||||
utils::error::raise_error(function_name, e,
|
||||
"failed to get directory files");
|
||||
|
Reference in New Issue
Block a user