org.jgroups.blocks

## Class ReplCache<K,V>

- java.lang.Object
- - org.jgroups.blocks.ReplCache<K,V>

All Implemented Interfaces:
  Cache.ChangeListener, MembershipListener

    public class ReplCache<K,V>
    extends java.lang.Object
    implements MembershipListener, Cache.ChangeListener

Cache which allows for replication factors per data items; the factor determines how many replicas of a key/value we create across the cluster.
See doc/design/ReplCache.txt for details.

Author:
  Bela Ban

### Nested Class Summary

Nested Classes
`static interface` `ReplCache.ChangeListener`
`static class` `ReplCache.ConsistentHashFunction<K>`
`static interface` `ReplCache.HashFunction<K>`
`static interface` `ReplCache.HashFunctionFactory<K>`
`static class` `ReplCache.Value<V>` Uses arrays to store hash values of addresses, plus addresses.

### Field Summary

Fields
`protected static java.util.Map<java.lang.Short,java.lang.reflect.Method>` `methods`

### Constructor Summary

Constructors
Constructor and Description
`ReplCache(java.lang.String props, java.lang.String cluster_name)`

### Method Summary

Methods
`Cache.Value<ReplCache.Value<V>>` `_get(K key)`
`V` `_put(K key, V val, short repl_count, long timeout)`
`V` `_put(K key, V val, short repl_count, long timeout, boolean force)`
`V` `_remove(K key)`
`void` `_removeMany(java.util.Set<K> keys)`
`void` `addChangeListener(ReplCache.ChangeListener l)`
`void` `addMembershipListener(MembershipListener l)`
`void` `block()` Called (usually by the FLUSH protocol), as an indication that the member should stop sending messages.
`void` `changed()`
`void` `clear()` Removes all keys and values in the L2 and L1 caches
`java.lang.String` `dump()`
`V` `get(K key)` Returns the value associated with key
`long` `getCachingTime()`
`long` `getCallTimeout()`
`java.lang.String` `getClusterName()`
`int` `getClusterSize()`
`short` `getDefaultReplicationCount()`
`ReplCache.HashFunction` `getHashFunction()`
`ReplCache.HashFunctionFactory` `getHashFunctionFactory()`
`Cache<K,V>` `getL1Cache()`
`Cache<K,ReplCache.Value<V>>` `getL2Cache()`
`Address` `getLocalAddress()`
`java.lang.String` `getLocalAddressAsString()`
`java.lang.String` `getProps()`
`java.lang.String` `getView()`
`boolean` `isL1CacheEnabled()`
`boolean` `isMigrateData()`
`void` `mcastEntries()`
`void` `put(K key, V val)`
`void` `put(K key, V val, short repl_count, long timeout)` Places a key/value pair into one or several nodes in the cluster.
`void` `put(K key, V val, short repl_count, long timeout, boolean synchronous)` Places a key/value pair into one or several nodes in the cluster.
`void` `remove(K key)` Removes key in all nodes in the cluster, both from their local hashmaps and L1 caches
`void` `remove(K key, boolean synchronous)` Removes key in all nodes in the cluster, both from their local hashmaps and L1 caches
`void` `removeChangeListener(ReplCache.ChangeListener l)`
`void` `removeMembershipListener(MembershipListener l)`
`void` `setCachingTime(long caching_time)`
`void` `setCallTimeout(long call_timeout)`
`void` `setClusterName(java.lang.String cluster_name)`
`void` `setDefaultReplicationCount(short default_replication_count)`
`void` `setHashFunction(ReplCache.HashFunction<K> hash_function)`
`void` `setHashFunctionFactory(ReplCache.HashFunctionFactory<K> hash_function_factory)`
`void` `setL1Cache(Cache<K,V> cache)`
`void` `setL2Cache(Cache<K,ReplCache.Value<V>> cache)`
`void` `setMigrateData(boolean migrate_data)`
`void` `setProps(java.lang.String props)`
`void` `start()`
`void` `stop()`
`void` `suspect(Address suspected_mbr)` Called whenever a member is suspected of having crashed, but has not yet been excluded.
`java.lang.String` `toString()`
`void` `viewAccepted(View new_view)` Called when a change in membership has occurred.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### methods

    protected static java.util.Map<java.lang.Short,java.lang.reflect.Method> methods

### Constructor Detail

#### ReplCache

    public ReplCache(java.lang.String props,
             java.lang.String cluster_name)

### Method Detail

#### getProps

    public java.lang.String getProps()

#### setProps

    public void setProps(java.lang.String props)

#### getLocalAddress

    public Address getLocalAddress()

#### getLocalAddressAsString

    public java.lang.String getLocalAddressAsString()

#### getView

    public java.lang.String getView()

#### getClusterSize

    public int getClusterSize()

#### isL1CacheEnabled

    public boolean isL1CacheEnabled()

#### getClusterName

    public java.lang.String getClusterName()

#### setClusterName

    public void setClusterName(java.lang.String cluster_name)

#### getCallTimeout

    public long getCallTimeout()

#### setCallTimeout

    public void setCallTimeout(long call_timeout)

#### getCachingTime

    public long getCachingTime()

#### setCachingTime

    public void setCachingTime(long caching_time)

#### isMigrateData

    public boolean isMigrateData()

#### setMigrateData

    public void setMigrateData(boolean migrate_data)

#### getDefaultReplicationCount

    public short getDefaultReplicationCount()

#### setDefaultReplicationCount

    public void setDefaultReplicationCount(short default_replication_count)

