summaryrefslogtreecommitdiffstats
path: root/src/server/globals.h
diff options
context:
space:
mode:
authorSimon Rettberg2021-04-13 16:41:26 +0200
committerSimon Rettberg2021-04-14 13:17:59 +0200
commit0be00336f97a7ef3590ee803d4ad19e305aa1583 (patch)
treeb00b91b8c6d687ad4116405818e2cecb3e6cf44b /src/server/globals.h
parent[CLIENT] Use SO_GETPEERCRED instead of braindead setuid crap (diff)
downloaddnbd3-0be00336f97a7ef3590ee803d4ad19e305aa1583.tar.gz
dnbd3-0be00336f97a7ef3590ee803d4ad19e305aa1583.tar.xz
dnbd3-0be00336f97a7ef3590ee803d4ad19e305aa1583.zip
[SERVER] Make prefetching synchronous
There is a race condition where we process the next request from the same client faster than the OS will schedule the async prefetch job, rendering it a NOOP in the best case (request ranges match) or fetching redundant data from the upstream server (prefetch range is larger than actual request by client). Make prefetching synchronous to prevent this race condition.
Diffstat (limited to 'src/server/globals.h')
-rw-r--r--src/server/globals.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/server/globals.h b/src/server/globals.h
index 12805ed..b255668 100644
--- a/src/server/globals.h
+++ b/src/server/globals.h
@@ -229,12 +229,12 @@ extern atomic_bool _removeMissingImages;
/**
* Read timeout when waiting for or sending data on an uplink
*/
-extern atomic_int _uplinkTimeout;
+extern atomic_uint _uplinkTimeout;
/**
* Read timeout when waiting for or sending data from/to client
*/
-extern atomic_int _clientTimeout;
+extern atomic_uint _clientTimeout;
/**
* If true, images with no active client will have their fd closed after some
@@ -309,7 +309,7 @@ extern atomic_int _maxImages;
* Usually this isn't even a megabyte for "real" clients (blockdev
* or fuse).
*/
-extern atomic_int _maxPayload;
+extern atomic_uint _maxPayload;
/**
* If in proxy mode, don't replicate images that are
@@ -332,6 +332,15 @@ extern atomic_bool _pretendClient;
extern atomic_int _autoFreeDiskSpaceDelay;
/**
+ * When handling a client request, this sets the maximum amount
+ * of bytes we prefetch offset right at the end of the client request.
+ * The prefetch size will be MIN( length * 3, _maxPrefetch ), if
+ * length <= _maxPrefetch, so effectively, setting this to 0 disables
+ * any prefetching.
+ */
+extern atomic_uint _maxPrefetch;
+
+/**
* Load the server configuration.
*/
void globals_loadConfig();