You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Dmitry Uskov (JIRA)" <ji...@apache.org> on 2018/03/02 10:17:00 UTC
[jira] [Created] (IGNITE-7868) Continuous Query LocalListener on
backup node works unstable
Dmitry Uskov created IGNITE-7868:
------------------------------------
Summary: Continuous Query LocalListener on backup node works unstable
Key: IGNITE-7868
URL: https://issues.apache.org/jira/browse/IGNITE-7868
Project: Ignite
Issue Type: Bug
Affects Versions: 2.3
Reporter: Dmitry Uskov
I have two nodes (*node1* and *node2*) with configuration:
{code:java}
Ignition.start();
ProgramContext.ignite = Ignition.ignite(); //ProgramContext.ignite is public static field
String cacheName = "A-Cache";
CacheConfiguration<CacheKey, CacheValue> cacheConfiguration = new CacheConfiguration<>();
cacheConfiguration.setName(cacheName);
cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
cacheConfiguration.setBackups(1);
IgniteCache<CacheKey, CacheValue> cache = ProgramContext.ignite.getOrCreateCache(cacheConfiguration);
ContinuousQuery<CacheKey, CacheValue> query = new ContinuousQuery<>();
ClusterNode node = ProgramContext.ignite.cluster().localNode();
query.setRemoteFilterFactory((Factory<CacheEntryEventFilter<CacheKey, CacheValue>>) () -> (CacheEntryEventFilter<CacheKey, CacheValue>) event -> {
boolean currentNodeIsPrimary = node.equals(ProgramContext.ignite.cluster().localNode());
boolean eventTypeIsCreated = event.getEventType().equals(javax.cache.event.EventType.CREATED);
return currentNodeIsPrimary && eventTypeIsCreated;
});
query.setLocalListener(cacheEntryEvents -> {
for (CacheEntryEvent<? extends CacheKey, ? extends CacheValue> cacheEntryEvent : cacheEntryEvents) {
System.out.println("CacheEntryUpdatedListener: " + cacheEntryEvent.getKey() + "/" + cacheEntryEvent.getValue());
}
});
cache.query(query);
{code}
CacheKey:
{code:java}
public class CacheKey {
public static final String DEFAULT_AFFINITY_KEY = "cons";
private static String affinityKeyValue = DEFAULT_AFFINITY_KEY;
private String key;
@AffinityKeyMapped
private String affinityKey;
public CacheKey(String key) {
this.key = key;
this.affinityKey = affinityKeyValue; //always DEFAULT_AFFINITY_KEY
}
//... getters/setters and toString()
}{code}
CacheValue:
{code:java}
public class CacheValue {
private String value;
public CacheValue(String value) {
this.value = value;
}
//... getters/setters and toString()
}{code}
I put two values in cache. As affinityKey always equals DAFAULT_AFFINITY_KEY one node (suppose *node1*) is primary for both values. LocalListener has worked twice on *node1*.
Console output:
{noformat}
CacheEntryUpdatedListener: CacheKey{key='node1-0', affinityKey='cons'}/CacheValue{value='node1-0'}
CacheEntryUpdatedListener: CacheKey{key='node1-1', affinityKey='cons'}/CacheValue{value='node1-1'}
{noformat}
Then I stoped it and I saw LocalListener on *node2* has worked once, but I expected LocalListener on *node2* had to work twice.
Console out node1:
{noformat}
[12:36:36] Ignite node stopped OK [uptime=00:00:14.243]{noformat}
Console out node2:
{noformat}
[12:36:36] Topology snapshot [ver=3, servers=1, clients=0, CPUs=4, heap=1.6GB]
CacheEntryUpdatedListener: CacheKey{key='node1-1', affinityKey='cons'}/CacheValue{value='node1-1'}{noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)