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

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


person Amine    schedule 28.09.2018    source источник


Ответы (1)


Да, это так.

Как описано в документации (Hot Rod Transaction) транзакция запущенный на клиенте, имеет оптимистичную семантику. Блокировки будут получены только во время фиксации.

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

person pruivo    schedule 28.09.2018
comment
что тогда означает ‹режим транзакции = NON_XA блокировка = PESSIMISTIC /› в конфигурации кеша? - person Amine; 28.09.2018
comment
Это конфигурация сервера. Это означает, что сервер будет использовать пессимистичный кеш для воспроизведения клиентской транзакции Hot Rod и обнаружения любых конфликтов с другими параллельными транзакциями. - person pruivo; 28.09.2018
comment
Боюсь, ссылка не работает. - person palacsint; 25.05.2021