From b406daa1c6c4d5d7d2f49f0f8fc91cdc4a0c4d75 Mon Sep 17 00:00:00 2001 From: Mike Wiederhold Date: Tue, 2 Aug 2011 14:54:49 -0700 Subject: [PATCH] SPY-8: Added a limit on how many gets can be optimized We have a limit on the amount of sets that can be optimized so we should have a limit on how many gets can be optimized as well. This way people don't run into any issues with optimizing too many get requests and having the client timeout as a result of the server being too slow trying to fill all of the requests in the multi- get. The max number of gets that can be optimized into a single request is 4096. Change-Id: I23c107ca3459e3386270c53f9ce20450d7ee8830 Reviewed-on: http://review.couchbase.org/8599 Reviewed-by: Matt Ingenthron Tested-by: Michael Wiederhold --- .../memcached/protocol/binary/BinaryMemcachedNodeImpl.java | 4 +++- .../net/spy/memcached/protocol/binary/OptimizedGetImpl.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/spy/memcached/protocol/binary/BinaryMemcachedNodeImpl.java b/src/main/java/net/spy/memcached/protocol/binary/BinaryMemcachedNodeImpl.java index 6aa7fb919..589b01c9a 100644 --- a/src/main/java/net/spy/memcached/protocol/binary/BinaryMemcachedNodeImpl.java +++ b/src/main/java/net/spy/memcached/protocol/binary/BinaryMemcachedNodeImpl.java @@ -17,6 +17,7 @@ */ public class BinaryMemcachedNodeImpl extends TCPMemcachedNodeImpl { + private final int MAX_GET_OPTIMIZATION_COUNT = 4096; private final int MAX_SET_OPTIMIZATION_COUNT = 65535; private final int MAX_SET_OPTIMIZATION_BYTES = 2 * 1024 * 1024; @@ -47,7 +48,8 @@ private void optimizeGets() { (GetOperation)optimizedOp); optimizedOp=og; - while(writeQ.peek() instanceof GetOperation) { + while(writeQ.peek() instanceof GetOperation + && og.size() < MAX_GET_OPTIMIZATION_COUNT) { GetOperation o=(GetOperation) writeQ.remove(); if(!o.isCancelled()) { og.addOperation(o); diff --git a/src/main/java/net/spy/memcached/protocol/binary/OptimizedGetImpl.java b/src/main/java/net/spy/memcached/protocol/binary/OptimizedGetImpl.java index c22810769..8c26cf10b 100644 --- a/src/main/java/net/spy/memcached/protocol/binary/OptimizedGetImpl.java +++ b/src/main/java/net/spy/memcached/protocol/binary/OptimizedGetImpl.java @@ -33,4 +33,8 @@ public void addOperation(GetOperation o) { } } + public int size() { + return pcb.numKeys(); + } + }