Hi Stephen, I am not sure how the cq operation is null. I tried to reproduce with a test (not exactly the same and haven't been able to so far). The queries themselves look like they should work. When populating the second region, is the client cq just doing a put back to the server or is it using some other mechanism to update the region? Is there more than 1 client that is updating the region (not sure it would matter, just seeing if there is a chance at a possible version incompatibility). It looks like the server is on 1.9.2?
Anyone else with any ideas, please chime in :-) -Jason On Wed, Apr 8, 2020 at 11:26 PM Chell, Stephen <[email protected]> wrote: > Hi all, > > Has anyone come across the following error before when using continuous > queries? > > java.lang.Throwable: Exception occurred while applying query on a cache > event. > at > org.apache.geode.cache.query.cq.internal.CqEventImpl.setException(CqEventImpl.java:131) > ~[geode-cq-1.9.2.jar!/:na] > at > org.apache.geode.cache.query.cq.internal.CqEventImpl.<init>(CqEventImpl.java:53) > ~[geode-cq-1.9.2.jar!/:na] > at > org.apache.geode.cache.query.cq.internal.CqServiceImpl.dispatchCqListeners(CqServiceImpl.java:960) > ~[geode-cq-1.9.2.jar!/:na] > at > org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater.processCqs(CacheClientUpdater.java:1319) > [geode-core-1.9.2.jar!/:na] > at > org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater.handleUpdate(CacheClientUpdater.java:757) > [geode-core-1.9.2.jar!/:na] > at > org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater.processMessages(CacheClientUpdater.java:1660) > [geode-core-1.9.2.jar!/:na] > at > org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater.run(CacheClientUpdater.java:487) > [geode-core-1.9.2.jar!/:na] > > I have two continuous queries in my app. The first one works, the second > one doesn't. > > The first one is: > SELECT * from /FM_TRADE_EVENTS WHERE tradeAuditAction <> 'MATURE' > It fetches JSON documents that have been serialized as PDX. The onEvent > method in my CqListener implementation is successfully called with events > that look like: > CqEvent [CqName=tradeEventListener; base operation=CREATE; cq > operation=CREATE; key=TRADE-1006; value=PDX[19350515,__GEMFIRE_JSON]{...}] > (I've replaced the JSON document with ... for brevity.) > > The second one selects from a different region: > SELECT * from /FM_TRADE_EVENTS_STATE WHERE subscriberID = 'MIR' AND > status.name = 'Pending' > It fetches objects that were serialized from java POJOs of type > GemfireEventState (a custom type). The onError method (not onEvent) in my > CqListener implementation is called with events that look like: > CqEvent [CqName=tradeEventStateListener; base operation=CREATE; cq > operation=null; key=TRADE-1006:MIR; > value=com.westpac.rdp.event.gemfire.GemfireEventState@2b503086 > [eventKey=TRADE-1006,subscriberID=MIR,status=Pending,errorMessage=<null>]] > ... and they contain a throwable as above. > > It looks like the second query fails because the event has the "cq > operation" field set to null. The question is why is it null? (In the > first one both the base operation and cq operation are CREATE). > > Another piece of info that may be relevant: the region queried by the > second CqListener is populated by the first CqListener > > Any help would be much appreciated! > > Thanks in advance ... > > Stephen > > Confidential communication > Westpac Banking Corporation (ABN 33 007 457 141, AFSL 233714) > Westpac Institutional Bank is a division of Westpac Banking Corporation >
