The heap in cache_pqueue is a max head, it always keep the object
with the highest priority in its root position. The object with the highest
priority is the one that is ejected when a new element has to be
inserted when the cache is full (max nb of entities or size reached).
 
The return value of the set priority functions in mod_mem_cache.c:
memcache_lru_algorithm(), 
memcache_gdsf_algorithm()
and the get_priority() function 
have to be consistent to make sure the heap is bubbling and percolating correctly.
 
Right now set_pri() return a negative value and get_pri() a positive value.
Because mem_cache increments the priority field based on the number of request
and the relative time an entity is inserted in the cache, both should return a negative value,
to use correctly the max heap.
 
The attached patch is a way to fix that problem, not sure if it is the best. The max heap
could also be turned into a min heap, but it is probably easier to fix mem_cache. 
 
thanks,
 
Jean-Jacques 
 

Attachment: cache_prio.patch
Description: Binary data

Reply via email to