From 56acc3770f33f278ebbc845438252c035aa9101b Mon Sep 17 00:00:00 2001 From: sr Date: Sun, 6 Jan 2013 18:50:27 +0100 Subject: [SERVER] Copy deletion deadlines only for replicated images and only from replication source server --- src/server/job.c | 10 ++++++++++ src/server/saveload.c | 3 +++ 2 files changed, 13 insertions(+) diff --git a/src/server/job.c b/src/server/job.c index e499b09..f4a4296 100644 --- a/src/server/job.c +++ b/src/server/job.c @@ -517,6 +517,10 @@ static void query_servers() printf("[DEBUG] No NS match: '%s'\n", xmlbuffer); goto free_current_image; } + char *sdel = XML_GETPROP(cur, "softdelete"); + char *hdel = XML_GETPROP(cur, "harddelete"); + const time_t softdelete = sdel ? atol(sdel) : 0; + const time_t harddelete = hdel ? atol(hdel) : 0; dnbd3_image_t *local_image = dnbd3_get_image(xmlbuffer, rid, FALSE); if (local_image == NULL && trust->auto_replicate) { @@ -528,6 +532,8 @@ static void query_servers() newimage.config_group = xmlbuffer; newimage.rid = rid; newimage.filesize = size; + newimage.delete_hard = harddelete; + newimage.delete_soft = softdelete; if (_cache_dir) { newimage.cache_file = create_cache_filename(xmlbuffer, rid, cachefile, 90); @@ -549,6 +555,10 @@ static void query_servers() printf("[DEBUG] Ignoring remote image '%s' because it has a different size from the local version! (remote: %llu, local: %llu)\n", local_image->config_group, size, (unsigned long long)local_image->filesize); else add_alt_server(local_image, &host); + if (local_image->cache_file && trust->auto_replicate) { + local_image->delete_hard = harddelete; + local_image->delete_soft = softdelete; + } pthread_spin_unlock(&_spinlock); } else diff --git a/src/server/saveload.c b/src/server/saveload.c index 5a6291e..a9934d4 100644 --- a/src/server/saveload.c +++ b/src/server/saveload.c @@ -494,6 +494,7 @@ void dnbd3_exec_delete(int save_if_changed) const time_t now = time(NULL); GSList *image_iterator, *client_iterator; char ipstr[100]; + printf("[DEBUG] Scanning for deletable images\n"); pthread_spin_lock(&_spinlock); for (image_iterator = _dnbd3_images; image_iterator; image_iterator = image_iterator->next) @@ -502,6 +503,7 @@ void dnbd3_exec_delete(int save_if_changed) int delete_now = TRUE; if (image->delete_hard != 0 && image->delete_hard < now) { + printf("[DEBUG] HARD %s\n", image->low_name); // Drop all clients still using it for (client_iterator = _dnbd3_clients; client_iterator; client_iterator = client_iterator->next) { @@ -520,6 +522,7 @@ void dnbd3_exec_delete(int save_if_changed) } // END delete_hard image else if (image->delete_soft != 0 && image->delete_soft < now && image->atime + 3600 < now) { + printf("[DEBUG] SOFT %s\n", image->low_name); // Image should be soft-deleted // Check if it is still in use for (client_iterator = _dnbd3_clients; client_iterator; client_iterator = client_iterator->next) -- cgit v1.2.3-55-g7522