summaryrefslogtreecommitdiffstats
path: root/src/server/image.c
diff options
context:
space:
mode:
authorSimon Rettberg2019-09-05 18:15:52 +0200
committerSimon Rettberg2019-09-05 18:15:52 +0200
commitbf665f59411840c60b6e3c9ac33f28a818233c0a (patch)
tree81e7307150e89710b7f3e9b628b694c0b2e54cfa /src/server/image.c
parent[SERVER] integrity checker: Improve flushing logic (diff)
downloaddnbd3-bf665f59411840c60b6e3c9ac33f28a818233c0a.tar.gz
dnbd3-bf665f59411840c60b6e3c9ac33f28a818233c0a.tar.xz
dnbd3-bf665f59411840c60b6e3c9ac33f28a818233c0a.zip
[SERVER] Introduce autoFreeDiskSpaceDelay
This setting allows you to control the formerly hard-coded timeout of 10 hours before a proxy would start deleting old images in order to free up space for new images. Setting it to -1 entirely disables automatic deletion, in case you have an external process for freeing up disk space.
Diffstat (limited to 'src/server/image.c')
-rw-r--r--src/server/image.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/server/image.c b/src/server/image.c
index 86e6b87..9fcb866 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -1696,14 +1696,16 @@ static bool image_ensureDiskSpace(uint64_t size, bool force)
for ( int maxtries = 0; maxtries < 20; ++maxtries ) {
uint64_t available;
if ( !file_freeDiskSpace( _basePath, NULL, &available ) ) {
- const int e = errno;
- logadd( LOG_WARNING, "Could not get free disk space (errno %d), will assume there is enough space left... ;-)\n", e );
+ logadd( LOG_WARNING, "Could not get free disk space (errno %d), will assume there is enough space left... ;-)\n", errno );
return true;
}
- if ( available > size ) return true;
- if ( !force && dnbd3_serverUptime() < 10 * 3600 ) {
- logadd( LOG_INFO, "Only %dMiB free, %dMiB requested, but server uptime < 10 hours...", (int)(available / (1024ll * 1024ll)),
- (int)(size / (1024 * 1024)) );
+ if ( available > size )
+ return true; // Yay
+ if ( !_isProxy || _autoFreeDiskSpaceDelay == -1 )
+ return false; // If not in proxy mode at all, or explicitly disabled, never delete anything
+ if ( !force && dnbd3_serverUptime() < (uint32_t)_autoFreeDiskSpaceDelay ) {
+ logadd( LOG_INFO, "Only %dMiB free, %dMiB requested, but server uptime < %d minutes...", (int)(available / (1024ll * 1024ll)),
+ (int)(size / (1024 * 1024)), _autoFreeDiskSpaceDelay / 60 );
return false;
}
logadd( LOG_INFO, "Only %dMiB free, %dMiB requested, freeing an image...", (int)(available / (1024ll * 1024ll)),