增量超时;设置总是在重试后成功

时间:2014-01-28 16:09:00

标签: 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.memcachedQueueKeys().head, 1);
    logger.info("Incremented.");
}

这是输出:

  

28 11:04:52.932 INFO;设置头。

     

2014-01-28 11:04:52.933 WARN net.spy.memcached.MemcachedConnection:无法重新分发到另一个节点,为q重试主节点:unittest:scannedemails:w。

     

28 11:04:52.933 INFO;设置头;递增。

     

2014-01-28 11:04:52.935 WARN net.spy.memcached.MemcachedConnection:无法重新分发到另一个节点,为q重试主节点:unittest:scannedemails:w。

     

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

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

  1. 为什么它总是一次失败才能设置?
  2. 为什么在看似成功后会永久失败?
  3. 这是在高负载服务器上(是的,在承载服务器上运行测试有点不对,但如果遇到这样的问题,至少有一些优势)。什么可以导致这种一致的失败?只有一个节点。

1 个答案:

答案 0 :(得分:1)

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