#### getHashFunction

    public ReplCache.HashFunction getHashFunction()

#### setHashFunction

    public void setHashFunction(ReplCache.HashFunction<K> hash_function)

#### getHashFunctionFactory

    public ReplCache.HashFunctionFactory getHashFunctionFactory()

#### setHashFunctionFactory

    public void setHashFunctionFactory(ReplCache.HashFunctionFactory<K> hash_function_factory)

#### addMembershipListener

    public void addMembershipListener(MembershipListener l)

#### removeMembershipListener

    public void removeMembershipListener(MembershipListener l)

#### addChangeListener

    public void addChangeListener(ReplCache.ChangeListener l)

#### removeChangeListener

    public void removeChangeListener(ReplCache.ChangeListener l)

#### getL1Cache

    public Cache<K,V> getL1Cache()

#### setL1Cache

    public void setL1Cache(Cache<K,V> cache)

#### getL2Cache

    public Cache<K,ReplCache.Value<V>> getL2Cache()

#### setL2Cache

    public void setL2Cache(Cache<K,ReplCache.Value<V>> cache)

#### start

    public void start()
               throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### stop

    public void stop()

#### put

    public void put(K key,
           V val,
           short repl_count,
           long timeout,
           boolean synchronous)

Places a key/value pair into one or several nodes in the cluster.

Parameters:
  `key` - The key, needs to be serializable
  `val` - The value, needs to be serializable
  `repl_count` - Number of replicas. The total number of times a data item should be present in a cluster. Needs to be > 0
  - -1: create key/val in all the nodes in the cluster
  - 1: create key/val only in one node in the cluster, picked by computing the consistent hash of KEY
  - K > 1: create key/val in those nodes in the cluster which match the consistent hashes created for KEY
  `timeout` - Expiration time for key/value.
  - -1: don't cache at all in the L1 cache
  - 0: cache forever, until removed or evicted because we need space for newer elements
  - > 0: number of milliseconds to keep an idle element in the cache. An element is idle when not accessed.
  `synchronous` - Whether or not to block until all cluster nodes have applied the change

#### put

    public void put(K key,
           V val,
           short repl_count,
           long timeout)

Places a key/value pair into one or several nodes in the cluster.

Parameters:
  `key` - The key, needs to be serializable
  `val` - The value, needs to be serializable
  `repl_count` - Number of replicas. The total number of times a data item should be present in a cluster. Needs to be > 0
  - -1: create key/val in all the nodes in the cluster
  - 1: create key/val only in one node in the cluster, picked by computing the consistent hash of KEY
  - K > 1: create key/val in those nodes in the cluster which match the consistent hashes created for KEY
  `timeout` - Expiration time for key/value.
  - -1: don't cache at all in the L1 cache
  - 0: cache forever, until removed or evicted because we need space for newer elements
  - > 0: number of milliseconds to keep an idle element in the cache. An element is idle when not accessed.

#### put

    public void put(K key,
           V val)

#### get

    public V get(K key)

Returns the value associated with key

Parameters:
  `key` - The key, has to be serializable
Returns:
  The value associated with key, or null

#### remove

    public void remove(K key)

Removes key in all nodes in the cluster, both from their local hashmaps and L1 caches

Parameters:
  `key` - The key, needs to be serializable

#### remove

    public void remove(K key,
              boolean synchronous)

Removes key in all nodes in the cluster, both from their local hashmaps and L1 caches

Parameters:
  `key` - The key, needs to be serializable

#### clear

    public void clear()

Removes all keys and values in the L2 and L1 caches

#### _put

    public V _put(K key,
         V val,
         short repl_count,
         long timeout)

#### _put

    public V _put(K key,
         V val,
         short repl_count,
         long timeout,
         boolean force)

Parameters:
  `key` -
  `val` -
  `repl_count` -
  `timeout` -
  `force` - Skips acceptance checking and simply adds the key/value
Returns:

#### _get

    public Cache.Value<ReplCache.Value<V>> _get(K key)

#### _remove

    public V _remove(K key)

#### _removeMany

    public void _removeMany(java.util.Set<K> keys)

#### viewAccepted

    public void viewAccepted(View new_view)

Description copied from interface: `MembershipListener`
Called when a change in membership has occurred. No long running actions or sending of messages should be done in this callback. If some long running action needs to be performed, it should be done in a separate thread.

Note that on reception of the first view (a new member just joined), the channel will not yet be in the connected state. This only happens when `Channel.connect(String)` returns.

Specified by:
  `viewAccepted` in interface `MembershipListener`

#### suspect

    public void suspect(Address suspected_mbr)

Description copied from interface: `MembershipListener`
Called whenever a member is suspected of having crashed, but has not yet been excluded.

Specified by:
  `suspect` in interface `MembershipListener`

#### block

    public void block()

Description copied from interface: `MembershipListener`
Called (usually by the FLUSH protocol), as an indication that the member should stop sending messages. Any messages sent after returning from this callback might get blocked by the FLUSH protocol. When the FLUSH protocol is done, and messages can be sent again, the FLUSH protocol will simply unblock all pending messages. If a callback for unblocking is desired, implement `ExtendedMembershipListener.unblock()`. Note that block() is the equivalent of reception of a BlockEvent in the pull mode.

Specified by:
  `block` in interface `MembershipListener`

#### changed

    public void changed()

Specified by:
  `changed` in interface `Cache.ChangeListener`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### dump

    public java.lang.String dump()

#### mcastEntries

    public void mcastEntries()