summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr2013-01-06 18:50:27 +0100
committersr2013-01-06 18:50:27 +0100
commit56acc3770f33f278ebbc845438252c035aa9101b (patch)
treeb3bf9e08c6ba855141243ea193447a36ab36ca63
parent[SERVER] RPC: Fix return code when adding and removing trusted name spaces (diff)
downloaddnbd3-56acc3770f33f278ebbc845438252c035aa9101b.tar.gz
dnbd3-56acc3770f33f278ebbc845438252c035aa9101b.tar.xz
dnbd3-56acc3770f33f278ebbc845438252c035aa9101b.zip
[SERVER] Copy deletion deadlines only for replicated images and only from replication source server
-rw-r--r--src/server/job.c10
-rw-r--r--src/server/saveload.c3
2 files changed, 13 insertions, 0 deletions
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)