Search in sources :

Example 81 with EventID

use of org.apache.geode.internal.cache.EventID in project geode by apache.

the class CacheClientUpdater method handleInvalidate.

/**
   * Invalidate an entry
   * 
   * @param clientMessage message describing the entry
   */
private void handleInvalidate(Message clientMessage) {
    String regionName = null;
    Object key = null;
    final boolean isDebugEnabled = logger.isDebugEnabled();
    try {
        this.isOpCompleted = false;
        // Retrieve the data from the local-invalidate message parts
        if (isDebugEnabled) {
            logger.debug("Received invalidate message of length ({} bytes)", clientMessage.getPayloadLength());
        }
        int partCnt = 0;
        Part regionNamePart = clientMessage.getPart(partCnt++);
        Part keyPart = clientMessage.getPart(partCnt++);
        Part callbackArgumentPart = clientMessage.getPart(partCnt++);
        VersionTag versionTag = (VersionTag) clientMessage.getPart(partCnt++).getObject();
        if (versionTag != null) {
            versionTag.replaceNullIDs((InternalDistributedMember) this.endpoint.getMemberId());
        }
        Part isInterestListPassedPart = clientMessage.getPart(partCnt++);
        Part hasCqsPart = clientMessage.getPart(partCnt++);
        regionName = regionNamePart.getString();
        key = keyPart.getStringOrObject();
        Object callbackArgument = callbackArgumentPart.getObject();
        boolean withInterest = (Boolean) isInterestListPassedPart.getObject();
        boolean withCQs = (Boolean) hasCqsPart.getObject();
        if (isDebugEnabled) {
            logger.debug("Invalidating entry for region: {} key: {} callbackArgument: {} withInterest={} withCQs={} version={}", regionName, key, callbackArgument, withInterest, withCQs, versionTag);
        }
        LocalRegion region = (LocalRegion) this.cacheHelper.getRegion(regionName);
        if (region == null) {
            if (isDebugEnabled && !quitting()) {
                logger.debug("Region named {} does not exist", regionName);
            }
        } else {
            if (region.hasServerProxy() && (withInterest || !withCQs)) {
                try {
                    Part eid = clientMessage.getPart(clientMessage.getNumberOfParts() - 1);
                    EventID eventId = (EventID) eid.getObject();
                    try {
                        region.basicBridgeClientInvalidate(eventId.getDistributedMember(), key, callbackArgument, this.qManager.getState().getProcessedMarker() || !this.isDurableClient, eventId, versionTag);
                    } catch (ConcurrentCacheModificationException ignore) {
                    // allow CQs to be processed
                    }
                    this.isOpCompleted = true;
                    // fix for 36615
                    this.qManager.getState().incrementInvalidatedStats();
                    if (isDebugEnabled) {
                        logger.debug("Invalidated entry for region: {} key: {} callbackArgument: {}", regionName, key, callbackArgument);
                    }
                } catch (EntryNotFoundException ignore) {
                    if (isDebugEnabled && !quitting()) {
                        logger.debug("Already invalidated entry for region: {} key: {} callbackArgument: {}", regionName, key, callbackArgument);
                    }
                    this.isOpCompleted = true;
                }
            }
        }
        if (withCQs) {
            // The client may have been registered to receive invalidates for
            // create and updates operations. Get the actual region operation.
            Part regionOpType = clientMessage.getPart(partCnt++);
            Part numCqsPart = clientMessage.getPart(partCnt++);
            if (isDebugEnabled) {
                logger.debug("Received message has CQ Event. Number of cqs interested in the event : {}", numCqsPart.getInt() / 2);
            }
            partCnt = processCqs(clientMessage, partCnt, numCqsPart.getInt(), regionOpType.getInt(), key, null);
            this.isOpCompleted = true;
        }
    } catch (Exception e) {
        final String message = LocalizedStrings.CacheClientUpdater_THE_FOLLOWING_EXCEPTION_OCCURRED_WHILE_ATTEMPTING_TO_INVALIDATE_ENTRY_REGION_0_KEY_1.toLocalizedString(regionName, key);
        handleException(message, e);
    }
}
Also used : VersionTag(org.apache.geode.internal.cache.versions.VersionTag) EntryNotFoundException(org.apache.geode.cache.EntryNotFoundException) EventID(org.apache.geode.internal.cache.EventID) LocalRegion(org.apache.geode.internal.cache.LocalRegion) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Endpoint(org.apache.geode.cache.client.internal.Endpoint) ConcurrentCacheModificationException(org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException) ServerRefusedConnectionException(org.apache.geode.cache.client.ServerRefusedConnectionException) RegionDestroyedException(org.apache.geode.cache.RegionDestroyedException) EntryNotFoundException(org.apache.geode.cache.EntryNotFoundException) CancelException(org.apache.geode.CancelException) GemFireSecurityException(org.apache.geode.security.GemFireSecurityException) InvalidDeltaException(org.apache.geode.InvalidDeltaException) SSLException(javax.net.ssl.SSLException) AuthenticationFailedException(org.apache.geode.security.AuthenticationFailedException) InterruptedIOException(java.io.InterruptedIOException) SocketException(java.net.SocketException) ConcurrentCacheModificationException(org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException) ConnectException(java.net.ConnectException) IOException(java.io.IOException) AuthenticationRequiredException(org.apache.geode.security.AuthenticationRequiredException)

