Search in sources :

Example 1 with Get70

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

the class CacheClientProxy method enqueueInitialValue.

private void enqueueInitialValue(ClientInterestMessageImpl clientInterestMessage, String regionName, Object keyOfInterest) {
    // Get the initial value
    Get70 request = (Get70) Get70.getCommand();
    LocalRegion lr = (LocalRegion) this._cache.getRegion(regionName);
    Get70.Entry entry = request.getValueAndIsObject(lr, keyOfInterest, null, null);
    boolean isObject = entry.isObject;
    byte[] value = null;
    // If the initial value is not null, add it to the client's queue
    if (entry.value != null) {
        if (entry.value instanceof byte[]) {
            value = (byte[]) entry.value;
        } else {
            try {
                value = CacheServerHelper.serialize(entry.value);
            } catch (IOException e) {
                logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_THE_FOLLOWING_EXCEPTION_OCCURRED_0, entry.value), e);
            }
        }
        VersionTag tag = entry.versionTag;
        // Initialize the event id.
        EventID eventId = null;
        if (clientInterestMessage == null) {
            // If the clientInterestMessage is null, create a new event id
            eventId = new EventID(this._cache.getDistributedSystem());
        } else {
            // If the clientInterestMessage is not null, base the event id off its event id to fix
            // GEM-794.
            // This will cause the updateMessage created below to have the same event id as the one
            // created
            // in the primary.
            eventId = new EventID(clientInterestMessage.getEventId(), 1);
        }
        ClientUpdateMessage updateMessage = new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_CREATE, lr, keyOfInterest, value, null, (isObject ? (byte) 0x01 : (byte) 0x00), null, this.proxyID, eventId, tag);
        CacheClientNotifier.routeSingleClientMessage(updateMessage, this.proxyID);
    }
}
Also used : Get70(org.apache.geode.internal.cache.tier.sockets.command.Get70) VersionTag(org.apache.geode.internal.cache.versions.VersionTag) EventID(org.apache.geode.internal.cache.EventID) LocalRegion(org.apache.geode.internal.cache.LocalRegion) IOException(java.io.IOException)

Example 2 with Get70

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

the class PartitionedRegion method handleOldNodes.

/**
   * @return set of bucket-ids that could not be read from.
   */
private Set<Integer> handleOldNodes(HashMap nodeToBuckets, VersionedObjectList values, ServerConnection servConn) throws IOException {
    Set<Integer> failures = new HashSet<Integer>();
    HashMap oldFellas = filterOldMembers(nodeToBuckets);
    for (Iterator it = oldFellas.entrySet().iterator(); it.hasNext(); ) {
        Map.Entry e = (Map.Entry) it.next();
        InternalDistributedMember member = (InternalDistributedMember) e.getKey();
        Object bucketInfo = e.getValue();
        HashMap<Integer, HashSet> bucketKeys = null;
        Set<Integer> buckets = null;
        if (bucketInfo instanceof Set) {
            buckets = (Set<Integer>) bucketInfo;
        } else {
            bucketKeys = (HashMap<Integer, HashSet>) bucketInfo;
            buckets = bucketKeys.keySet();
        }
        for (Integer bucket : buckets) {
            Set keys = null;
            if (bucketKeys == null) {
                try {
                    FetchKeysResponse fkr = FetchKeysMessage.send(member, this, bucket, true);
                    keys = fkr.waitForKeys();
                } catch (ForceReattemptException ignore) {
                    failures.add(bucket);
                }
            } else {
                keys = bucketKeys.get(bucket);
            }
            // TODO (ashetkar) Use single Get70 instance for all?
            for (Object key : keys) {
                Get70 command = (Get70) Get70.getCommand();
                Get70.Entry ge = command.getValueAndIsObject(this, key, null, servConn);
                if (ge.keyNotPresent) {
                    values.addObjectPartForAbsentKey(key, ge.value, ge.versionTag);
                } else {
                    values.addObjectPart(key, ge.value, ge.isObject, ge.versionTag);
                }
                if (values.size() == BaseCommand.MAXIMUM_CHUNK_SIZE) {
                    BaseCommand.sendNewRegisterInterestResponseChunk(this, "keyList", values, false, servConn);
                    values.clear();
                }
            }
        }
    }
    return failures;
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) ResultsSet(org.apache.geode.cache.query.internal.ResultsSet) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) Get70(org.apache.geode.internal.cache.tier.sockets.command.Get70) PREntriesIterator(org.apache.geode.internal.cache.partitioned.PREntriesIterator) Iterator(java.util.Iterator) FetchKeysResponse(org.apache.geode.internal.cache.partitioned.FetchKeysMessage.FetchKeysResponse) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) HashMap(java.util.HashMap) HashSet(java.util.HashSet)

Aggregations

Get70 (org.apache.geode.internal.cache.tier.sockets.command.Get70)2 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 Map (java.util.Map)1 Set (java.util.Set)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 ResultsSet (org.apache.geode.cache.query.internal.ResultsSet)1 InternalDistributedMember (org.apache.geode.distributed.internal.membership.InternalDistributedMember)1 EventID (org.apache.geode.internal.cache.EventID)1 LocalRegion (org.apache.geode.internal.cache.LocalRegion)1 FetchKeysResponse (org.apache.geode.internal.cache.partitioned.FetchKeysMessage.FetchKeysResponse)1 PREntriesIterator (org.apache.geode.internal.cache.partitioned.PREntriesIterator)1 VersionTag (org.apache.geode.internal.cache.versions.VersionTag)1