private void initializeOperationDetail(Operation operation) { if (operation.isLocalLoad()) { operationDetail = OP_DETAIL_LOCAL_LOAD; } else if (operation.isNetLoad()) { operationDetail = OP_DETAIL_NET_LOAD; } else if (operation.isPutAll()) { operationDetail = OP_DETAIL_PUTALL; } else if (operation.isRemoveAll()) { operationDetail = OP_DETAIL_REMOVEALL; } else { operationDetail = OP_DETAIL_NONE; } }
@Override public void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws EntryNotFoundException { // logger.debug("DistTXStateOnCoordinator.destroyExistingEntry", new Throwable()); super.destroyExistingEntry(event, cacheWrite, expectedOldValue); // removeAll event is already added in postRemoveAll, don't add individual // events from the removeAll operation again if (!event.getOperation().isRemoveAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } }
@Override public void destroyOnRemote(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue) throws DataLocationException { // logger.debug("DistTXStateOnCoordinator.destroyOnRemote", new Throwable()); super.destroyOnRemote(event, cacheWrite, expectedOldValue); // removeAll event is already added in postRemoveAll, don't add individual // events from the removeAll operation again if (!event.getOperation().isRemoveAll()) { addPrimaryTransactionalOperations(new DistTxEntryEvent(event)); } }
protected boolean needWriteLock(EntryEventImpl event) { return !(event.isOriginRemote() || event.isNetSearch() || event.getOperation().isLocal() || event.getOperation().isPutAll() || event.getOperation().isRemoveAll() || (event.isExpiration() && isEntryEvictDestroyEnabled() || event.isPendingSecondaryExpireDestroy())); }
protected void distributeDestroyOperation(EntryEventImpl event) { long token = -1; DestroyOperation op = null; try { if (logger.isTraceEnabled(LogMarker.DM_VERBOSE)) { logger.trace(LogMarker.DM_VERBOSE, "BR.basicDestroy: this cache has already seen this event {}", event); } if (!event.isOriginRemote() && getBucketAdvisor().isPrimary()) { if (event.isBulkOpInProgress()) { // consolidate the DestroyOperation for each entry into a RemoveAllMessage event.getRemoveAllOperation().addEntry(event, this.getId()); } else { // This cache has processed the event, forward operation // and event messages to backup buckets // before distribute: BR's destroy, not to trigger callback here event.setOldValueFromRegion(); op = new DestroyOperation(event); token = op.startOperation(); } } if (!event.getOperation().isRemoveAll()) { // removeAll will invoke listeners later event.invokeCallbacks(this, true, false); } } finally { if (op != null) { op.endOperation(token); } } }
/** * @return true if destroy was done */ public boolean destroy(EntryEventImpl event, boolean cacheWrite, boolean originRemote) throws CacheWriterException, EntryNotFoundException, TimeoutException { InternalRegion internalRegion = event.getRegion(); CacheWriter cWriter = internalRegion.basicGetWriter(); byte advisedOp = adviseOp((cacheWrite ? OP_D_DESTROY : OP_L_DESTROY), event); if (cWriter != null && cacheWrite && !event.inhibitAllNotifications()) { boolean oldOriginRemote = event.isOriginRemote(); if (event.hasClientOrigin() || originRemote) { event.setOriginRemote(true); } cWriter.beforeDestroy(event); event.setOriginRemote(oldOriginRemote); } if (advisedOp != OP_NULL) { this.bulkOp = event.getOperation().isRemoveAll(); if (cacheWrite) { performOp(advisedOp, event); this.destroy = DESTROY_DISTRIBUTED; } else { performOp(advisedOp, event); if (this.destroy != DESTROY_DISTRIBUTED) { this.destroy = DESTROY_LOCAL; } } } return true; }
@Override public boolean hasSeenEvent(EntryEventImpl event) { boolean isDuplicate = false; isDuplicate = getEventTracker().hasSeenEvent(event); if (isDuplicate) { markEventAsDuplicate(event); } else { // bug #48205 - a retried PR operation may already have a version assigned to it // in another VM if (event.isPossibleDuplicate() && event.getRegion().getConcurrencyChecksEnabled() && event.getVersionTag() == null && event.getEventId() != null) { boolean isBulkOp = event.getOperation().isPutAll() || event.getOperation().isRemoveAll(); VersionTag tag = FindVersionTagOperation.findVersionTag(event.getRegion(), event.getEventId(), isBulkOp); event.setVersionTag(tag); } } return isDuplicate; }
@Override public void recordEvent(InternalCacheEvent event) { EventID eventID = event.getEventId(); if (ignoreEvent(event, eventID)) { return; // not tracked } LocalRegion lr = (LocalRegion) event.getRegion(); ThreadIdentifier membershipID = createThreadIDFromEvent(eventID); VersionTag tag = null; if (lr.getServerProxy() == null) { tag = event.getVersionTag(); RegionVersionVector v = ((LocalRegion) event.getRegion()).getVersionVector(); canonicalizeIDs(tag, v); } EventSequenceNumberHolder newEvh = new EventSequenceNumberHolder(eventID.getSequenceID(), tag); if (logger.isTraceEnabled()) { logger.trace("region event tracker recording {}", event); } recordSequenceNumber(membershipID, newEvh); // If this is a bulkOp, and concurrency checks are enabled, we need to // save the version tag in case we retry. // Make recordBulkOp version tag after recordSequenceNumber, so that recordBulkOpStart // in a retry bulk op would not incorrectly remove the saved version tag in // recordedBulkOpVersionTags if (lr.getConcurrencyChecksEnabled() && (event.getOperation().isPutAll() || event.getOperation().isRemoveAll()) && lr.getServerProxy() == null) { recordBulkOpEvent(event, membershipID); } }
if (dtop.op.isRemoveAll()) { assert (dtop.getRemoveAllOperation() != null);
if (dtop.op.isRemoveAll()) { assert (dtop.getRemoveAllOperation() != null);
/** * Check REMOVEALL Operation. */ @Test public void testREMOVEALL() { Operation op = Operation.REMOVEALL_DESTROY; assertFalse(op.isCreate()); assertFalse(op.isUpdate()); assertFalse(op.isInvalidate()); assertTrue(op.isDestroy()); assertTrue(op.isRemoveAll()); assertFalse(op.isPutAll()); assertFalse(op.isRegionInvalidate()); assertFalse(op.isRegionDestroy()); assertFalse(op.isRegion()); assertFalse(op.isLocal()); assertTrue(op.isDistributed()); assertTrue(op.isEntry()); assertFalse(op.isExpiration()); assertFalse(op.isLocalLoad()); assertFalse(op.isNetLoad()); assertFalse(op.isLoad()); assertFalse(op.isNetSearch()); assertFalse(op.isClose()); assertFalse(op.isClear()); }