Example 82 with EventID

use of org.apache.geode.internal.cache.EventID in project geode by apache.

the class ConcurrentSerialGatewaySenderEventProcessor method getHashCode.

private int getHashCode(EntryEventImpl event) {
    // Get the hash code for the event based on the configured order policy
    int eventHashCode = 0;
    switch(this.sender.getOrderPolicy()) {
        case KEY:
            // key ordering
            eventHashCode = event.getKey().hashCode();
            break;
        case THREAD:
            // member id, thread id ordering
            // requires a lot of threads to achieve parallelism
            EventID eventId = event.getEventId();
            byte[] memberId = eventId.getMembershipID();
            long threadId = eventId.getThreadID();
            int memberIdHashCode = Arrays.hashCode(memberId);
            int threadIdHashCode = (int) (threadId ^ (threadId >>> 32));
            eventHashCode = memberIdHashCode + threadIdHashCode;
            if (logger.isDebugEnabled()) {
                logger.debug("{}: Generated hashcode for event with key={}, memberId={}, threadId={}: {}", this, event.getKey(), Arrays.toString(memberId), threadId, eventHashCode);
            }
            break;
        case PARTITION:
            eventHashCode = PartitionRegionHelper.isPartitionedRegion(event.getRegion()) ? PartitionedRegionHelper.getHashKey(event) : // Get the partition for the event
            event.getKey().hashCode();
            // Fall back to key ordering if the region is not partitioned
            if (logger.isDebugEnabled()) {
                logger.debug("{}: Generated partition hashcode for event with key={}: {}", this, event.getKey(), eventHashCode);
            }
            break;
    }
    return eventHashCode;
}
Also used : EventID(org.apache.geode.internal.cache.EventID)

Example 83 with EventID

use of org.apache.geode.internal.cache.EventID in project geode by apache.

the class ConcurrentSerialGatewaySenderEventProcessor method enqueueEvent.

