int64_t
FileRecompressor::recompress(const std::string& cache_file,
- const std::optional<int8_t> level)
+ std::optional<int8_t> level,
+ KeepAtime keep_atime)
{
core::CacheEntry::Header header(cache_file);
}
// Restore mtime/atime to keep cache LRU cleanup working as expected:
- util::set_timestamps(cache_file, old_stat.mtime(), old_stat.atime());
+ if (keep_atime == KeepAtime::yes || new_stat) {
+ util::set_timestamps(cache_file, old_stat.mtime(), old_stat.atime());
+ }
m_content_size += header.entry_size;
m_old_size += old_stat.size_on_disk();
class FileRecompressor
{
public:
+ enum class KeepAtime { yes, no };
+
FileRecompressor() = default;
// Returns on-disk size change in KiB.
int64_t recompress(const std::string& cache_file,
- const std::optional<int8_t> level);
+ const std::optional<int8_t> level,
+ KeepAtime keep_atime);
uint64_t content_size() const;
uint64_t old_size() const;
for (const auto& file : files) {
thread_pool.enqueue([&] {
try {
- recompressor.recompress(file.path, *recompress_level);
+ recompressor.recompress(file.path,
+ *recompress_level,
+ core::FileRecompressor::KeepAtime::yes);
} catch (core::Error&) {
// Ignore for now.
incompressible_size += file.stat.size_on_disk();
thread_pool.enqueue(
[&recompressor, &incompressible_size, level, stats_file, file] {
try {
- int64_t size_change_kibibyte =
- recompressor.recompress(file.path(), level);
+ int64_t size_change_kibibyte = recompressor.recompress(
+ file.path(), level, core::FileRecompressor::KeepAtime::no);
StatsFile(stats_file).update([=](auto& cs) {
cs.increment(core::Statistic::cache_size_kibibyte,
size_change_kibibyte);