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);
}
}
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;
}
Aggregations