summaryrefslogtreecommitdiffstats
path: root/src/server/globals.c
diff options
context:
space:
mode:
authorSimon Rettberg2018-07-09 23:42:06 +0200
committerSimon Rettberg2018-07-09 23:42:06 +0200
commit2507c2bbf312ba34200719842997f5d272d71777 (patch)
tree6d794b4eeb76c0c5308a2d00d6164ef438094f94 /src/server/globals.c
parent[SERVER] Reduce debug spam (diff)
downloaddnbd3-2507c2bbf312ba34200719842997f5d272d71777.tar.gz
dnbd3-2507c2bbf312ba34200719842997f5d272d71777.tar.xz
dnbd3-2507c2bbf312ba34200719842997f5d272d71777.zip
[SERVER] Introduce backgroundReplication=hashblock
This is a compromise; if you want to validate replicated data fairly quickly, using this option will make background replication only kick in when there's a "dirty" 16M block, i.e. some blocks within a 16M block are cached locally, but not all. Completing the block makes it possible to validate its CRC32 checksum.
Diffstat (limited to 'src/server/globals.c')
-rw-r--r--src/server/globals.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/server/globals.c b/src/server/globals.c
index 932b3d5..aca7551 100644
--- a/src/server/globals.c
+++ b/src/server/globals.c
@@ -16,7 +16,7 @@ char *_basePath = NULL;
int _serverPenalty = 0;
int _clientPenalty = 0;
bool _isProxy = false;
-bool _backgroundReplication = true;
+int _backgroundReplication = BGR_FULL;
int _bgrMinClients = 0;
bool _lookupMissingForProxy = true;
bool _sparseFiles = false;
@@ -55,7 +55,6 @@ static int ini_handler(void *custom UNUSED, const char* section, const char* key
SAVE_TO_VAR_BOOL( dnbd3, vmdkLegacyMode );
SAVE_TO_VAR_BOOL( dnbd3, isProxy );
SAVE_TO_VAR_BOOL( dnbd3, proxyPrivateOnly );
- SAVE_TO_VAR_BOOL( dnbd3, backgroundReplication );
SAVE_TO_VAR_INT( dnbd3, bgrMinClients );
SAVE_TO_VAR_BOOL( dnbd3, lookupMissingForProxy );
SAVE_TO_VAR_BOOL( dnbd3, sparseFiles );
@@ -70,6 +69,15 @@ static int ini_handler(void *custom UNUSED, const char* section, const char* key
SAVE_TO_VAR_UINT( limits, maxImages );
SAVE_TO_VAR_UINT( limits, maxPayload );
SAVE_TO_VAR_UINT64( limits, maxReplicationSize );
+ if ( strcmp( section, "dnbd3" ) == 0 && strcmp( key, "backgroundReplication" ) == 0 ) {
+ if ( strcmp( value, "hashblock" ) == 0 ) {
+ _backgroundReplication = BGR_HASHBLOCK;
+ } else if ( IS_TRUE( value ) ) {
+ _backgroundReplication = BGR_FULL;
+ } else {
+ _backgroundReplication = BGR_DISABLED;
+ }
+ }
if ( strcmp( section, "logging" ) == 0 && strcmp( key, "fileMask" ) == 0 ) handleMaskString( value, &log_setFileMask );
if ( strcmp( section, "logging" ) == 0 && strcmp( key, "consoleMask" ) == 0 ) handleMaskString( value, &log_setConsoleMask );
if ( strcmp( section, "logging" ) == 0 && strcmp( key, "consoleTimestamps" ) == 0 ) log_setConsoleTimestamps( IS_TRUE(value) );
@@ -152,7 +160,7 @@ void globals_loadConfig()
}
}
}
- if ( _backgroundReplication && _sparseFiles && _bgrMinClients < 5 ) {
+ if ( _backgroundReplication == BGR_FULL && _sparseFiles && _bgrMinClients < 5 ) {
logadd( LOG_WARNING, "Ignoring 'sparseFiles=true' since backgroundReplication is set to true and bgrMinClients is too low" );
_sparseFiles = false;
}
@@ -265,7 +273,11 @@ size_t globals_dumpConfig(char *buffer, size_t size)
PINT(serverPenalty);
PINT(clientPenalty);
PBOOL(isProxy);
- PBOOL(backgroundReplication);
+ if ( _backgroundReplication == BGR_HASHBLOCK ) {
+ P_ARG("backgroundReplication=hashblock\n");
+ } else {
+ PBOOL(backgroundReplication);
+ }
PINT(bgrMinClients);
PBOOL(lookupMissingForProxy);
PBOOL(sparseFiles);