diff options
author | sr | 2013-01-06 20:14:41 +0100 |
---|---|---|
committer | sr | 2013-01-06 20:14:41 +0100 |
commit | ddc9be6a043339d75bd19e2d2108483f6ec1d08c (patch) | |
tree | 9692bdcfb2b69b138b76d1d9fe10dfa9f9c12ea8 /src/server | |
parent | [SERVER] Fix nullpointer deref when last image is deleted (diff) | |
download | dnbd3-ddc9be6a043339d75bd19e2d2108483f6ec1d08c.tar.gz dnbd3-ddc9be6a043339d75bd19e2d2108483f6ec1d08c.tar.xz dnbd3-ddc9be6a043339d75bd19e2d2108483f6ec1d08c.zip |
[SERVER] Ignore trusted server if soft- or hard-deadline for an image has been reached
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/job.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/server/job.c b/src/server/job.c index 6281b3a..cc3065c 100644 --- a/src/server/job.c +++ b/src/server/job.c @@ -526,6 +526,13 @@ static void query_servers() if (local_image == NULL && trust->auto_replicate) { pthread_spin_unlock(&_spinlock); + const time_t deadline = time(NULL) + 60; + if ((softdelete != 0 && softdelete < deadline) + || (harddelete != 0 && harddelete < deadline)) + { // Image is already about to be deleted, ignore it + printf("[DEBUG] Not replicating old image: '%s'\n", xmlbuffer); + goto free_current_image; + } // Image is NEW, add it! dnbd3_image_t newimage; char cachefile[90]; @@ -550,12 +557,16 @@ static void query_servers() else if (local_image != NULL) { // Image is already KNOWN, add alt server if appropriate - if (local_image->filesize == 0) // Size is unknown, just assume the trusted server got it right - local_image->filesize = size; - if (size != local_image->filesize) - 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); + const time_t deadline = time(NULL) + 60; + if (softdelete == 0 || softdelete > deadline) + { + if (local_image->filesize == 0) // Size is unknown, just assume the trusted server got it right + local_image->filesize = size; + if (size != local_image->filesize) + 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; |