<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -41,8 +41,8 @@ public class BinaryConnectionFactory extends DefaultConnectionFactory {
 	public MemcachedNode createMemcachedNode(SocketAddress sa,
 			SocketChannel c, int bufSize) {
 		return new BinaryMemcachedNodeImpl(sa, c, bufSize,
-			createOperationQueue(),
-			createOperationQueue(),
+			createReadOperationQueue(),
+			createWriteOperationQueue(),
 			createOperationQueue());
 	}
 </diff>
      <filename>src/main/java/net/spy/memcached/BinaryConnectionFactory.java</filename>
    </modified>
    <modified>
      <diff>@@ -37,6 +37,19 @@ public interface ConnectionFactory {
 	BlockingQueue&lt;Operation&gt; createOperationQueue();
 
 	/**
+	 * Create a BlockingQueue for the operations currently expecting to read
+	 * responses from memcached.
+	 */
+	BlockingQueue&lt;Operation&gt; createReadOperationQueue();
+
+	/**
+	 * Create a BlockingQueue for the operations currently expecting to write
+	 * requests to memcached.
+	 */
+	BlockingQueue&lt;Operation&gt; createWriteOperationQueue();
+
+
+	/**
 	 * Create a NodeLocator instance for the given list of nodes.
 	 */
 	NodeLocator createLocator(List&lt;MemcachedNode&gt; nodes);</diff>
      <filename>src/main/java/net/spy/memcached/ConnectionFactory.java</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,9 @@ import net.spy.memcached.protocol.ascii.AsciiOperationFactory;
  *
  * &lt;p&gt;
  * This implementation creates connections where each server worker queue is
- * implemented using an ArrayBlockingQueue.
+ * implemented using an ArrayBlockingQueue.  The read queue is automatically
+ * configured to be 10% larger than the specified op queue.  The write queue
+ * is and input queues are the same size.
  * &lt;/p&gt;
  */
 public class DefaultConnectionFactory extends SpyObject
@@ -76,8 +78,8 @@ public class DefaultConnectionFactory extends SpyObject
 	public MemcachedNode createMemcachedNode(SocketAddress sa,
 			SocketChannel c, int bufSize) {
 		return new AsciiMemcachedNodeImpl(sa, c, bufSize,
-				createOperationQueue(),
-				createOperationQueue(),
+				createReadOperationQueue(),
+				createWriteOperationQueue(),
 				createOperationQueue());
 	}
 
@@ -97,6 +99,21 @@ public class DefaultConnectionFactory extends SpyObject
 	}
 
 	/* (non-Javadoc)
+	 * @see net.spy.memcached.ConnectionFactory#createReadOperationQueue()
+	 */
+	public BlockingQueue&lt;Operation&gt; createReadOperationQueue() {
+		return new ArrayBlockingQueue&lt;Operation&gt;(
+			(int) (getOpQueueLen() * 1.1));
+	}
+
+	/* (non-Javadoc)
+	 * @see net.spy.memcached.ConnectionFactory#createWriteOperationQueue()
+	 */
+	public BlockingQueue&lt;Operation&gt; createWriteOperationQueue() {
+		return createOperationQueue();
+	}
+
+	/* (non-Javadoc)
 	 * @see net.spy.memcached.ConnectionFactory#createLocator(java.util.List)
 	 */
 	public NodeLocator createLocator(List&lt;MemcachedNode&gt; nodes) {</diff>
      <filename>src/main/java/net/spy/memcached/DefaultConnectionFactory.java</filename>
    </modified>
    <modified>
      <diff>@@ -20,4 +20,11 @@ public class ConnectionFactoryTest extends TestCase {
 	public void testBinaryAnIntAnotherIntAndAHashAlgorithmCons() {
 		new BinaryConnectionFactory(5, 5, HashAlgorithm.FNV1_64_HASH);
 	}
+
+	public void testQueueSizes() {
+		ConnectionFactory cf=new DefaultConnectionFactory(100, 1024);
+		assertEquals(100, cf.createOperationQueue().remainingCapacity());
+		assertEquals(100, cf.createWriteOperationQueue().remainingCapacity());
+		assertEquals(110, cf.createReadOperationQueue().remainingCapacity());
+	}
 }</diff>
      <filename>src/test/java/net/spy/memcached/ConnectionFactoryTest.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9de48599d5a18cb5d59779e7c28713b517285aa4</id>
    </parent>
  </parents>
  <author>
    <name>Dustin Sallings</name>
    <email>dustin@spy.net</email>
  </author>
  <url>http://github.com/dustin/java-memcached-client/commit/3d806bac909790a0fee4c655a5d005ecd30d464a</url>
  <id>3d806bac909790a0fee4c655a5d005ecd30d464a</id>
  <committed-date>2008-05-14T09:28:35-07:00</committed-date>
  <authored-date>2008-05-14T09:28:35-07:00</authored-date>
  <message>Allow the input, op read and op write queues to be individually specified.

By default, the read queue is 10% larger than the input queue.

With a sufficiently large op read queue, it's possible to never
internally overflow, but correct values are likely
application-specific.</message>
  <tree>1a962e56e4b4c20821286a2280e919aa1e648e0f</tree>
  <committer>
    <name>Dustin Sallings</name>
    <email>dustin@spy.net</email>
  </committer>
</commit>
