[Sheepdog] [PATCH v5 8/8] object cache: implement vdi delete operation
Liu Yuan
namei.unix at gmail.com
Sat Mar 24 09:47:18 CET 2012
From: Liu Yuan <tailai.ly at taobao.com>
Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
sheep/object_cache.c | 29 +++++++++++++++++++++++++++++
sheep/ops.c | 2 ++
sheep/sheep_priv.h | 1 +
3 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/sheep/object_cache.c b/sheep/object_cache.c
index 847635a..f45d852 100644
--- a/sheep/object_cache.c
+++ b/sheep/object_cache.c
@@ -461,6 +461,35 @@ int object_is_cached(uint64_t oid)
return 1; /* found it */
}
+void object_cache_delete(uint32_t vid)
+{
+ struct object_cache *cache;
+
+ cache = find_object_cache(vid);
+ if (cache) {
+ int h = hash(vid);
+ struct object_cache_entry *entry, *t;
+ struct strbuf buf = STRBUF_INIT;
+
+ /* Firstly we free memeory */
+ pthread_mutex_lock(&hashtable_lock[h]);
+ hlist_del(&cache->hash);
+ pthread_mutex_unlock(&hashtable_lock[h]);
+
+ list_for_each_entry_safe(entry, t, &cache->dirty_list, list) {
+ free(entry);
+ }
+ free(cache);
+
+ /* Then we free disk */
+ strbuf_addf(&buf, "%s/%06"PRIx32, cache_dir, vid);
+ rmdir_r(buf.buf);
+
+ strbuf_release(&buf);
+ }
+
+}
+
int object_cache_init(const char *p)
{
int ret = 0;
diff --git a/sheep/ops.c b/sheep/ops.c
index 3edd932..6da9457 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -93,6 +93,8 @@ static int cluster_del_vdi(const struct sd_req *req, struct sd_rsp *rsp,
ret = del_vdi(hdr->epoch, data, hdr->data_length, &vid,
hdr->snapid, &nr_copies);
+ if (ret == SD_RES_SUCCESS)
+ object_cache_delete(vid);
vdi_rsp->vdi_id = vid;
vdi_rsp->copies = nr_copies;
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index 6d9a8f8..7b1b05e 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -423,5 +423,6 @@ int object_cache_pull(struct object_cache *oc, uint32_t index);
int object_cache_push(struct object_cache *oc);
int object_cache_init(const char *p);
int object_is_cached(uint64_t oid);
+void object_cache_delete(uint32_t vid);
#endif
--
1.7.8.2
More information about the sheepdog
mailing list