Source code for gptcache.manager.eviction_manager

[docs]class EvictionManager: """ EvictionManager to manager the eviction policy. :param scalar_storage: CacheStorage to manager the scalar data. :type scalar_storage: :class:`CacheStorage` :param vector_base: VectorBase to manager the vector data. :type vector_base: :class:`VectorBase` """ MAX_MARK_COUNT = 5000 MAX_MARK_RATE = 0.1 BATCH_SIZE = 100000 REBUILD_CONDITION = 5 def __init__(self, scalar_storage, vector_base): self._scalar_storage = scalar_storage self._vector_base = vector_base self.delete_count = 0
[docs] def check_evict(self): mark_count = self._scalar_storage.count(state=-1) all_count = self._scalar_storage.count(is_all=True) if ( mark_count > self.MAX_MARK_COUNT or mark_count / all_count > self.MAX_MARK_RATE ): return True return False
[docs] def delete(self): mark_ids = self._scalar_storage.get_ids(deleted=True) self._scalar_storage.clear_deleted_data() self._vector_base.delete(mark_ids) self.delete_count += 1 if self.delete_count >= self.REBUILD_CONDITION: self.rebuild()
[docs] def rebuild(self): self._scalar_storage.clear_deleted_data() ids = self._scalar_storage.get_ids(deleted=False) self._vector_base.rebuild(ids) self.delete_count = 0
[docs] def soft_evict(self, marked_keys): self._scalar_storage.mark_deleted(marked_keys)