Infinispan: блокировка в удаленном транзакционном кеше

Мы пытаемся использовать infinispan в качестве удаленного кэша с блокировкой чтения. Клиенты делают чтение с "пут", чтобы получить блокировку на ключ, как описано в бесконечно длительной документации в разделе " Пессимистический кеш транзакций ". Когда возвращается cache.put(k1,v1), k1 блокируется и никакая другая транзакция не выполняется. выполнение в любом месте кластера может записать в него. Чтение k1 все еще возможно. Блокировка на k1 снимается, когда транзакция завершается (фиксирует или выполняет откат). Поэтому сценарий:

transactionManager.begin();
// read with put to acquire write lock
String value = getRemoteCache().get(key);
getRemoteCache().put(key, value);

// do smthing with the value

getRemoteCache().put(key, newValue);
transactionManager.commit();

удаленный кеш настроен как транзакционный с пессимистической блокировкой:

   <local-cache name="default"> <locking isolation="REPEATABLE_READ" acquire-timeout="30000" concurrency-level="1000" striping="false"/>
        <transaction  mode="NON_XA" locking="PESSIMISTIC"/>
   </local-cache>

и клиенты обращаются к remoteCacheManager как клиент HOTROD с конфигурацией:

  ConfigurationBuilder builder = new ConfigurationBuilder();
    // add more configurations ?
    builder.transaction().transactionManagerLookup(GenericTransactionManagerLookup.getInstance());
    builder.transaction().transactionMode(TransactionMode.NON_XA);
    builder.addServer().host(readServerHostConfiguration()).port(readServerPortConfiguration());
    return new RemoteCacheManager(builder.build(), true);

Несмотря на то, что клиенты могли "читать с положенным" одним значением одновременно, клиенты Concurent не получают исключения при выставлении значения при его чтении, но только позже, совершая преобразование. Это ожидаемое поведение?

1 ответ

Решение

Да, это.

Как описано в документации ( http://infinispan.org/docs/stable/user_guide/user_guide.html) транзакция, выполняемая на клиенте, имеет оптимистическую семантику. Замки будут получены только во время коммита.

Транзакции с пессимистической блокировкой действительны только во встроенном режиме.

Другие вопросы по тегам