[ARVADOS] created: 1.3.0-2191-g28d450006

Git user git at public.arvados.org
Thu Apr 9 21:54:59 UTC 2020


        at  28d450006ec8610000739de7bc362e2a6bf5f001 (commit)


commit 28d450006ec8610000739de7bc362e2a6bf5f001
Author: Ward Vandewege <ward at jhvc.com>
Date:   Thu Apr 9 17:53:31 2020 -0400

    documentation: update descriptions for MaxKeepBlobBuffers and MaxConcurrentRequests
    
    keepstore: MaxConcurrentRequests set to zero should mean no limit
    
    keepstore: warn if MaxConcurrentRequests is set to a nonzero value less
    than MaxConcurrentRequests.
    
    refs #16326
    
    Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward at jhvc.com>

diff --git a/lib/config/config.default.yml b/lib/config/config.default.yml
index 3750adcab..a0def71f7 100644
--- a/lib/config/config.default.yml
+++ b/lib/config/config.default.yml
@@ -184,12 +184,21 @@ Clusters:
       MaxItemsPerResponse: 1000
 
       # Maximum number of concurrent requests to accept in a single
-      # service process, or 0 for no limit. Currently supported only
-      # by keepstore.
+      # service process, or 0 for no limit.
       MaxConcurrentRequests: 0
 
-      # Maximum number of 64MiB memory buffers per keepstore server
-      # process, or 0 for no limit.
+      # Maximum number of 64MiB memory buffers per Keepstore server process, or
+      # 0 for no limit. When this limit is reached, up to
+      # (MaxConcurrentRequests - MaxKeepBlobBuffers) HTTP requests requiring
+      # buffers (like GET and PUT) will wait for buffer space to be released.
+      # Any HTTP requests beyond MaxConcurrentRequests will receive an
+      # immediate 503 response.
+      #
+      # MaxKeepBlobBuffers should be set such that (MaxKeepBlobBuffers * 64MiB
+      # * 1.1) fits comfortably in memory. On a host dedicated to running
+      # Keepstore, divide total memory by 88MiB to suggest a suitable value.
+      # For example, if grep MemTotal /proc/meminfo reports MemTotal: 7125440
+      # kB, compute 7125440 / (88 * 1024)=79 and configure MaxBuffers: 79
       MaxKeepBlobBuffers: 128
 
       # API methods to disable. Disabled methods are not listed in the
diff --git a/services/keepstore/command.go b/services/keepstore/command.go
index e0509393c..f71bbf08f 100644
--- a/services/keepstore/command.go
+++ b/services/keepstore/command.go
@@ -153,9 +153,8 @@ func (h *handler) setup(ctx context.Context, cluster *arvados.Cluster, token str
 	}
 	bufs = newBufferPool(h.Logger, h.Cluster.API.MaxKeepBlobBuffers, BlockSize)
 
-	if h.Cluster.API.MaxConcurrentRequests < 1 {
-		h.Cluster.API.MaxConcurrentRequests = h.Cluster.API.MaxKeepBlobBuffers * 2
-		h.Logger.Warnf("API.MaxConcurrentRequests <1 or not specified; defaulting to MaxKeepBlobBuffers * 2 == %d", h.Cluster.API.MaxConcurrentRequests)
+	if h.Cluster.API.MaxConcurrentRequests > 0 && h.Cluster.API.MaxConcurrentRequests < h.Cluster.API.MaxKeepBlobBuffers {
+		h.Logger.Warnf("API.MaxConcurrentRequests is non-zero and smaller than API.MaxKeepBlobBuffer; this configuration is not optimal")
 	}
 
 	if h.Cluster.Collections.BlobSigningKey != "" {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list