Java 增量超时;重试后设置始终成功

Java 增量超时;重试后设置始终成功,java,timeout,memcached,spymemcached,Java,Timeout,Memcached,Spymemcached,我在memcached中得到了奇怪的行为,特别是在一致性方面奇怪的行为。这是我的测试: @Test public void testMemc() { logger.info("Setting head."); memc.set(env.memcachedQueueKeys().head, 3600, 0); logger.info("Set head; incrementing."); memc.incr(env.memca

我在memcached中得到了奇怪的行为,特别是在一致性方面奇怪的行为。这是我的测试:

@Test
public void testMemc() {
    logger.info("Setting head.");
    memc.set(env.memcachedQueueKeys().head, 3600, 0);
    logger.info("Set head; incrementing.");
    memc.incr(env.memcachedQueueKeys().head, 1);
    logger.info("Incremented.");
}
以下是输出:

28 11:04:52.932信息;头朝下

2014-01-28 11:04:52.933警告net.spy.memcached.memcached连接:无法重新分发到另一个节点,正在为q:unittest:scannedemails:w重试主节点

28 11:04:52.933信息;带头;递增

2014-01-28 11:04:52.935警告net.spy.memcached.memcached连接:无法重新分发到另一个节点,正在为q:unittest:scannedemails:w重试主节点

失败:testMemc net.spy.memcached.OperationTimeoutException:Mutate操作超时,无法修改计数器[q:unittest:scannedemails:w]
位于net.spy.memcached.MemcachedClient.mutate(MemcachedClient.java:1484)
位于net.spy.memcached.MemcachedClient.incr(MemcachedClient.java:1529)
在me.unroll.emailroller.ActOnScanResultsTest.testMemc(ActOnScanResultsTest.java:295)

我对这种错误的大部分直觉在这里让我失望。以下事情都很奇怪:

  • 为什么每次设置都会失败一次
  • 为什么它在看起来成功的时候却永远无法增加

  • 这是在高负载服务器上进行的(是的,在负载服务器上运行测试是有点错误的,但是如果它捕获到这样的问题,至少有一些优势)。什么会导致这种持续的失败?只有一个节点。

    问题是我根本无法连接。这是spymemcached中的一个错误,因为
    set
    操作没有抛出异常,即使它没有要执行
    set
    的memcached服务器