Search in sources :

Example 51 with Part

use of org.apache.geode.internal.cache.tier.sockets.Part in project geode by apache.

the class CqServiceImpl method invokeListeners.

private void invokeListeners(String cqName, ClientCQImpl cQuery, CqEventImpl cqEvent, Object[] fullValue) {
    if (!cQuery.isRunning() || cQuery.getCqAttributes() == null) {
        return;
    }
    // invoke CQ Listeners.
    CqListener[] cqListeners = cQuery.getCqAttributes().getCqListeners();
    final boolean isDebugEnabled = logger.isDebugEnabled();
    if (isDebugEnabled) {
        logger.debug("Invoking CQ listeners for {}, number of listeners : {} cqEvent : {}", cqName, cqListeners.length, cqEvent);
    }
    for (int lCnt = 0; lCnt < cqListeners.length; lCnt++) {
        try {
            // by the CqAttributeMutator.
            if (cqListeners[lCnt] != null) {
                cQuery.getVsdStats().incNumCqListenerInvocations();
                try {
                    if (cqEvent.getThrowable() != null) {
                        cqListeners[lCnt].onError(cqEvent);
                    } else {
                        cqListeners[lCnt].onEvent(cqEvent);
                    }
                } catch (InvalidDeltaException ide) {
                    if (isDebugEnabled) {
                        logger.debug("CqService.dispatchCqListeners(): Requesting full value...");
                    }
                    Part result = (Part) GetEventValueOp.executeOnPrimary(cqEvent.getQueueManager().getPool(), cqEvent.getEventID(), null);
                    Object newVal = result.getObject();
                    if (result == null || newVal == null) {
                        if (!cache.getCancelCriterion().isCancelInProgress()) {
                            Exception ex = new Exception("Failed to retrieve full value from server for eventID " + cqEvent.getEventID());
                            logger.warn(LocalizedMessage.create(LocalizedStrings.CqService_EXCEPTION_IN_THE_CQLISTENER_OF_THE_CQ_CQNAME_0_ERROR__1, new Object[] { cqName, ex.getMessage() }));
                            if (isDebugEnabled) {
                                logger.debug(ex.getMessage(), ex);
                            }
                        }
                    } else {
                        this.cache.getCachePerfStats().incDeltaFullValuesRequested();
                        cqEvent = new CqEventImpl(cQuery, cqEvent.getBaseOperation(), cqEvent.getQueryOperation(), cqEvent.getKey(), newVal, cqEvent.getDeltaValue(), cqEvent.getQueueManager(), cqEvent.getEventID());
                        if (cqEvent.getThrowable() != null) {
                            cqListeners[lCnt].onError(cqEvent);
                        } else {
                            cqListeners[lCnt].onEvent(cqEvent);
                        }
                        if (fullValue != null) {
                            fullValue[0] = newVal;
                        }
                    }
                }
            }
        // Handle client side exceptions.
        } catch (Exception ex) {
            if (!cache.getCancelCriterion().isCancelInProgress()) {
                logger.warn(LocalizedMessage.create(LocalizedStrings.CqService_EXCEPTION_IN_THE_CQLISTENER_OF_THE_CQ_CQNAME_0_ERROR__1, new Object[] { cqName, ex.getMessage() }));
                if (isDebugEnabled) {
                    logger.debug(ex.getMessage(), ex);
                }
            }
        } catch (VirtualMachineError err) {
            SystemFailure.initiateFailure(err);
            // now, so don't let this thread continue.
            throw err;
        } catch (Throwable t) {
            // Whenever you catch Error or Throwable, you must also
            // catch VirtualMachineError (see above). However, there is
            // _still_ a possibility that you are dealing with a cascading
            // error condition, so you also need to check to see if the JVM
            // is still usable:
            SystemFailure.checkFailure();
            logger.warn(LocalizedMessage.create(LocalizedStrings.CqService_RUNTIME_EXCEPTION_IN_THE_CQLISTENER_OF_THE_CQ_CQNAME_0_ERROR__1, new Object[] { cqName, t.getLocalizedMessage() }));
            if (isDebugEnabled) {
                logger.debug(t.getMessage(), t);
            }
        }
    }
}
Also used : InvalidDeltaException(org.apache.geode.InvalidDeltaException) CqListener(org.apache.geode.cache.query.CqListener) Part(org.apache.geode.internal.cache.tier.sockets.Part) TimeoutException(org.apache.geode.cache.TimeoutException) CqExistsException(org.apache.geode.cache.query.CqExistsException) CqException(org.apache.geode.cache.query.CqException) QueryInvalidException(org.apache.geode.cache.query.QueryInvalidException) InvalidDeltaException(org.apache.geode.InvalidDeltaException) RegionNotFoundException(org.apache.geode.cache.query.RegionNotFoundException) CacheLoaderException(org.apache.geode.cache.CacheLoaderException) CqClosedException(org.apache.geode.cache.query.CqClosedException) QueryException(org.apache.geode.cache.query.QueryException)

Aggregations

Part (org.apache.geode.internal.cache.tier.sockets.Part)51 IOException (java.io.IOException)42 AuthorizeRequest (org.apache.geode.internal.security.AuthorizeRequest)33 LocalRegion (org.apache.geode.internal.cache.LocalRegion)26 CachedRegionHelper (org.apache.geode.internal.cache.tier.CachedRegionHelper)22 CacheServerStats (org.apache.geode.internal.cache.tier.sockets.CacheServerStats)21 EventID (org.apache.geode.internal.cache.EventID)16 PartitionedRegion (org.apache.geode.internal.cache.PartitionedRegion)16 ChunkedMessage (org.apache.geode.internal.cache.tier.sockets.ChunkedMessage)15 ByteBuffer (java.nio.ByteBuffer)14 RegionDestroyedException (org.apache.geode.cache.RegionDestroyedException)12 NotAuthorizedException (org.apache.geode.security.NotAuthorizedException)12 Region (org.apache.geode.cache.Region)9 Function (org.apache.geode.cache.execute.Function)8 FunctionException (org.apache.geode.cache.execute.FunctionException)8 ExecuteFunctionOperationContext (org.apache.geode.cache.operations.ExecuteFunctionOperationContext)8 StringId (org.apache.geode.i18n.StringId)8 InternalFunctionInvocationTargetException (org.apache.geode.internal.cache.execute.InternalFunctionInvocationTargetException)8 MemberMappedArgument (org.apache.geode.internal.cache.execute.MemberMappedArgument)8 HandShake (org.apache.geode.internal.cache.tier.sockets.HandShake)8