Апач загорелся.QueryCursor работает без режима транзакции, даже если транзакция напрямую объявлена.Зачем? - PullRequest
0 голосов
/ 19 декабря 2018

QueryCursor работает без режима транзакции, даже если транзакция напрямую объявлена.

Я использую get и put методы и напрямую объявляю транзакцию.Он работает нормально, то есть:

Ignite ignite = ...;
IgniteCache<String, String> cache = ...;
String key = ...;
String val= ...;
try (Transaction tx = ignite.transactions().txStart()) {
    //get and put work within transaction
    cache.get(key);
    cache.put(key, val);
    tx.commit();
    }

Но когда я использую запрос , это работает без транзакции, т.е.

Ignite ignite = ...;
IgniteCache<String, String> cache = ...;
ScanQuery<String, String> query = ...;
try (Transaction tx = ignite.transactions().txStart()) {
    try (QueryCursor<Cache.Entry<String, String>> cursor = cache.query(query)) {
        //query works without transaction 
        Iterator<Cache.Entry<String, String>> iter = cursor.iterator();
        Cache.Entry<String, String> entry = iter.next();
        }
     tx.commit();
} 

Как связать QueryCursor к транзакции?

1 Ответ

0 голосов
/ 19 декабря 2018

Чтобы сделать запросы транзакционными, следует использовать TRANSACTIONAL_SNAPSHOT режим атомарности кэша.Доступно с Ignite 2.7.

См .: https://apacheignite.readme.io/v2.7/docs/multiversion-concurrency-control

...