blob: be9665f64e4415659bba498bef62c180f646903b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.internal.cache;
import java.util.Collection;
import java.util.Set;
import org.apache.geode.cache.EntryNotFoundException;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.Region.Entry;
import org.apache.geode.cache.UnsupportedOperationInTransactionException;
import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
import org.apache.geode.internal.offheap.annotations.Retained;
/**
* @since GemFire 6.0tx
*/
public interface InternalDataView {
/**
* @param clientEvent TODO
* @param returnTombstones TODO
* @param retainResult if true then the result may be a retained off-heap reference
* @return the object associated with the key
*/
@Retained
Object getDeserializedValue(KeyInfo keyInfo, LocalRegion localRegion, boolean updateStats,
boolean disableCopyOnRead, boolean preferCD, EntryEventImpl clientEvent,
boolean returnTombstones, boolean retainResult, boolean createIfAbsent);
/**
* @param expectedOldValue TODO
* @throws EntryNotFoundException if the entry is not found in the view
*/
void destroyExistingEntry(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue)
throws EntryNotFoundException;
/**
* Invalidate the entry
*
* @see Region#invalidate(Object)
*/
void invalidateExistingEntry(EntryEventImpl event, boolean invokeCallbacks,
boolean forceNewEntry);
/**
* get the entry count
*
* @return the entry count
*/
int entryCount(LocalRegion localRegion);
Object getValueInVM(KeyInfo keyInfo, LocalRegion localRegion, boolean rememberRead);
/**
* @return true if key exists, false otherwise
*/
boolean containsKey(KeyInfo keyInfo, LocalRegion localRegion);
boolean containsValueForKey(KeyInfo keyInfo, LocalRegion localRegion);
Entry getEntry(KeyInfo keyInfo, LocalRegion localRegion, boolean allowTombstones);
/**
* get entry for the key. Called only on farside.
*
* @return the entry on the remote data store
*/
Entry getEntryOnRemote(KeyInfo key, LocalRegion localRegion, boolean allowTombstones)
throws DataLocationException;
boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue,
boolean requireOldValue, long lastModified, boolean overwriteDestroyed);
/**
* Put or create an entry in the data view.
*
* @param event specifies the new or updated value
* @return true if operation updated existing data, otherwise false
*/
boolean putEntry(EntryEventImpl event, boolean ifNew, boolean ifOld, Object expectedOldValue,
boolean requireOldValue, long lastModified, boolean overwriteDestroyed,
boolean invokeCallbacks, boolean throwConcurrentModification);
/**
* Put or create an entry in the data view. Called only on the farside.
*
* @param event specifies the new or updated value
* @return true if operation updated existing data, otherwise false
*/
boolean putEntryOnRemote(EntryEventImpl event, boolean ifNew, boolean ifOld,
Object expectedOldValue, boolean requireOldValue, long lastModified,
boolean overwriteDestroyed) throws DataLocationException;
/**
* Destroy an entry in the data view. Called only on the farside.
*
* @param cacheWrite TODO
* @throws DataLocationException TODO
*/
void destroyOnRemote(EntryEventImpl event, boolean cacheWrite, Object expectedOldValue)
throws DataLocationException;
/**
* Invalidate an entry in the data view. Called only on farside.
*
*/
void invalidateOnRemote(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry)
throws DataLocationException;
/**
* @return true if statistics should be updated later in a batch (such as a tx commit)
*/
boolean isDeferredStats();
/**
* @param disableCopyOnRead if true then copy on read is disabled for this call
* @param preferCD true if the preferred result form is CachedDeserializable
* @param requestingClient the client making the request, or null if from a server
* @param clientEvent the client's event, if any
* @param returnTombstones TODO
* @return the Object associated with the key
*/
Object findObject(KeyInfo key, LocalRegion r, boolean isCreate, boolean generateCallbacks,
Object value, boolean disableCopyOnRead, boolean preferCD,
ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent,
boolean returnTombstones);
/**
*
* @return an Entry for the key
*/
Object getEntryForIterator(KeyInfo key, LocalRegion currRgn, boolean rememberReads,
boolean allowTombstones);
/**
*
* @return the key for the provided key
*/
Object getKeyForIterator(KeyInfo keyInfo, LocalRegion currRgn, boolean rememberReads,
boolean allowTombstones);
Set getAdditionalKeysForIterator(LocalRegion currRgn);
/**
*
* @return set of keys in the region
*/
Collection<?> getRegionKeysForIteration(LocalRegion currRegion);
/**
*
* @param requestingClient the client that made the request, or null if not from a client
* @param clientEvent the client event, if any
* @param returnTombstones TODO
* @return the serialized value from the cache
*/
Object getSerializedValue(LocalRegion localRegion, KeyInfo key, boolean doNotLockEntry,
ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent,
boolean returnTombstones) throws DataLocationException;
void checkSupportsRegionDestroy() throws UnsupportedOperationInTransactionException;
void checkSupportsRegionInvalidate() throws UnsupportedOperationInTransactionException;
void checkSupportsRegionClear() throws UnsupportedOperationInTransactionException;
/**
* @param allowTombstones whether to include destroyed entries in the result
* @return Set of keys in the given bucket
*/
Set getBucketKeys(LocalRegion localRegion, int bucketId, boolean allowTombstones);
void postPutAll(DistributedPutAllOperation putallOp, VersionedObjectList successfulPuts,
InternalRegion reg);
void postRemoveAll(DistributedRemoveAllOperation op, VersionedObjectList successfulOps,
InternalRegion reg);
Entry accessEntry(KeyInfo keyInfo, LocalRegion localRegion);
void updateEntryVersion(EntryEventImpl event) throws EntryNotFoundException;
}