Commit c4e91d45 by Vicent Marti

Random eviction

parent 6b90e244
...@@ -32,7 +32,6 @@ size_t git_cache__max_object_size = 4096; ...@@ -32,7 +32,6 @@ size_t git_cache__max_object_size = 4096;
int git_cache_init(git_cache *cache) int git_cache_init(git_cache *cache)
{ {
cache->lru_count = 0;
cache->map = git_oidmap_alloc(); cache->map = git_oidmap_alloc();
git_mutex_init(&cache->lock); git_mutex_init(&cache->lock);
return 0; return 0;
...@@ -44,6 +43,24 @@ void git_cache_free(git_cache *cache) ...@@ -44,6 +43,24 @@ void git_cache_free(git_cache *cache)
git_mutex_free(&cache->lock); git_mutex_free(&cache->lock);
} }
static void cache_evict_entries(git_cache *cache, size_t evict)
{
uint32_t seed = rand();
/* do not infinite loop if there's not enough entries to evict */
if (evict > kh_size(cache->map))
return;
while (evict > 0) {
khiter_t pos = seed++ % kh_end(cache->map);
if (kh_exist(cache->map, pos)) {
kh_del(oid, cache->map, pos);
evict--;
}
}
}
static bool cache_should_store(git_otype object_type, size_t object_size) static bool cache_should_store(git_otype object_type, size_t object_size)
{ {
if (!git_cache__store_types[object_type]) if (!git_cache__store_types[object_type])
......
...@@ -23,14 +23,13 @@ enum { ...@@ -23,14 +23,13 @@ enum {
typedef struct { typedef struct {
git_oid oid; git_oid oid;
git_atomic refcount; git_atomic refcount;
uint16_t flags; uint32_t cache_size;
uint16_t lru; uint32_t flags;
} git_cached_obj; } git_cached_obj;
typedef struct { typedef struct {
git_oidmap *map; git_oidmap *map;
git_mutex lock; git_mutex lock;
unsigned int lru_count;
} git_cache; } git_cache;
int git_cache_init(git_cache *cache); int git_cache_init(git_cache *cache);
......
...@@ -98,6 +98,7 @@ int git_object__from_odb_object( ...@@ -98,6 +98,7 @@ int git_object__from_odb_object(
/* Initialize parent object */ /* Initialize parent object */
git_oid_cpy(&object->cached.oid, &odb_obj->cached.oid); git_oid_cpy(&object->cached.oid, &odb_obj->cached.oid);
object->cached.cache_size = (uint32_t)odb_obj->raw.len;
object->repo = repo; object->repo = repo;
switch (type) { switch (type) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment