}
auto iter = cache_map.find(name);
- if (iter == cache_map.end()) {
+ if (iter == cache_map.end() ||
+ (expiry.count() &&
+ (ceph::coarse_mono_clock::now() - iter->second.info.time_added) > expiry)) {
ldout(cct, 10) << "cache get: name=" << name << " : miss" << dendl;
- if(perfcounter) perfcounter->inc(l_rgw_cache_miss);
+ if (perfcounter)
+ perfcounter->inc(l_rgw_cache_miss);
return -ENOENT;
}
WRITE_CLASS_ENCODER(ObjectMetaInfo)
struct ObjectCacheInfo {
- int status;
- uint32_t flags;
- uint64_t epoch;
+ int status = 0;
+ uint32_t flags = 0;
+ uint64_t epoch = 0;
bufferlist data;
map<string, bufferlist> xattrs;
map<string, bufferlist> rm_xattrs;
ObjectMetaInfo meta;
- obj_version version;
+ obj_version version = {};
+ ceph::coarse_mono_time time_added = ceph::coarse_mono_clock::now();
- ObjectCacheInfo() : status(0), flags(0), epoch(0), version() {}
+ ObjectCacheInfo() = default;
void encode(bufferlist& bl) const {
ENCODE_START(5, 3, bl);
vector<RGWChainedCache *> chained_cache;
bool enabled;
+ ceph::timespan expiry;
void touch_lru(string& name, ObjectCacheEntry& entry,
std::deque<string>::iterator& lru_iter);
void set_ctx(CephContext *_cct) {
cct = _cct;
lru_window = cct->_conf->rgw_cache_lru_size / 2;
+ expiry = std::chrono::seconds(cct->_conf->get_val<uint64_t>(
+ "rgw_cache_expiry_interval"));
}
bool chain_cache_entry(std::initializer_list<rgw_cache_entry_info*> cache_info_entries,
RGWChainedCache::Entry *chained_entry);