public interface AsyncConsistentMap<K,V> extends DistributedPrimitive, Transactional<MapUpdate<K,V>>
This map offers strong read-after-update (where update == create/update/delete) consistency. All operations to the map are serialized and applied in a consistent manner.
The stronger consistency comes at the expense of availability in the event of a network partition. A network partition can be either due to a temporary disruption in network connectivity between participating nodes or due to a node being temporarily down.
All values stored in this map are versioned
and the API
supports optimistic concurrency by allowing conditional updates that take into
consideration the version or value that was previously read.
This map does not allow null values. All methods can throw a ConsistentMapException
(which extends RuntimeException
) to indicate failures.
All methods of this interface return a future
immediately
after a successful invocation. The operation itself is executed asynchronous and
the returned future will be completed
when the
operation finishes.
DistributedPrimitive.Status, DistributedPrimitive.Type
DEFAULT_OPERATION_TIMEOUT_MILLIS, DEFAULT_OPERTATION_TIMEOUT_MILLIS
Modifier and Type | Method and Description |
---|---|
default java.util.concurrent.CompletableFuture<java.lang.Void> |
addListener(MapEventListener<K,V> listener)
Registers the specified listener to be notified whenever the map is updated.
|
java.util.concurrent.CompletableFuture<java.lang.Void> |
addListener(MapEventListener<K,V> listener,
java.util.concurrent.Executor executor)
Registers the specified listener to be notified whenever the map is updated.
|
default ConsistentMap<K,V> |
asConsistentMap()
Returns a new
ConsistentMap that is backed by this instance. |
default ConsistentMap<K,V> |
asConsistentMap(long timeoutMillis)
Returns a new
ConsistentMap that is backed by this instance. |
java.util.concurrent.CompletableFuture<java.lang.Void> |
clear()
Removes all of the mappings from this map (optional operation).
|
default java.util.concurrent.CompletableFuture<Versioned<V>> |
compute(K key,
java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
Attempts to compute a mapping for the specified key and its current mapped value (or
null if there is no current mapping).
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
computeIf(K key,
java.util.function.Predicate<? super V> condition,
java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
If the value for the specified key satisfies a condition, attempts to compute a new
mapping given the key and its current mapped value.
|
default java.util.concurrent.CompletableFuture<Versioned<V>> |
computeIfAbsent(K key,
java.util.function.Function<? super K,? extends V> mappingFunction)
If the specified key is not already associated with a value (or is mapped to null),
attempts to compute its value using the given mapping function and enters it into
this map unless null.
|
default java.util.concurrent.CompletableFuture<Versioned<V>> |
computeIfPresent(K key,
java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
If the value for the specified key is present and non-null, attempts to compute a new
mapping given the key and its current mapped value.
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
containsKey(K key)
Returns true if this map contains a mapping for the specified key.
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
containsValue(V value)
Returns true if this map contains the specified value.
|
default java.util.concurrent.CompletableFuture<java.lang.Void> |
destroy()
Purges state associated with this primitive.
|
java.util.concurrent.CompletableFuture<java.util.Set<java.util.Map.Entry<K,Versioned<V>>>> |
entrySet()
Returns the set of entries contained in this map.
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
get(K key)
Returns the value (and version) to which the specified key is mapped, or null if this
map contains no mapping for the key.
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
getOrDefault(K key,
V defaultValue)
Returns the value (and version) to which the specified key is mapped, or the provided
default value if this map contains no mapping for the key.
|
default java.util.concurrent.CompletableFuture<java.lang.Boolean> |
isEmpty()
Returns true if the map is empty.
|
java.util.concurrent.CompletableFuture<java.util.Set<K>> |
keySet()
Returns a Set view of the keys contained in this map.
|
default DistributedPrimitive.Type |
primitiveType()
Returns the type of primitive.
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
put(K key,
V value)
Associates the specified value with the specified key in this map (optional operation).
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
putAndGet(K key,
V value)
Associates the specified value with the specified key in this map (optional operation).
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
putIfAbsent(K key,
V value)
If the specified key is not already associated with a value associates
it with the given value and returns null, else behaves as a get
returning the existing mapping without making any changes.
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
remove(K key)
Removes the mapping for a key from this map if it is present (optional operation).
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
remove(K key,
long version)
Removes the entry for the specified key only if its current
version in the map is equal to the specified version.
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
remove(K key,
V value)
Removes the entry for the specified key only if it is currently
mapped to the specified value.
|
java.util.concurrent.CompletableFuture<java.lang.Void> |
removeListener(MapEventListener<K,V> listener)
Unregisters the specified listener such that it will no longer
receive map change notifications.
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
replace(K key,
long oldVersion,
V newValue)
Replaces the entry for the specified key only if it is currently mapped to the
specified version.
|
java.util.concurrent.CompletableFuture<Versioned<V>> |
replace(K key,
V value)
Replaces the entry for the specified key only if there is any value
which associated with specified key.
|
java.util.concurrent.CompletableFuture<java.lang.Boolean> |
replace(K key,
V oldValue,
V newValue)
Replaces the entry for the specified key only if currently mapped
to the specified value.
|
java.util.concurrent.CompletableFuture<java.lang.Integer> |
size()
Returns the number of entries in the map.
|
java.util.concurrent.CompletableFuture<java.util.Collection<Versioned<V>>> |
values()
Returns the collection of values (and associated versions) contained in this map.
|
addStatusChangeListener, applicationId, name, removeStatusChangeListener, statusChangeListeners
begin, commit, prepare, prepareAndCommit, rollback
default DistributedPrimitive.Type primitiveType()
DistributedPrimitive
primitiveType
in interface DistributedPrimitive
default java.util.concurrent.CompletableFuture<java.lang.Void> destroy()
DistributedPrimitive
Implementations can override and provide appropriate clean up logic for purging any state state associated with the primitive. Whether modifications made within the destroy method have local or global visibility is left unspecified.
destroy
in interface DistributedPrimitive
CompletableFuture
that is completed when the operation completesjava.util.concurrent.CompletableFuture<java.lang.Integer> size()
default java.util.concurrent.CompletableFuture<java.lang.Boolean> isEmpty()
java.util.concurrent.CompletableFuture<java.lang.Boolean> containsKey(K key)
key
- keyjava.util.concurrent.CompletableFuture<java.lang.Boolean> containsValue(V value)
value
- valuejava.util.concurrent.CompletableFuture<Versioned<V>> get(K key)
key
- the key whose associated value (and version) is to be returnedjava.util.concurrent.CompletableFuture<Versioned<V>> getOrDefault(K key, V defaultValue)
key
- the key whose associated value (and version) is to be returneddefaultValue
- the default value to return if the key is not setdefault java.util.concurrent.CompletableFuture<Versioned<V>> computeIfAbsent(K key, java.util.function.Function<? super K,? extends V> mappingFunction)
key
- key with which the specified value is to be associatedmappingFunction
- the function to compute a valuedefault java.util.concurrent.CompletableFuture<Versioned<V>> computeIfPresent(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
key
- key with which the specified value is to be associatedremappingFunction
- the function to compute a valuedefault java.util.concurrent.CompletableFuture<Versioned<V>> compute(K key, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
key
- key with which the specified value is to be associatedremappingFunction
- the function to compute a valuejava.util.concurrent.CompletableFuture<Versioned<V>> computeIf(K key, java.util.function.Predicate<? super V> condition, java.util.function.BiFunction<? super K,? super V,? extends V> remappingFunction)
key
- key with which the specified value is to be associatedcondition
- condition that should evaluate to true for the computation to proceedremappingFunction
- the function to compute a valuejava.util.concurrent.CompletableFuture<Versioned<V>> put(K key, V value)
key
- key with which the specified value is to be associatedvalue
- value to be associated with the specified keyjava.util.concurrent.CompletableFuture<Versioned<V>> putAndGet(K key, V value)
key
- key with which the specified value is to be associatedvalue
- value to be associated with the specified keyjava.util.concurrent.CompletableFuture<Versioned<V>> remove(K key)
key
- key whose value is to be removed from the mapjava.util.concurrent.CompletableFuture<java.lang.Void> clear()
java.util.concurrent.CompletableFuture<java.util.Set<K>> keySet()
java.util.concurrent.CompletableFuture<java.util.Collection<Versioned<V>>> values()
java.util.concurrent.CompletableFuture<java.util.Set<java.util.Map.Entry<K,Versioned<V>>>> entrySet()
java.util.concurrent.CompletableFuture<Versioned<V>> putIfAbsent(K key, V value)
key
- key with which the specified value is to be associatedvalue
- value to be associated with the specified keyjava.util.concurrent.CompletableFuture<java.lang.Boolean> remove(K key, V value)
key
- key with which the specified value is associatedvalue
- value expected to be associated with the specified keyjava.util.concurrent.CompletableFuture<java.lang.Boolean> remove(K key, long version)
key
- key with which the specified version is associatedversion
- version expected to be associated with the specified keyjava.util.concurrent.CompletableFuture<Versioned<V>> replace(K key, V value)
key
- key with which the specified value is associatedvalue
- value expected to be associated with the specified keyjava.util.concurrent.CompletableFuture<java.lang.Boolean> replace(K key, V oldValue, V newValue)
key
- key with which the specified value is associatedoldValue
- value expected to be associated with the specified keynewValue
- value to be associated with the specified keyjava.util.concurrent.CompletableFuture<java.lang.Boolean> replace(K key, long oldVersion, V newValue)
key
- key key with which the specified value is associatedoldVersion
- version expected to be associated with the specified keynewValue
- value to be associated with the specified keydefault java.util.concurrent.CompletableFuture<java.lang.Void> addListener(MapEventListener<K,V> listener)
listener
- listener to notify about map eventsjava.util.concurrent.CompletableFuture<java.lang.Void> addListener(MapEventListener<K,V> listener, java.util.concurrent.Executor executor)
listener
- listener to notify about map eventsexecutor
- executor to use for handling incoming map eventsjava.util.concurrent.CompletableFuture<java.lang.Void> removeListener(MapEventListener<K,V> listener)
listener
- listener to unregisterdefault ConsistentMap<K,V> asConsistentMap()
ConsistentMap
that is backed by this instance.ConsistentMap
instancedefault ConsistentMap<K,V> asConsistentMap(long timeoutMillis)
ConsistentMap
that is backed by this instance.timeoutMillis
- timeout duration for the returned ConsistentMap operationsConsistentMap
instance