HI  Alex,

I am not able to reproduce this issue - we have seen it happening a few
times in our test env. though. 

I am trying to go through logs and code to understand how it can happen. 


It looks like all the local listeners for this cache( about 6 of them ) 
have received the 'untransformed' entry  that should have ideally been not
received when this situation occurred. The local listeners for all the 6 of
them have printed the evt. 

What has been observed for the CQ that has received this event incorrectly:
a. On the server logs, the remote filter says that the event entry has not
passed the filter
b. No logs for the remote transformer are printed.
c. The local listener has received the 'untransformed' entry


On the CacheContinuousQueryHandler , 
    private void onEntryUpdate(CacheContinuousQueryEvent<K, V> evt,
        boolean notify, boolean loc, boolean recordIgniteEvt) {

I see these lines : 
1.            if (loc) {
2.                if (!locOnly) {
3.                    Collection<CacheEntryEvent&lt;? extends K, ? extends
V>> evts = handleEvent(ctx, entry);

4.                    notifyLocalListener(evts, trans);

5.                    if (!internal && !skipPrimaryCheck)
6.                       
sendBackupAcknowledge(ackBuf.onAcknowledged(entry), routineId, ctx);
7.                }
8.                else {
9.                    if (!entry.isFiltered())
10.                        notifyLocalListener(F.<CacheEntryEvent&lt;?
extends K, ? extends V>>asList(evt), trans);
11.                }
12.            }
13.            else {
14.                if (!entry.isFiltered()) {
15.                    if (trans != null)
16.                        entry = transformToEntry(trans, evt);

17.                    prepareEntry(cctx, nodeId, entry);
18.                }

19.                Object entryOrList = handleEntry(cctx, entry);

20.                if (entryOrList != null) {
21.                    if (log.isDebugEnabled())
22.                        log.debug("Send the following event to listener:
" + entryOrList);

23.                    ctx.continuous().addNotification(nodeId, routineId,
entryOrList, topic, sync, true);
24.                }
            }


If entry.isFiltered() returns false as per line 14 above, the remote
transformer for the entry is not executed. However the entry is processed on 
line 19 .
 What does handleEntry do ?

I noticed that every update notification is sent to all locallisteners
regardless of whether the entry is filtered or not . 

On the locallistener, if entry.isFiltered() returns false, the entry is
picked up and the local listener is called .

Kindly confirm my understanding .

regards,
Veena





--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to