public void enqueueEvent(EnumListenerEvent operation, EntryEvent event, Object substituteValue, int index) throws CacheException, IOException {
    // Get the appropriate gateway
    SerialGatewaySenderEventProcessor serialProcessor = this.processors.get(index);
    if (sender.getOrderPolicy() == OrderPolicy.KEY || sender.getOrderPolicy() == OrderPolicy.PARTITION) {
        // Create copy since the event id will be changed, otherwise the same
        // event will be changed for multiple gateways. Fix for bug 44471.
        @Released EntryEventImpl clonedEvent = new EntryEventImpl((EntryEventImpl) event);
        try {
            EventID originalEventId = clonedEvent.getEventId();
            if (logger.isDebugEnabled()) {
                logger.debug("The original EventId is {}", originalEventId);
            }
            // PARALLEL_THREAD_BUFFER * (index +1) + originalEventId.getThreadID();
            // generating threadId by the algorithm explained above used to clash with
            // fakeThreadId generated by putAll
            // below is new way to generate threadId so that it doesn't clash with
            // any.
            long newThreadId = ThreadIdentifier.createFakeThreadIDForParallelGateway(index, originalEventId.getThreadID(), 0);
            EventID newEventId = new EventID(originalEventId.getMembershipID(), newThreadId, originalEventId.getSequenceID());
            if (logger.isDebugEnabled()) {
                logger.debug("{}: Generated event id for event with key={}, index={}, original event id={}, threadId={}, new event id={}, newThreadId={}", this, event.getKey(), index, originalEventId, originalEventId.getThreadID(), newEventId, newThreadId);
            }
            clonedEvent.setEventId(newEventId);
            serialProcessor.enqueueEvent(operation, clonedEvent, substituteValue);
        } finally {
            clonedEvent.release();
        }
    } else {
        serialProcessor.enqueueEvent(operation, event, substituteValue);
    }
}
Also used : Released(org.apache.geode.internal.offheap.annotations.Released) EntryEventImpl(org.apache.geode.internal.cache.EntryEventImpl) EventID(org.apache.geode.internal.cache.EventID)

Example 84 with EventID

use of org.apache.geode.internal.cache.EventID in project geode by apache.

the class ParallelGatewaySenderEventProcessor method enqueueEvent.

