2016-12-05 21 views
0

Мы используем Infinispan 4.0 в качестве нашего поставщика кеширования (я знаю, что это антиквариат, поскольку версия 9 является последней). При этом я немного смущен, читая документацию, которая гласит:Infinispan remote lazy locking

Infinispan по умолчанию приобретает дистанционные замки лениво. Замки локально локализуются на узле, который выполняет транзакцию, в то время как другие узлы кластера пытаются заблокировать ключи кеша, участвующие в транзакции, в фазе подготовки/фиксации фазы. Однако, при желании, Infinispan может с готовностью блокировать кеш-ключи либо явно, либо неявно.

Каково поведение Infinispan по умолчанию? Я понимаю, что он блокируется только на локальном узле, но точно, когда он блокирует кластер? Например, если у вас есть операции, как:

Cache.put(K,V) 

Как это вести себя, когда другой узел в кластере пытается выполнить одновременную работу

Cache.put(K,V) 

? Как эта удаленная ленивая блокировка работает?

ответ

2

Этот комментарий был о сделках. С транзакциями удаленные блокировки могут быть получены либо в течение cache.put(k, v) (желательно), либо в течение tm.commit() (ленивый). Без транзакций между ними нет никакого различия.

Обратите внимание, что блокировка в 4.x была очень подвержена взаимоблокировкам. Узел получит локальную блокировку, тогда он попытается получить блокировки для всех других владельцев, и была бы высокая вероятность тупика, если другой узел попытался написать один и тот же ключ одновременно.

+0

Хорошо. Благодарим вас за примечание о взаимоблокировках –