/** * Returns there's saved succeed keys */ public boolean hasSucceededKeys() { return this.succeededKeys.size() > 0; }
public void testValueAsObject() throws IOException { VersionedObjectList list = new VersionedObjectList(100, false, false); byte[] normalBytes = "value1".getBytes(); list.addObjectPart("key", normalBytes , false, null); list.addObjectPart("key", "value2", true, null); byte[] serializedObjectBytes = BlobHelper.serializeToBlob("value3"); list.addObjectPart("key", serializedObjectBytes, true, null); list.addExceptionPart("key", new TestException("hello")); list.addObjectPartForAbsentKey("key", null); //Create a clone of the this. VersionedObjectList newList = CopyHelper.copy(list); checkObjectValues(newList); //THIS TEST FAILS! ObjectPartArrayList doesn't //preserve all its state when it is serialized (it loses track of type information //for values of type BYTES by writing the type info as OBJECT). However, //we'll have to leave it to avoid breaking old clients. //create another copy, just to double check // newList = CopyHelper.copy(newList); // // checkObjectValues(newList); }
/** * version tags are gathered from local operations and remote operation * responses. This method gathers all of them and stores them in the * given list. * @param list */ protected void fillVersionedObjectList(VersionedObjectList list) { for (PutAllEntryData entry: this.putAllData) { if (entry.versionTag != null) { list.addKeyAndVersion(entry.key, entry.versionTag); } } }
/** * record all succeeded keys when there are no version results */ public void addKeys(Collection<?> keys) { synchronized(this) { if (this.succeededKeys.getVersionTags().size() > 0) { throw new IllegalStateException("attempt to store versionless keys when there are already versioned results"); } this.succeededKeys.addAllKeys(keys); } }
VersionedObjectList values = new VersionedObjectList(maximumChunkSize, keys == null, region.getAttributes().getConcurrencyChecksEnabled(), requestSerializedValues); try { AuthorizeRequest authzRequest = servConn.getAuthzRequest(); if (values.size() == maximumChunkSize) { values.setKeys(null); sendGetAllResponseChunk(region, values, false, servConn); values.clear(); values.addExceptionPart(key, ex); continue; logger.warn(LocalizedMessage.create(LocalizedStrings.GetAll_0_CAUGHT_THE_FOLLOWING_EXCEPTION_ATTEMPTING_TO_GET_VALUE_FOR_KEY_1, new Object[]{servConn.getName(), key}), ex); values.addExceptionPart(key, ex); continue; } finally { values.addObjectPartForAbsentKey(key, data, versionTag); addedToValues = true; } else { values.addObjectPart(key, data, isObject, versionTag); addedToValues = true; values.setKeys(null); values.release();
if (isDebugEnabled) { logger.debug("putAll in client encountered a PutAllPartialResultException:{}\n. Adjusted keys are: ", e1.getMessage(), proxyResult.getKeys()); final VersionedObjectList succeeded = new VersionedObjectList(map.size(), true, this.concurrencyChecksEnabled); final boolean serverIsVersioned = proxyResult != null && proxyResult.regionIsVersioned() && !isTX() && this.dataPolicy != DataPolicy.EMPTY; if (!serverIsVersioned && !partialResult) { int size = (proxyResult == null)? map.size() : proxyResult.size(); final boolean isVersionedResults; if (proxyResult != null) { iterator = proxyResult.iterator(); isVersionedResults = true; } else {
Map<Object, VersionTag> keyToVersionMap = new HashMap<Object, VersionTag>(successfulOps.size()); successfulOps.clearVersions(); Iterator<Map.Entry<Integer, RemoveAllPRMessage>> itor = prMsgMap.entrySet().iterator(); while (itor.hasNext()) { if (versions.size() > 0) { partialKeys.addKeysAndVersions(versions); versions.saveVersions(keyToVersionMap); } else if (!this.concurrencyChecksEnabled) { // no keys returned if not versioned Set keys = prMsg.getKeys(); for (Iterator it=successfulOps.getKeys().iterator(); it.hasNext(); ) { successfulOps.addVersion(keyToVersionMap.get(it.next()));
@Override protected Object processResponse(final Message msg, final Connection con) throws Exception { final VersionedObjectList result = new VersionedObjectList(); final Exception[] exceptionRef = new Exception[1]; final boolean isDebugEnabled = logger.isDebugEnabled(); if (e.getCause() instanceof PutAllPartialResultException) { PutAllPartialResultException cause = (PutAllPartialResultException)e.getCause(); cause.getSucceededKeysAndVersions().replaceNullIDs(con.getEndpoint().getMemberId()); throw cause; } else { } else { if (result.hasVersions() && result.getKeys().isEmpty()) { if (logger.isTraceEnabled()) { logger.trace("setting keys of response to {}", this.keys); tmpKeys = new ArrayList<Object>(this.keys); result.setKeys(tmpKeys);
values.addObjectPartForAbsentKey(key, ge.value, ge.versionTag); } else { values.addObjectPart(key, ge.value, ge.isObject, ge.versionTag); if (values.size() == BaseCommand.maximumChunkSize) { BaseCommand.sendNewRegisterInterestResponseChunk(this, "keyList", values, false, servConn); values.clear();
public void postRemoveAllFireEvents(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) { if (!this.dataPolicy.withStorage() && this.concurrencyChecksEnabled && op.getBaseEvent().isBridgeEvent()) { // if there is no local storage we need to transfer version information // to the successfulOps list for transmission back to the client successfulOps.clear(); op.fillVersionedObjectList(successfulOps); } Set successfulKeys = new HashSet(successfulOps.size()); for (Object key: successfulOps.getKeys()) { successfulKeys.add(key); } for (Iterator it=op.eventIterator(); it.hasNext(); ) { EntryEventImpl event = (EntryEventImpl)it.next(); if (successfulKeys.contains(event.getKey())) { invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), false /* We must notify gateways inside RegionEntry lock, NOT here, to preserve the order of events sent by gateways for same key*/); } } }
return; VersionedObjectList values = new VersionedObjectList(maximumChunkSize, true, region == null ? true : region.getAttributes() .getConcurrencyChecksEnabled(), serializeValues); updateValues(values, key, data, versionTag); if (values.size() == maximumChunkSize) { values.clear();
/** * Creates a new <code>PutAllPartialResult</code> */ public PutAllPartialResult(int totalMapSize) { this.succeededKeys = new VersionedObjectList(); this.totalMapSize = totalMapSize; }
dpao.addEntry(event, event.getBucketId()); VersionedObjectList successfulPuts = new VersionedObjectList(1, true, true); successfulPuts.addKeyAndVersion(key, tag); try { region.postPutAllSend(dpao, null, successfulPuts);
public static void appendNewRegisterInterestResponseChunkFromLocal(LocalRegion region, VersionedObjectList values, Object riKeys, Set keySet, ServerConnection servConn) throws IOException { Object key = null; EntryEventImpl versionHolder = null; ClientProxyMembershipID requestingClient = servConn == null ? null : servConn.getProxyID(); for (Iterator it = keySet.iterator(); it.hasNext();) { key = it.next(); versionHolder = EntryEventImpl.createVersionTagHolder(); Object value = region.get(key, null, true, true, true, requestingClient, versionHolder, true, false); updateValues(values, key, value, versionHolder.getVersionTag()); if (values.size() == maximumChunkSize) { // Send the chunk and clear the list // values.setKeys(null); // Now we need to send keys too. sendNewRegisterInterestResponseChunk(region, riKeys != null ? riKeys : "ALL_KEYS", values, false, servConn); values.clear(); } } // for }
public void handle(ChunkedMessage cm) throws Exception { Part part = cm.getPart(0); try { Object o = part.getObject(); if (o instanceof Throwable) { String s = "While performing a remote getAll"; exceptionRef[0] = new ServerOperationException(s, (Throwable)o); } else { VersionedObjectList chunk = (VersionedObjectList)o; chunk.replaceNullIDs(con.getEndpoint().getMemberId()); result.addAll(chunk); } } catch(Exception e) { exceptionRef[0] = new ServerOperationException("Unable to deserialize value" , e); } } });
values.addObjectPartForAbsentKey(key, value, versionTag); } else { values.addObjectPart(key, value, isObject, versionTag);
if (partObj instanceof VersionedObjectList) { if (serverEntries == null) { serverEntries = new VersionedObjectList(true); ((VersionedObjectList)partObj).replaceNullIDs(con.getEndpoint().getMemberId());