Я получаю странное поведение в 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 ИНФОРМАЦИЯ; Настройка головы.
28-01-2014 11:04:52.933 ПРЕДУПРЕЖДЕНИЕ net.spy.memcached.MemcachedConnection: не удалось перераспределить на другой узел, повторная попытка основного узла для q:unittest:scannedemails:w.
28 11:04:52.933 ИНФОРМАЦИЯ; Установить голову; увеличение.
28-01-2014 11:04:52.935 ПРЕДУПРЕЖДЕНИЕ net.spy.memcached.MemcachedConnection: не удалось перераспределить на другой узел, повторная попытка основного узла для q:unittest:scannedemails:w.
FAILED: testMemc net.spy.memcached.OperationTimeoutException: время ожидания операции мутации истекло, невозможно изменить счетчик [q:unittest:scannedemails:w]
в net.spy.memcached.MemcachedClient.mutate(MemcachedClient.java:1484)
at net.spy.memcached.MemcachedClient.incr(MemcachedClient.java:1529)
at me.unroll.emailroller.ActOnScanResultsTest.testMemc(ActOnScanResultsTest.java:295)
Большая часть моей интуиции для такого рода ошибок подводит меня здесь. Следующие вещи странны:
- Почему всегда не получается ровно один раз установить?
- Почему он постоянно не увеличивается после того, как кажется успешным при установке?
Это на высоконагруженном сервере (да, немного неправильно запускать тест на нагруженном сервере, но если он выявляет такие проблемы, есть по крайней мере некоторое преимущество). Что может вызвать этот постоянный сбой? Есть только один узел.