2014-01-28 3 views
1

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 WARN net.spy.memcached.MemcachedConnection : q : unittest : scannedemails : w에 대한 기본 노드를 다시 시도하여 다른 노드에 재배포 할 수 없습니다.

28 11 : 04 : 52.933 정보; 머리를 설정하십시오. 증분.

2014-01-28 11 : 04 : 52.935 WARN net.spy.memcached.MemcachedConnection : q : unittest : scannedemails : w에 대한 기본 노드를 다시 시도하여 다른 노드에 재배포 할 수 없습니다.

에 실패 testMemc net.spy.memcached.OperationTimeoutException : net.spy.memcached.MemcachedClient.mutate (MemcachedClient.java에서
돌연변이 동작은 카운터를 수정할 수없는 [w : 유닛 테스트 : scannedemails Q]를 초과 : 1484) net.spy.memcached.MemcachedClient.incr (MemcachedClient.java:1529) me.unroll.emailroller.ActOnScanResultsTest.testMemc에서
(ActOnScanResultsTest.java:295)에서

의 대부분을 내 이런 종류의 실수에 대한 직감은 나를 여기에서 실패하게한다. 다음은 모두 이상합니다.

  1. 왜 항상 정확히 한 번 설정에 실패합니까?
  2. 왜 세트에서 성공한 것처럼 보인 후에 계속 증가하지 못합니까?

로드가 많은 서버에서 테스트를 실행하는 것은 약간 잘못되었지만 이와 같은 문제가 발생하면 이점이 있습니다. 이 일관된 실패의 원인은 무엇입니까? 하나의 노드 만 있습니다.

답변

1

문제 을 연결할 수 없습니다. 이것은 set을 수행 할 memcached 서버가 없더라도 set 작업이 예외를 throw하지 않았기 때문에 spymemcached의 버그입니다.