[
https://issues.apache.org/jira/browse/IGNITE-2590?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Artem Shutak updated IGNITE-2590:
---------------------------------
Description:
IgniteCache.remove() returns {{false}} for LOCAL OFFHEAP_TIERED cache inside
OPTIMISTIC REPEATABLE_READ transaction. But {{cache.get()}} before and after
{{remove}} retuns right values.
{code}
public static void main(String[] args) {
try(Ignite ignite = Ignition.start(new IgniteConfiguration())) {
CacheConfiguration cfg = new CacheConfiguration()
.setName("myCache")
.setCacheMode(LOCAL)
.setAtomicityMode(TRANSACTIONAL)
.setMemoryMode(OFFHEAP_TIERED)
;
IgniteCache cache = ignite.getOrCreateCache(cfg);
final String key = "key1";
TransactionConcurrency concurrency = OPTIMISTIC;
TransactionIsolation isolation = REPEATABLE_READ;
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
cache.put(key, 1);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
Object val = cache.get(key); // Returns 1.
System.out.println("Value: " + val);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
boolean remove = cache.remove(key);
System.out.println("Removed: " + remove);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
Object val = cache.get(key); // Returns null.
System.out.println("Value: " + val);
tx.commit();
}
}
}
{code}
It's corner case. For any other MEMORY_MODE it works.
For any other concurrency or isolation levels it works.
It also works if execute {{cache.get()}} before remove inside transaction.
Test failss for both dynamic and static caches.
was:
IgniteCache.remove() returns {{false}} for LOCAL OFFHEAP_TIERED cache inside
OPTIMISTIC REPEATABLE_READ transaction. But {{cache.get()}} before and after
{{remove}} retuns right values.
{code}
public static void main(String[] args) {
try(Ignite ignite = Ignition.start(new IgniteConfiguration())) {
CacheConfiguration cfg = new CacheConfiguration()
.setName("myCache")
.setCacheMode(LOCAL)
.setAtomicityMode(TRANSACTIONAL)
.setMemoryMode(OFFHEAP_TIERED)
;
IgniteCache cache = ignite.getOrCreateCache(cfg);
final String key = "key1";
TransactionConcurrency concurrency = OPTIMISTIC;
TransactionIsolation isolation = REPEATABLE_READ;
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
cache.put(key, 1);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
Object val = cache.get(key); // Returns 1.
System.out.println("Value: " + val);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
boolean remove = cache.remove(key);
System.out.println("Removed: " + remove);
tx.commit();
}
try (Transaction tx = ignite.transactions().txStart(concurrency,
isolation)) {
Object val = cache.get(key); // Returns null.
System.out.println("Value: " + val);
tx.commit();
}
}
}
{code}
It's corner case. For any other MEMORY_MODE it works.
For any other concurrency or isolation levels it works.
It also works if execute {{cache.get()}} before remove inside transaction.
> IgniteCache.remove() returns false for LOCAL OFFHEAP_TIERED cache inside
> OPTIMISTIC REPEATABLE_READ transaction.
> ----------------------------------------------------------------------------------------------------------------
>
> Key: IGNITE-2590
> URL: https://issues.apache.org/jira/browse/IGNITE-2590
> Project: Ignite
> Issue Type: Bug
> Affects Versions: 1.5.0.final
> Reporter: Artem Shutak
>
> IgniteCache.remove() returns {{false}} for LOCAL OFFHEAP_TIERED cache inside
> OPTIMISTIC REPEATABLE_READ transaction. But {{cache.get()}} before and after
> {{remove}} retuns right values.
> {code}
> public static void main(String[] args) {
> try(Ignite ignite = Ignition.start(new IgniteConfiguration())) {
> CacheConfiguration cfg = new CacheConfiguration()
> .setName("myCache")
> .setCacheMode(LOCAL)
> .setAtomicityMode(TRANSACTIONAL)
> .setMemoryMode(OFFHEAP_TIERED)
> ;
> IgniteCache cache = ignite.getOrCreateCache(cfg);
> final String key = "key1";
> TransactionConcurrency concurrency = OPTIMISTIC;
> TransactionIsolation isolation = REPEATABLE_READ;
> try (Transaction tx = ignite.transactions().txStart(concurrency,
> isolation)) {
> cache.put(key, 1);
> tx.commit();
> }
> try (Transaction tx = ignite.transactions().txStart(concurrency,
> isolation)) {
> Object val = cache.get(key); // Returns 1.
> System.out.println("Value: " + val);
> tx.commit();
> }
> try (Transaction tx = ignite.transactions().txStart(concurrency,
> isolation)) {
> boolean remove = cache.remove(key);
> System.out.println("Removed: " + remove);
> tx.commit();
> }
> try (Transaction tx = ignite.transactions().txStart(concurrency,
> isolation)) {
> Object val = cache.get(key); // Returns null.
> System.out.println("Value: " + val);
> tx.commit();
> }
> }
> }
> {code}
> It's corner case. For any other MEMORY_MODE it works.
> For any other concurrency or isolation levels it works.
> It also works if execute {{cache.get()}} before remove inside transaction.
> Test failss for both dynamic and static caches.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)