@Override
public void enqueueEvent(EnumListenerEvent operation, EntryEvent event, Object substituteValue) throws IOException, CacheException {
    GatewaySenderEventImpl gatewayQueueEvent = null;
    Region region = event.getRegion();
    if (!(region instanceof DistributedRegion) && ((EntryEventImpl) event).getTailKey() == -1) {
        // Fix for #49081 and EntryDestroyedException in #49367.
        if (logger.isDebugEnabled()) {
            logger.debug("ParallelGatewaySenderEventProcessor not enqueing the following event since tailKey is not set. {}", event);
        }
        return;
    }
    // TODO: Looks like for PDX region bucket id is set to -1.
    boolean queuedEvent = false;
    try {
        EventID eventID = ((EntryEventImpl) event).getEventId();
        // while merging 42004, kept substituteValue as it is(it is barry's
        // change 42466). bucketID is merged with eventID.getBucketID
        gatewayQueueEvent = new GatewaySenderEventImpl(operation, event, substituteValue, true, eventID.getBucketID());
        if (getSender().beforeEnqueue(gatewayQueueEvent)) {
            long start = getSender().getStatistics().startTime();
            try {
                queuedEvent = this.queue.put(gatewayQueueEvent);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            getSender().getStatistics().endPut(start);
        } else {
            if (logger.isDebugEnabled()) {
                logger.debug("The Event {} is filtered.", gatewayQueueEvent);
            }
            getSender().getStatistics().incEventsFiltered();
        }
    } finally {
        if (!queuedEvent) {
            // it was not queued for some reason
            gatewayQueueEvent.release();
        }
    }
}
Also used : EntryEventImpl(org.apache.geode.internal.cache.EntryEventImpl) GatewaySenderEventImpl(org.apache.geode.internal.cache.wan.GatewaySenderEventImpl) LocalRegion(org.apache.geode.internal.cache.LocalRegion) DistributedRegion(org.apache.geode.internal.cache.DistributedRegion) Region(org.apache.geode.cache.Region) PartitionedRegion(org.apache.geode.internal.cache.PartitionedRegion) EventID(org.apache.geode.internal.cache.EventID) DistributedRegion(org.apache.geode.internal.cache.DistributedRegion)

Example 85 with EventID

use of org.apache.geode.internal.cache.EventID in project geode by apache.

the class AbstractGatewaySenderEventProcessor method addPDXEvent.

private List<GatewaySenderEventImpl> addPDXEvent() throws IOException {
    List<GatewaySenderEventImpl> pdxEventsToBeDispatched = new ArrayList<GatewaySenderEventImpl>();
    // getPDXRegion
    InternalCache cache = this.sender.getCache();
    Region<Object, Object> pdxRegion = cache.getRegion(PeerTypeRegistration.REGION_NAME);
    if (rebuildPdxList) {
        pdxEventsMap.clear();
        pdxSenderEventsList.clear();
        rebuildPdxList = false;
    }
    // PDX region
    if (pdxRegion != null && pdxRegion.size() != pdxEventsMap.size()) {
        for (Map.Entry<Object, Object> typeEntry : pdxRegion.entrySet()) {
            if (!pdxEventsMap.containsKey(typeEntry.getKey())) {
                // event should never be off-heap so it does not need to be released
                EntryEventImpl event = EntryEventImpl.create((LocalRegion) pdxRegion, Operation.UPDATE, typeEntry.getKey(), typeEntry.getValue(), null, false, cache.getMyId());
                event.disallowOffHeapValues();
                event.setEventId(new EventID(cache.getInternalDistributedSystem()));
                List<Integer> allRemoteDSIds = new ArrayList<Integer>();
                for (GatewaySender sender : cache.getGatewaySenders()) {
                    allRemoteDSIds.add(sender.getRemoteDSId());
                }
                GatewaySenderEventCallbackArgument geCallbackArg = new GatewaySenderEventCallbackArgument(event.getRawCallbackArgument(), this.sender.getMyDSId(), allRemoteDSIds);
                event.setCallbackArgument(geCallbackArg);
                GatewaySenderEventImpl pdxSenderEvent = // OFFHEAP:
                new GatewaySenderEventImpl(EnumListenerEvent.AFTER_UPDATE, event, null);
                // event for
                // pdx type
                // meta data
                // so it
                // should
                // never be
                // off-heap
                pdxEventsMap.put(typeEntry.getKey(), pdxSenderEvent);
                pdxSenderEventsList.add(pdxSenderEvent);
            }
        }
    }
    Iterator<GatewaySenderEventImpl> iterator = pdxSenderEventsList.iterator();
    while (iterator.hasNext()) {
        GatewaySenderEventImpl pdxEvent = iterator.next();
        if (pdxEvent.isAcked) {
            // Since this is acked, it means it has reached to remote site.Dont add
            // to pdxEventsToBeDispatched
            iterator.remove();
            continue;
        }
        if (pdxEvent.isDispatched) {
            // containing this event.Dont add to pdxEventsToBeDispatched
            continue;
        }
        pdxEventsToBeDispatched.add(pdxEvent);
    }
    if (!pdxEventsToBeDispatched.isEmpty() && logger.isDebugEnabled()) {
        logger.debug("List of PDX Event to be dispatched : {}", pdxEventsToBeDispatched);
    }
    // add all these pdx events before filtered events
    return pdxEventsToBeDispatched;
}
Also used : GatewaySender(org.apache.geode.cache.wan.GatewaySender) EntryEventImpl(org.apache.geode.internal.cache.EntryEventImpl) ArrayList(java.util.ArrayList) InternalCache(org.apache.geode.internal.cache.InternalCache) EventID(org.apache.geode.internal.cache.EventID) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Aggregations

EventID (org.apache.geode.internal.cache.EventID)147 Test (org.junit.Test)66 ClientSubscriptionTest (org.apache.geode.test.junit.categories.ClientSubscriptionTest)60 IntegrationTest (org.apache.geode.test.junit.categories.IntegrationTest)58 IOException (java.io.IOException)41 Map (java.util.Map)33 CacheException (org.apache.geode.cache.CacheException)31 Conflatable (org.apache.geode.internal.cache.Conflatable)29 LocalRegion (org.apache.geode.internal.cache.LocalRegion)23 RegionDestroyedException (org.apache.geode.cache.RegionDestroyedException)20 HashMap (java.util.HashMap)16 Part (org.apache.geode.internal.cache.tier.sockets.Part)16 ByteBuffer (java.nio.ByteBuffer)14 Iterator (java.util.Iterator)14 List (java.util.List)14 LinkedHashMap (java.util.LinkedHashMap)13 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)13 EntryEventImpl (org.apache.geode.internal.cache.EntryEventImpl)13 AuthorizeRequest (org.apache.geode.internal.security.AuthorizeRequest)13 ConcurrentMap (java.util.concurrent.ConcurrentMap)12