Мы пытаемся использовать Gemfire в нашей работе. У нас есть регион, в котором мы храним каждый поступающий запрос, и он проходит свой жизненный цикл (например, состояния A -> B -> C -> D)
Но у нас также есть требование, что нам нужно обновлять состояние до C, только если текущее состояние - B (так как состояние D получает обновленный Async другим процессом). Мы привыкли достигать этого в Кассандре, используя только ключевое слово IF. Ищете что-то похожее в Gemfire. Очевидно, что мы не можем выполнять чтение, проверку состояния и обновление, потому что они не атомарны.
Другой вариант состоял в том, чтобы сделать это, взяв распределенную блокировку, а затем выполнить проверку обновлений, как упомянуто выше. Но этот вариант идет с накладными расходами.
Мы также думали о подключении CacheWriter и проверке состояния в beforeUpdate (..). Но мы узнали, что то, что мы получаем в качестве параметра beforeUpdate, является копией значения, а не действительным значением.
У кого-нибудь есть идеи, как этого добиться атомным способом, который мы можем попробовать?