From 2507c2bbf312ba34200719842997f5d272d71777 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 9 Jul 2018 23:42:06 +0200 Subject: [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. --- src/server/globals.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/server/globals.c') 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); -- cgit v1.2.3-55-g7522