blob: 1ca3272a610e122a1bbe7b74372590b656d521cf [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.cache;
import java.io.*;
import com.gemstone.gemfire.internal.cache.OpType;
import com.gemstone.gemfire.cache.execute.FunctionService;
/**
* Enumerated type for an event operation.
* This class describes the operation that generated the event.
*
* @author Darrel Schneider
*
*
* @see CacheEvent#getOperation
*
* @since 5.0
*/
public final class Operation implements java.io.Serializable {
private static final long serialVersionUID = -7521751729852504238L;
private static byte nextOrdinal = 0;
private static final Operation[] VALUES = new Operation[55];
private static final byte OP_TYPE_CREATE = OpType.CREATE;
private static final byte OP_TYPE_UPDATE = OpType.UPDATE;
private static final byte OP_TYPE_GET = OpType.GET;
private static final byte OP_TYPE_INVALIDATE = OpType.INVALIDATE;
private static final byte OP_TYPE_GET_ENTRY = OpType.GET_ENTRY;
private static final byte OP_TYPE_CONTAINS_KEY = OpType.CONTAINS_KEY;
private static final byte OP_TYPE_CONTAINS_VALUE = OpType.CONTAINS_VALUE;
private static final byte OP_TYPE_DESTROY = OpType.DESTROY;
private static final byte OP_TYPE_CONTAINS_VALUE_FOR_KEY = OpType.CONTAINS_VALUE_FOR_KEY;
private static final byte OP_TYPE_FUNCTION_EXECUTION = OpType.FUNCTION_EXECUTION;
private static final byte OP_TYPE_CLEAR = OpType.CLEAR;
private static final byte OP_TYPE_MARKER = OpType.MARKER;
private static final byte OP_TYPE_UPDATE_VERSION = OpType.UPDATE_ENTRY_VERSION;
private static final int OP_DETAILS_NONE = 0;
private static final int OP_DETAILS_SEARCH = 1;
private static final int OP_DETAILS_LOCAL_LOAD = 2;
private static final int OP_DETAILS_NET_LOAD = 4;
private static final int OP_DETAILS_EXPIRE = 8;
private static final int OP_DETAILS_EVICT = 16;
private static final int OP_DETAILS_PUTALL = 32;
private static final int OP_DETAILS_GUARANTEES_OLD_VALUE = 64;
private static final int OP_DETAILS_REMOVEALL = 128;
/**
* TAKE NOTE!!!
* The order if the following static constructors calls must be maintained for backwards compatibility.
* Any new operations need to be added to the end.
*/
/**
* A marker operation.
*/
public static final Operation MARKER
= new Operation("MARKER",
false, // isLocal
false, // isRegion
OP_TYPE_MARKER,
OP_DETAILS_NONE
);
/**
* An entry creation.
* @see Region#create(Object, Object)
*/
public static final Operation CREATE
= new Operation("CREATE",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_NONE
);
/**
* An entry creation caused by a putAll invocation
* @see Region#putAll
*/
public static final Operation PUTALL_CREATE
= new Operation("PUTALL_CREATE",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_PUTALL
);
/**
* A 'value for key' operation.
* @see Region#get(Object)
*/
public static final Operation GET
= new Operation("GET",
false, // isLocal
false, // isRegion
OP_TYPE_GET,
OP_DETAILS_NONE
);
/**
* A 'entry for key' operation.
* @see Region#getEntry(Object)
*/
public static final Operation GET_ENTRY
= new Operation("GET_ENTRY",
false, // isLocal
false, // isRegion
OP_TYPE_GET_ENTRY,
OP_DETAILS_NONE
);
/**
* A 'check for existence of key' operation.
* @see Region#containsKey(Object)
*/
public static final Operation CONTAINS_KEY
= new Operation("CONTAINS_KEY",
false, // isLocal
false, // isRegion
OP_TYPE_CONTAINS_KEY,
OP_DETAILS_NONE
);
/**
* A 'check for existence of value' operation.
* @see Region#containsValueForKey(Object)
*/
public static final Operation CONTAINS_VALUE
= new Operation("CONTAINS_VALUE",
false, // isLocal
false, // isRegion
OP_TYPE_CONTAINS_VALUE,
OP_DETAILS_NONE
);
/**
* A 'check for existence of value for given key' operation.
* @see Region#containsValueForKey(Object)
*/
public static final Operation CONTAINS_VALUE_FOR_KEY
= new Operation("CONTAINS_VALUE_FOR_KEY",
false, // isLocal
false, // isRegion
OP_TYPE_CONTAINS_VALUE_FOR_KEY,
OP_DETAILS_NONE
);
/**
* A 'function execution' operation.
* @see FunctionService
*/
public static final Operation FUNCTION_EXECUTION
= new Operation("FUNCTION_EXECUTION",
false, // isLocal
false, // isRegion
OP_TYPE_FUNCTION_EXECUTION,
OP_DETAILS_NONE
);
/**
* An entry creation caused by a netsearch
* @see Region#get(Object)
*/
public static final Operation SEARCH_CREATE
= new Operation("SEARCH_CREATE",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_SEARCH
);
/**
* An entry creation caused by a local loader
* @see Region#get(Object)
* @see CacheLoader
*/
public static final Operation LOCAL_LOAD_CREATE
= new Operation("LOCAL_LOAD_CREATE",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_LOCAL_LOAD
);
/**
* An entry creation caused by a net loader
* @see Region#get(Object)
* @see CacheLoader
*/
public static final Operation NET_LOAD_CREATE
= new Operation("NET_LOAD_CREATE",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_NET_LOAD
);
/**
* An entry update.
* @see Region#put(Object, Object)
*/
public static final Operation UPDATE
= new Operation("UPDATE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_NONE
);
/**
* An entry update caused by a putAll invocation.
* @see Region#putAll
*/
public static final Operation PUTALL_UPDATE
= new Operation("PUTALL_UPDATE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_PUTALL
);
/**
* An entry update caused by a net search.
* @see Region#get(Object)
*/
public static final Operation SEARCH_UPDATE
= new Operation("SEARCH_UPDATE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_SEARCH
);
/**
* An entry update caused by a local load.
* @see Region#get(Object)
* @see CacheLoader
*/
public static final Operation LOCAL_LOAD_UPDATE
= new Operation("LOCAL_LOAD_UPDATE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_LOCAL_LOAD
);
/**
* An entry update caused by a net load.
* @see Region#get(Object)
* @see CacheLoader
*/
public static final Operation NET_LOAD_UPDATE
= new Operation("NET_LOAD_UPDATE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_NET_LOAD
);
/**
* An entry distributed invalidate.
* @see Region#invalidate(Object)
*/
public static final Operation INVALIDATE
= new Operation("INVALIDATE",
false, // isLocal
false, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_NONE
);
/**
* An entry local invalidate.
* @see Region#localInvalidate(Object)
*/
public static final Operation LOCAL_INVALIDATE
= new Operation("LOCAL_INVALIDATE",
true, // isLocal
false, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_NONE
);
/**
* An entry distributed destroy.
* @see Region#destroy(Object)
*/
public static final Operation DESTROY
= new Operation("DESTROY",
false, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* An entry local destroy.
* @see Region#localDestroy(Object)
*/
public static final Operation LOCAL_DESTROY
= new Operation("LOCAL_DESTROY",
true, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* An entry local destroy caused by an eviction.
* @see Region#localDestroy(Object)
*/
public static final Operation EVICT_DESTROY
= new Operation("EVICT_DESTROY",
true, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EVICT
);
/**
* A region load snapshot.
* @see Region#loadSnapshot
*/
public static final Operation REGION_LOAD_SNAPSHOT
= new Operation("REGION_LOAD_SNAPSHOT",
false, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* A region local destroy.
* @see Region#localDestroyRegion()
*/
public static final Operation REGION_LOCAL_DESTROY
= new Operation("REGION_LOCAL_DESTROY",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* A region create.
* @see Region#createSubregion
* @see Cache#createRegion
*/
public static final Operation REGION_CREATE
= new Operation("REGION_CREATE",
true, // isLocal
true, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_NONE
);
/**
* A region close
* @see Region#close
*/
public static final Operation REGION_CLOSE
= new Operation("REGION_CLOSE",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY, // @todo darrel: should close be a destroy?
OP_DETAILS_NONE
);
/**
* A region distributed destroy.
* @see Region#destroyRegion()
*/
public static final Operation REGION_DESTROY
= new Operation("REGION_DESTROY",
false, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* An entry distributed destroy triggered by expiration
* @see RegionAttributes#getEntryTimeToLive
* @see RegionAttributes#getEntryIdleTimeout
* @see ExpirationAction#DESTROY
*/
public static final Operation EXPIRE_DESTROY
= new Operation("EXPIRE_DESTROY",
false, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EXPIRE
);
/**
* An entry local destroy triggered by expiration
* @see RegionAttributes#getEntryTimeToLive
* @see RegionAttributes#getEntryIdleTimeout
* @see ExpirationAction#LOCAL_DESTROY
*/
public static final Operation EXPIRE_LOCAL_DESTROY
= new Operation("EXPIRE_LOCAL_DESTROY",
true, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EXPIRE
);
/**
* An entry distributed invalidate triggered by expiration
* @see RegionAttributes#getEntryTimeToLive
* @see RegionAttributes#getEntryIdleTimeout
* @see ExpirationAction#INVALIDATE
*/
public static final Operation EXPIRE_INVALIDATE
= new Operation("EXPIRE_INVALIDATE",
false, // isLocal
false, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_EXPIRE
);
/**
* An entry local invalidate triggered by expiration
* @see RegionAttributes#getEntryTimeToLive
* @see RegionAttributes#getEntryIdleTimeout
* @see ExpirationAction#LOCAL_INVALIDATE
*/
public static final Operation EXPIRE_LOCAL_INVALIDATE
= new Operation("EXPIRE_LOCAL_INVALIDATE",
true, // isLocal
false, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_EXPIRE
);
/**
* A region distributed destroy triggered by expiration
* @see RegionAttributes#getRegionTimeToLive
* @see RegionAttributes#getRegionIdleTimeout
* @see ExpirationAction#DESTROY
*/
public static final Operation REGION_EXPIRE_DESTROY
= new Operation("REGION_EXPIRE_DESTROY",
false, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EXPIRE
);
/**
* A region local destroy triggered by expiration
* @see RegionAttributes#getRegionTimeToLive
* @see RegionAttributes#getRegionIdleTimeout
* @see ExpirationAction#LOCAL_DESTROY
*/
public static final Operation REGION_EXPIRE_LOCAL_DESTROY
= new Operation("REGION_EXPIRE_LOCAL_DESTROY",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EXPIRE
);
/**
* A region distributed invalidate triggered by expiration
* @see RegionAttributes#getRegionTimeToLive
* @see RegionAttributes#getRegionIdleTimeout
* @see ExpirationAction#INVALIDATE
*/
public static final Operation REGION_EXPIRE_INVALIDATE
= new Operation("REGION_EXPIRE_INVALIDATE",
false, // isLocal
true, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_EXPIRE
);
/**
* A region local invalidate triggered by expiration
* @see RegionAttributes#getRegionTimeToLive
* @see RegionAttributes#getRegionIdleTimeout
* @see ExpirationAction#LOCAL_INVALIDATE
*/
public static final Operation REGION_EXPIRE_LOCAL_INVALIDATE
= new Operation("REGION_EXPIRE_LOCAL_INVALIDATE",
true, // isLocal
true, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_EXPIRE
);
/**
* A region local invalidate.
* @see Region#localInvalidateRegion()
*/
public static final Operation REGION_LOCAL_INVALIDATE
= new Operation("REGION_LOCAL_INVALIDATE",
true, // isLocal
true, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_NONE
);
/**
* A region distributed invalidate.
* @see Region#invalidateRegion()
*/
public static final Operation REGION_INVALIDATE
= new Operation("REGION_INVALIDATE",
false, // isLocal
true, // isRegion
OP_TYPE_INVALIDATE,
OP_DETAILS_NONE
);
/**
* A region clear.
* @see Region#clear
*/
public static final Operation REGION_CLEAR
= new Operation("REGION_CLEAR",
false, // isLocal
true, // isRegion
OP_TYPE_CLEAR,
OP_DETAILS_NONE
);
/**
* A region local clear.
* @see Region#localClear
*/
public static final Operation REGION_LOCAL_CLEAR
= new Operation("REGION_LOCAL_CLEAR",
true, // isLocal
true, // isRegion
OP_TYPE_CLEAR,
OP_DETAILS_NONE
);
/**
* A cache create. Note that this is marked as a region operation.
* @see CacheFactory#create
*/
public static final Operation CACHE_CREATE
= new Operation("CACHE_CREATE",
true, // isLocal
true, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_NONE
);
/**
* A cache close. Note that this is marked as a region operation.
* @see Cache#close()
*/
public static final Operation CACHE_CLOSE
= new Operation("CACHE_CLOSE",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY, // @todo darrel: should close be a destroy?
OP_DETAILS_NONE
);
/**
* A cache close due to being forced out of the distributed system
* by other members. This typically happens
* when a member becomes unresponsive and does not respond to heartbeat requests
* within the <a href="../distributed/DistributedSystem.html#member-timeout">"member-timeout"</a>
* period.<br>
* Note that this is marked as a region operation.
*/
public static final Operation FORCED_DISCONNECT
= new Operation("FORCED_DISCONNECT",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* A region destroy triggered by {@link ResumptionAction#REINITIALIZE}.
* @see ResumptionAction#REINITIALIZE
*/
public static final Operation REGION_REINITIALIZE
= new Operation("REGION_REINITIALIZE",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* A cache close triggered by {@link LossAction#RECONNECT}.
* @see LossAction#RECONNECT
*/
public static final Operation CACHE_RECONNECT
= new Operation("CACHE_RECONNECT",
true, // isLocal
true, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* An atomic entry creation operation
* @see java.util.concurrent.ConcurrentMap#putIfAbsent(Object, Object)
* @since 6.5
*/
public static final Operation PUT_IF_ABSENT
= new Operation("PUT_IF_ABSENT",
false, // isLocal
false, // isRegion
OP_TYPE_CREATE,
OP_DETAILS_GUARANTEES_OLD_VALUE
);
/**
* An atomic update operation
* @see java.util.concurrent.ConcurrentMap#replace(Object, Object, Object)
* @since 6.5
*/
public static final Operation REPLACE
= new Operation("REPLACE",
false, // isLocal
false, // isRegion
OP_TYPE_UPDATE,
OP_DETAILS_GUARANTEES_OLD_VALUE);
/**
* An atomic destroy destroy operation
* @see java.util.concurrent.ConcurrentMap#remove(Object, Object)
* @since 6.5
*/
public static final Operation REMOVE
= new Operation("REMOVE",
false, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_NONE
);
/**
* An internal operation used to update the version stamp of an entry.
*/
public static final Operation UPDATE_VERSION_STAMP
= new Operation("UPDATE_VERSION",
false, //isLocal
false, //isRegion
OP_TYPE_UPDATE_VERSION, //opType
OP_DETAILS_NONE //opDetails
);
/**
* An entry distributed destroy caused by a removeAll.
* @see Region#removeAll(java.util.Collection)
* @since 8.1
*/
public static final Operation REMOVEALL_DESTROY
= new Operation("REMOVEALL_DESTROY",
false, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_REMOVEALL
);
/**
* An entry local destroy caused by an eviction.
* @see Region#localDestroy(Object)
*/
public static final Operation CUSTOM_EVICT_DESTROY
= new Operation("EVICT_DESTROY",
false, // isLocal
false, // isRegion
OP_TYPE_DESTROY,
OP_DETAILS_EVICT
);
/** The name of this mirror type. */
private final transient String name;
/** byte used as ordinal to represent this Operation */
public final byte ordinal;
/** True if a local op; false if distributed op. */
private final transient boolean isLocal;
/** True if a region operation; false if entry op. */
private final transient boolean isRegion;
/** One of the following:
* OP_TYPE_CREATE,
* OP_TYPE_UPDATE,
* OP_TYPE_INVALIDATE,
* OP_TYPE_DESTROY,
* OP_TYPE_CLEAR
*/
private final transient byte opType;
/** One of the following:
* OP_DETAILS_NONE,
* OP_DETAILS_SEARCH,
* OP_DETAILS_LOCAL_LOAD,
* OP_DETAILS_NET_LOAD,
* OP_DETAILS_EXPIRE,
* OP_DETAILS_EVICT
* OP_DETAILS_PUTALL
* OP_DETAILS_GUARANTEES_OLD_VALUE
* OP_DETAILS_REMOVEALL
*/
private final transient int opDetails;
private Object readResolve() throws ObjectStreamException {
return VALUES[ordinal]; // Canonicalize
}
/** Creates a new instance of Operation. */
private Operation(String name, boolean isLocal, boolean isRegion, byte opType, int opDetails) {
this.name = name;
this.isLocal = isLocal;
this.isRegion = isRegion;
this.opType = opType;
this.opDetails = opDetails;
this.ordinal = nextOrdinal++;
VALUES[this.ordinal] = this;
}
/** Return the Operation represented by specified ordinal */
public static Operation fromOrdinal(byte ordinal) {
return VALUES[ordinal];
}
/**
* Returns true if this operation created a new entry.
*/
public boolean isCreate() {
return this.opType == OP_TYPE_CREATE && isEntry();
}
/**
* Returns true if this operation updated an existing entry.
*/
public boolean isUpdate() {
return this.opType == OP_TYPE_UPDATE && isEntry();
}
/**
* Returns true if this operation gets the value for given key.
*/
public boolean isGet() {
return this.opType == OP_TYPE_GET;
}
/**
* Returns true if this operation checks whether given key is present in region.
*/
public boolean isContainsKey() {
return this.opType == OP_TYPE_CONTAINS_KEY;
}
/**
* Returns true if this operation checks whether given value is present in region.
*/
public boolean isContainsValue() {
return this.opType == OP_TYPE_CONTAINS_VALUE;
}
/**
* Returns true if this operation checks whether value is present for the given key.
*/
public boolean isContainsValueForKey() {
return this.opType == OP_TYPE_CONTAINS_VALUE_FOR_KEY;
}
/**
* Returns true if this operation is function execution operation.
*/
public boolean isFunctionExecution() {
return this.opType == OP_TYPE_FUNCTION_EXECUTION;
}
/**
* Returns true if this operation gets the entry for given key.
*/
public boolean isGetEntry() {
return this.opType == OP_TYPE_GET_ENTRY;
}
/**
* Returns true if the operation invalidated an entry.
*/
public boolean isInvalidate() {
return this.opType == OP_TYPE_INVALIDATE && isEntry();
}
/**
* Returns true if the operation destroyed an entry.
*/
public boolean isDestroy() {
return this.opType == OP_TYPE_DESTROY && isEntry();
}
/**
* Returns true if the operation cleared the region.
*/
public boolean isClear() {
return this.opType == OP_TYPE_CLEAR;
}
/**
* Returns true if the operation closed the cache or a region.
*/
public boolean isClose() {
return (this == REGION_CLOSE)
|| (this == CACHE_CLOSE)
|| (this == CACHE_RECONNECT)
|| (this == FORCED_DISCONNECT);
}
/**
* Returns true if this operation was initiated by a putAll.
*/
public boolean isPutAll() {
return (this.opDetails & OP_DETAILS_PUTALL) != 0;
}
/**
* Returns true if this operation was initiated by a removeAll.
* @see Region#removeAll(java.util.Collection)
* @since 8.1
*/
public boolean isRemoveAll() {
return (this.opDetails & OP_DETAILS_REMOVEALL) != 0;
}
/**
* Returns true if the operation invalidated a region.
*/
public boolean isRegionInvalidate() {
return this.opType == OP_TYPE_INVALIDATE && isRegion();
}
/**
* Returns true if the operation destroyed a region.
*/
public boolean isRegionDestroy() {
return this.opType == OP_TYPE_DESTROY && isRegion();
}
/**
* Returns true if the operation applies to the entire region.
*/
public boolean isRegion() {
return this.isRegion;
}
/**
* Returns true if the operation is limited to the local cache.
*/
public boolean isLocal() {
return this.isLocal;
}
/**
* Returns true if the operation may be distributed.
*/
public boolean isDistributed() {
return !isLocal();
}
/**
* Returns true if the operation applies to a single entry.
*/
public boolean isEntry() {
return !isRegion();
}
/** Answer true if this operation resulted from expiration.
* @return true if this operation resulted from expiration
*
*/
public boolean isExpiration() {
return (this.opDetails & OP_DETAILS_EXPIRE) != 0;
}
/**
* Answer true if this operation resulted from eviction
* @return true if this operatino resulted from eviction
*/
public boolean isEviction() {
return (this.opDetails & OP_DETAILS_EVICT) != 0;
}
/** Returns true if this operation included a loader running in this cache.
* Note that this will be true even if the local loader called <code>netSearch</code>.
*
* If this operation is for a Partitioned Region, then true will be returned if the
* loader ran in the same VM as where the data is hosted. If true is returned, and {@link CacheEvent#isOriginRemote}
* is true, it means the data is not hosted locally, but the loader was run local to the data.
*
* @return true if this operation included a local loader execution
*/
public boolean isLocalLoad() {
return (this.opDetails & OP_DETAILS_LOCAL_LOAD) != 0;
}
/** Returns true if this operation included a loader running that was remote
* from the cache that requested it, i.e., a netLoad. Note that the cache
* that requested the netLoad may not be this cache.
* @return true if this operation included a netLoad
*/
public boolean isNetLoad() {
return (this.opDetails & OP_DETAILS_NET_LOAD) != 0;
}
/** Returns true if this operation included running a loader.
* @return true if isLocalLoad or isNetLoad
*/
public boolean isLoad() {
return (this.opDetails & (OP_DETAILS_LOCAL_LOAD|OP_DETAILS_NET_LOAD)) != 0;
}
/** Returns true if this operation included a <code>netSearch</code>. If the <code>netSearch</code>
* was invoked by a loader however, this will return false and <code>isLocalLoad()</code>
* or <code>isNetLoad()</code> will return true instead.
*
* @return true if this operation included a netSearch
*/
public boolean isNetSearch() {
return (this.opDetails & OP_DETAILS_SEARCH) != 0;
}
/**
* Returns true if this operation was a {@link #isNetSearch net search} or a
* {@link #isLoad load}.
* @return true if this operation include a netSearch or any type of load.
*/
public boolean isSearchOrLoad() {
return (this.opDetails & (OP_DETAILS_SEARCH|OP_DETAILS_LOCAL_LOAD|OP_DETAILS_NET_LOAD)) != 0;
}
/**
* Returns true if this operation is a ConcurrentMap operation that
* guarantees the old value to be returned no matter what expense may
* be incurred in doing so.
* @return true if this operation has this guarantee
* @since 6.5
*/
public boolean guaranteesOldValue() {
return (this.opDetails & OP_DETAILS_GUARANTEES_OLD_VALUE) != 0;
}
/**
* Returns the update operation that corresponds to this operation.
* For a create operation the corresponding update op is returned.
* For all other operations <code>this</code> is returned.
*/
public Operation getCorrespondingUpdateOp() {
if (isCreate()) {
switch (this.opDetails) {
case OP_DETAILS_SEARCH:
return Operation.SEARCH_UPDATE;
case OP_DETAILS_LOCAL_LOAD:
return Operation.LOCAL_LOAD_UPDATE;
case OP_DETAILS_NET_LOAD:
return Operation.NET_LOAD_UPDATE;
case OP_DETAILS_PUTALL:
return Operation.PUTALL_UPDATE;
default:
return Operation.UPDATE;
}
} else {
return this;
}
}
/**
* Returns the create operation that corresponds to this operation.
* For an update operation the corresponding create op is returned.
* For all other operations <code>this</code> is returned.
*/
public Operation getCorrespondingCreateOp() {
if (isUpdate()) {
switch (this.opDetails) {
case OP_DETAILS_SEARCH:
return Operation.SEARCH_CREATE;
case OP_DETAILS_LOCAL_LOAD:
return Operation.LOCAL_LOAD_CREATE;
case OP_DETAILS_NET_LOAD:
return Operation.NET_LOAD_CREATE;
case OP_DETAILS_PUTALL:
return Operation.PUTALL_CREATE;
default:
return Operation.CREATE;
}
} else {
return this;
}
}
/** Returns a string representation for this operation.
* @return the name of this operation.
*/
@Override
public String toString() {
return this.name;
}
}