Infinispan: блокировка в удаленном транзакционном кеше - PullRequest
0 голосов
/ 28 сентября 2018

Мы пытаемся использовать infinispan в качестве удаленного кэша с блокировкой чтения.Клиенты выполняют чтение с помощью «put», чтобы получить блокировку ключа, как описано в документации по бесконечности времени в разделе пессимистический транзакционный кеш «Когда возвращается 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 Ответ

0 голосов
/ 28 сентября 2018

Да, это так.

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

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

...