{
MutexLock l(&mutex_);
capacity_ = capacity;
- high_pri_pool_capacity_ = capacity_ * high_pri_pool_ratio_;
+ ResetHighPriPoolCapacity();
EvictFromLRU(0, &last_reference_list);
}
// we free the entries here outside of mutex for
void LRUCacheShard::SetHighPriPoolRatio(double high_pri_pool_ratio) {
MutexLock l(&mutex_);
high_pri_pool_ratio_ = high_pri_pool_ratio;
- high_pri_pool_capacity_ = capacity_ * high_pri_pool_ratio_;
+ ResetHighPriPoolCapacity();
MaintainPoolSize();
}
+void LRUCacheShard::ResetHighPriPoolCapacity() {
+ high_pri_pool_capacity_ =
+ static_cast<size_t>(capacity_ * high_pri_pool_ratio_);
+}
+
bool LRUCacheShard::Release(Cache::Handle* handle, bool force_erase) {
if (handle == nullptr) {
return false;
// holding the mutex_
void EvictFromLRU(size_t charge, autovector<LRUHandle*>* deleted);
+ // Reset the high-pri pool capacity based on the capacity and ratio.
+ void ResetHighPriPoolCapacity();
+
// Initialized before use.
size_t capacity_;
// High-pri pool size, equals to capacity * high_pri_pool_ratio.
// Remember the value to avoid recomputing each time.
- double high_pri_pool_capacity_;
+ size_t high_pri_pool_capacity_;
// Dummy head of LRU list.
// lru.prev is newest entry, lru.next is oldest entry.