diff options
author | Simon Rettberg | 2019-09-05 18:15:52 +0200 |
---|---|---|
committer | Simon Rettberg | 2019-09-05 18:15:52 +0200 |
commit | bf665f59411840c60b6e3c9ac33f28a818233c0a (patch) | |
tree | 81e7307150e89710b7f3e9b628b694c0b2e54cfa /src/server/image.c | |
parent | [SERVER] integrity checker: Improve flushing logic (diff) | |
download | dnbd3-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.c | 14 |
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)), |