summaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorSimon Rettberg2013-11-10 21:30:24 +0100
committerSimon Rettberg2013-11-10 21:30:24 +0100
commit6a6a0e03482a7a799d2bc9ac3440b81d0780547a (patch)
tree3bc87bdf03109d4e46e90c283f21991217216b10 /src/server
parentRemove outdated and invalid example configs (diff)
downloaddnbd3-6a6a0e03482a7a799d2bc9ac3440b81d0780547a.tar.gz
dnbd3-6a6a0e03482a7a799d2bc9ac3440b81d0780547a.tar.xz
dnbd3-6a6a0e03482a7a799d2bc9ac3440b81d0780547a.zip
[SERVER] Minor tweaks here and there
Diffstat (limited to 'src/server')
-rw-r--r--src/server/altservers.c2
-rw-r--r--src/server/globals.c2
-rw-r--r--src/server/globals.h5
-rw-r--r--src/server/image.c14
-rw-r--r--src/server/net.c2
5 files changed, 16 insertions, 9 deletions
diff --git a/src/server/altservers.c b/src/server/altservers.c
index 2eca369..17e8e4b 100644
--- a/src/server/altservers.c
+++ b/src/server/altservers.c
@@ -424,7 +424,7 @@ static void *altservers_main(void *data)
usleep( 1000 ); // Wait a very short moment for the network to recover (we might be doing lots of measurements...)
// Connect
clock_gettime( CLOCK_MONOTONIC_RAW, &start );
- int sock = sock_connect( &servers[itAlt], 750, 1250 );
+ int sock = sock_connect( &servers[itAlt], 750, _uplinkTimeout );
if ( sock < 0 ) continue;
// Select image ++++++++++++++++++++++++++++++
if ( !dnbd3_select_image( sock, uplink->image->lower_name, uplink->image->rid, FLAGS8_SERVER ) ) {
diff --git a/src/server/globals.c b/src/server/globals.c
index 4f081c7..3fcb61d 100644
--- a/src/server/globals.c
+++ b/src/server/globals.c
@@ -14,6 +14,7 @@ int _serverPenalty = 0;
int _clientPenalty = 0;
int _isProxy = FALSE;
int _proxyPrivateOnly = FALSE;
+int _uplinkTimeout = 1250;
#define SAVE_TO_VAR_STR(ss, kk) do { if (strcmp(section, #ss) == 0 && strcmp(key, #kk) == 0) { if (_ ## kk != NULL) free(_ ## kk); _ ## kk = strdup(value); } } while (0)
#define SAVE_TO_VAR_BOOL(ss, kk) do { if (strcmp(section, #ss) == 0 && strcmp(key, #kk) == 0) _ ## kk = atoi(value) != 0 || strcmp(value, "true") == 0 || strcmp(value, "True") == 0 || strcmp(value, "TRUE") == 0; } while (0)
@@ -27,6 +28,7 @@ static int ini_handler(void *custom, const char* section, const char* key, const
SAVE_TO_VAR_BOOL( dnbd3, proxyPrivateOnly );
SAVE_TO_VAR_INT( dnbd3, serverPenalty );
SAVE_TO_VAR_INT( dnbd3, clientPenalty );
+ SAVE_TO_VAR_INT( dnbd3, uplinkTimeout );
return TRUE;
}
diff --git a/src/server/globals.h b/src/server/globals.h
index a15678b..921398d 100644
--- a/src/server/globals.h
+++ b/src/server/globals.h
@@ -163,6 +163,11 @@ extern int _isProxy;
*/
extern int _proxyPrivateOnly;
+/**
+ * Read timeout when waiting for data on an uplink
+ */
+extern int _uplinkTimeout;
+
void globals_loadConfig();
#endif /* GLOBALS_H_ */
diff --git a/src/server/image.c b/src/server/image.c
index e137a1b..37eb11c 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -184,7 +184,7 @@ int image_saveCacheMap(dnbd3_image_t *image)
strcpy( mapfile, image->path );
strcat( mapfile, ".map" );
- fd = open( mapfile, O_WRONLY | O_CREAT, 0640 );
+ fd = open( mapfile, O_WRONLY | O_CREAT, 0644 );
if ( fd < 0 ) {
spin_lock( &image->lock );
image->users--;
@@ -732,8 +732,8 @@ int image_create(char *image, int revision, uint64_t size)
const int mapsize = IMGSIZE_TO_MAPBYTES(size);
// Write files
int fdImage = -1, fdCache = -1;
- fdImage = open( path, O_RDWR | O_TRUNC | O_CREAT, 0640 );
- fdCache = open( cache, O_RDWR | O_TRUNC | O_CREAT, 0640 );
+ fdImage = open( path, O_RDWR | O_TRUNC | O_CREAT, 0644 );
+ fdCache = open( cache, O_RDWR | O_TRUNC | O_CREAT, 0644 );
if ( fdImage < 0 ) {
memlogf( "[ERROR] Could not open %s for writing.", path );
goto failure_cleanup;
@@ -798,7 +798,7 @@ dnbd3_image_t* image_getOrClone(char *name, uint16_t revision)
|| remoteCloneCache[i].deadline < now
|| strcmp( cmpname, remoteCloneCache[i].name ) != 0 ) continue;
pthread_mutex_unlock( &remoteCloneLock ); // Was recently checked...
- return NULL ;
+ return image_get( name, revision );
}
// Re-check to prevent two clients at the same time triggering this
image = image_get( name, revision );
@@ -821,7 +821,7 @@ dnbd3_image_t* image_getOrClone(char *name, uint16_t revision)
uint16_t remoteVersion, remoteRid;
uint64_t remoteImageSize;
for (i = 0; i < count; ++i) {
- int sock = sock_connect( &servers[i], 500, 1500 );
+ int sock = sock_connect( &servers[i], 750, _uplinkTimeout );
if ( sock < 0 ) continue;
if ( !dnbd3_select_image( sock, name, revision, FLAGS8_SERVER ) ) goto server_fail;
char *remoteName;
@@ -882,7 +882,7 @@ static int image_clone(int sock, char *name, uint16_t revision, uint64_t imageSi
if ( lists_crc != masterCrc ) {
memlogf( "[WARNING] OTF-Clone: Corrupted CRC-32 list. ignored. (%s)", name );
} else {
- int fd = open( crcFile, O_WRONLY | O_CREAT, 0640 );
+ int fd = open( crcFile, O_WRONLY | O_CREAT, 0644 );
write( fd, &lists_crc, sizeof(uint32_t) );
write( fd, crc32list, crc32len );
close( fd );
@@ -938,7 +938,7 @@ int image_generateCrcFile(char *image)
close( fdImage );
return FALSE;
}
- int fdCrc = open( crcFile, O_RDWR | O_CREAT, 0640 );
+ int fdCrc = open( crcFile, O_RDWR | O_CREAT, 0644 );
if ( fdCrc < 0 ) {
printf( "Could not open CRC File %s for writing..\n", crcFile );
close( fdImage );
diff --git a/src/server/net.c b/src/server/net.c
index 3e9383d..1d9d226 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -50,7 +50,7 @@ static inline char recv_request_header(int sock, dnbd3_request_t *request)
int ret, fails = 0;
// Read request header from socket
while ( (ret = recv( sock, request, sizeof(*request), MSG_WAITALL )) != sizeof(*request) ) {
- if ( ret >= 0 || ++fails > 10 ) return FALSE;
+ if ( ret >= 0 || ++fails > SOCKET_TIMEOUT_SERVER_RETRIES ) return FALSE;
const int err = errno;
if ( err == EAGAIN || err == EINTR ) continue;
printf( "[DEBUG] Error receiving request: Could not read message header (%d/%d, e=%d)\n", ret, (int)sizeof(*request), err );