Class AbstractReplicatedMap<K,​V>

    • Field Detail

      • DEFAULT_INITIAL_CAPACITY

        public static final int DEFAULT_INITIAL_CAPACITY
        The default initial capacity - MUST be a power of two.
        See Also:
        Constant Field Values
      • DEFAULT_LOAD_FACTOR

        public static final float DEFAULT_LOAD_FACTOR
        The load factor used when none specified in constructor.
        See Also:
        Constant Field Values
      • rpcTimeout

        protected transient long rpcTimeout
        Timeout for RPC messages, how long we will wait for a reply
      • channel

        protected transient Channel channel
        Reference to the channel for sending messages
      • rpcChannel

        protected transient RpcChannel rpcChannel
        The RpcChannel to send RPC messages through
      • mapContextName

        protected transient byte[] mapContextName
        The Map context name makes this map unique, this allows us to have more than one map shared through one channel
      • stateTransferred

        protected transient boolean stateTransferred
        Has the state been transferred
      • stateMutex

        protected final transient java.lang.Object stateMutex
        Simple lock object for transfers
      • mapMembers

        protected final transient java.util.HashMap<Member,​java.lang.Long> mapMembers
        A list of members in our map
      • channelSendOptions

        protected transient int channelSendOptions
        Our default send options
      • externalLoaders

        protected transient java.lang.ClassLoader[] externalLoaders
        External class loaders if serialization and deserialization is to be performed successfully.
      • currentNode

        protected transient int currentNode
        The node we are currently backing up data to, this index will rotate on a round robin basis
      • accessTimeout

        protected transient long accessTimeout
        Since the map keeps internal membership this is the timeout for a ping message to be responded to If a remote map doesn't respond within this timeframe, its considered dead.
      • mapname

        protected transient java.lang.String mapname
        Readable string of the mapContextName value
    • Constructor Detail

      • AbstractReplicatedMap

        public AbstractReplicatedMap​(AbstractReplicatedMap.MapOwner owner,
                                     Channel channel,
                                     long timeout,
                                     java.lang.String mapContextName,
                                     int initialCapacity,
                                     float loadFactor,
                                     int channelSendOptions,
                                     java.lang.ClassLoader[] cls,
                                     boolean terminate)
        Creates a new map.
        Parameters:
        owner - The map owner
        channel - The channel to use for communication
        timeout - long - timeout for RPC messages
        mapContextName - String - unique name for this map, to allow multiple maps per channel
        initialCapacity - int - the size of this map, see HashMap
        loadFactor - float - load factor, see HashMap
        channelSendOptions - Send options
        cls - - a list of classloaders to be used for deserialization of objects.
        terminate - - Flag for whether to terminate this map that failed to start.
    • Method Detail

      • getStateMessageType

        protected abstract int getStateMessageType()
      • getReplicateMessageType

        protected abstract int getReplicateMessageType()
      • wrap

        protected Member[] wrap​(Member m)
        Helper methods, wraps a single member in an array
        Parameters:
        m - Member
        Returns:
        Member[]
      • init

        protected void init​(AbstractReplicatedMap.MapOwner owner,
                            Channel channel,
                            java.lang.String mapContextName,
                            long timeout,
                            int channelSendOptions,
                            java.lang.ClassLoader[] cls,
                            boolean terminate)
        Initializes the map by creating the RPC channel, registering itself as a channel listener This method is also responsible for initiating the state transfer
        Parameters:
        owner - Object
        channel - Channel
        mapContextName - String
        timeout - long
        channelSendOptions - int
        cls - ClassLoader[]
        terminate - - Flag for whether to terminate this map that failed to start.
      • ping

        protected void ping​(long timeout)
                     throws ChannelException
        Sends a ping out to all the members in the cluster, not just map members that this map is alive.
        Parameters:
        timeout - long
        Throws:
        ChannelException - Send error
      • memberAlive

        protected void memberAlive​(Member member)
        We have received a member alive notification
        Parameters:
        member - Member
      • broadcast

        protected void broadcast​(int msgtype,
                                 boolean rpc)
                          throws ChannelException
        Helper method to broadcast a message to all members in a channel
        Parameters:
        msgtype - int
        rpc - boolean
        Throws:
        ChannelException - Send error
      • breakdown

        public void breakdown()
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface ChannelListener
        Specified by:
        hashCode in interface java.util.Map<K,​V>
        Overrides:
        hashCode in class java.lang.Object
        Returns:
        int
        See Also:
        Object.hashCode()
      • equals

        public boolean equals​(java.lang.Object o)
        Specified by:
        equals in interface ChannelListener
        Specified by:
        equals in interface java.util.Map<K,​V>
        Overrides:
        equals in class java.lang.Object
        Parameters:
        o - Object
        Returns:
        boolean
        See Also:
        Object.equals(Object)
      • getMapMembers

        public Member[] getMapMembers​(java.util.HashMap<Member,​java.lang.Long> members)
      • getMapMembers

        public Member[] getMapMembers()
      • getMapMembersExcl

        public Member[] getMapMembersExcl​(Member[] exclude)
      • replicate

        public void replicate​(java.lang.Object key,
                              boolean complete)
        Replicates any changes to the object since the last time The object has to be primary, ie, if the object is a proxy or a backup, it will not be replicated
        Parameters:
        key - The object to replicate
        complete - - if set to true, the object is replicated to its backup if set to false, only objects that implement ReplicatedMapEntry and the isDirty() returns true will be replicated
      • replicate

        public void replicate​(boolean complete)
        This can be invoked by a periodic thread to replicate out any changes. For maps that don't store objects that implement ReplicatedMapEntry, this method should be used infrequently to avoid large amounts of data transfer
        Parameters:
        complete - boolean
      • transferState

        public void transferState()
      • replyRequest

        public java.io.Serializable replyRequest​(java.io.Serializable msg,
                                                 Member sender)
        Description copied from interface: RpcCallback
        Allows sending a response to a received message.
        Specified by:
        replyRequest in interface RpcCallback
        Parameters:
        msg - Serializable
        sender - Member
        Returns:
        Serializable - null if no reply should be sent
      • leftOver

        public void leftOver​(java.io.Serializable msg,
                             Member sender)
        If the reply has already been sent to the requesting thread, the rpc callback can handle any data that comes in after the fact.
        Specified by:
        leftOver in interface RpcCallback
        Parameters:
        msg - Serializable
        sender - Member
      • messageReceived

        public void messageReceived​(java.io.Serializable msg,
                                    Member sender)
        Description copied from interface: ChannelListener
        Receive a message from the channel
        Specified by:
        messageReceived in interface ChannelListener
        Parameters:
        msg - Serializable
        sender - - the source of the message
      • accept

        public boolean accept​(java.io.Serializable msg,
                              Member sender)
        Description copied from interface: ChannelListener
        Invoked by the channel to determine if the listener will process this message or not.
        Specified by:
        accept in interface ChannelListener
        Parameters:
        msg - Serializable
        sender - Member
        Returns:
        boolean
      • mapMemberAdded

        public void mapMemberAdded​(Member member)
      • getNextBackupIndex

        public int getNextBackupIndex()
      • getNextBackupNode

        public Member getNextBackupNode()
      • heartbeat

        public void heartbeat()
        Description copied from interface: Heartbeat
        Heartbeat invocation for resources cleanup etc
        Specified by:
        heartbeat in interface Heartbeat
      • remove

        public V remove​(java.lang.Object key)
        Removes an object from this map, it will also remove it from
        Specified by:
        remove in interface java.util.Map<K,​V>
        Parameters:
        key - Object
        Returns:
        Object
      • remove

        public V remove​(java.lang.Object key,
                        boolean notify)
      • get

        public V get​(java.lang.Object key)
        Specified by:
        get in interface java.util.Map<K,​V>
      • printMap

        protected void printMap​(java.lang.String header)
      • containsKey

        public boolean containsKey​(java.lang.Object key)
        Returns true if the key has an entry in the map. The entry can be a proxy or a backup entry, invoking get(key) will make this entry primary for the group
        Specified by:
        containsKey in interface java.util.Map<K,​V>
        Parameters:
        key - Object
        Returns:
        boolean
      • put

        public V put​(K key,
                     V value)
        Specified by:
        put in interface java.util.Map<K,​V>
      • put

        public V put​(K key,
                     V value,
                     boolean notify)
      • putAll

        public void putAll​(java.util.Map<? extends K,​? extends V> m)
        Copies all values from one map to this instance
        Specified by:
        putAll in interface java.util.Map<K,​V>
        Parameters:
        m - Map
      • clear

        public void clear()
        Specified by:
        clear in interface java.util.Map<K,​V>
      • clear

        public void clear​(boolean notify)
      • containsValue

        public boolean containsValue​(java.lang.Object value)
        Specified by:
        containsValue in interface java.util.Map<K,​V>
      • entrySetFull

        public java.util.Set<java.util.Map.Entry<K,​AbstractReplicatedMap.MapEntry<K,​V>>> entrySetFull()
        Returns the entire contents of the map Map.Entry.getValue() will return a LazyReplicatedMap.MapEntry object containing all the information about the object.
        Returns:
        Set
      • keySetFull

        public java.util.Set<K> keySetFull()
      • sizeFull

        public int sizeFull()
      • entrySet

        public java.util.Set<java.util.Map.Entry<K,​V>> entrySet()
        Specified by:
        entrySet in interface java.util.Map<K,​V>
      • keySet

        public java.util.Set<K> keySet()
        Specified by:
        keySet in interface java.util.Map<K,​V>
      • size

        public int size()
        Specified by:
        size in interface java.util.Map<K,​V>
      • isEmpty

        public boolean isEmpty()
        Specified by:
        isEmpty in interface java.util.Map<K,​V>
      • values

        public java.util.Collection<V> values()
        Specified by:
        values in interface java.util.Map<K,​V>
      • getChannel

        public Channel getChannel()
      • getMapContextName

        public byte[] getMapContextName()
      • getRpcChannel

        public RpcChannel getRpcChannel()
      • getRpcTimeout

        public long getRpcTimeout()
      • getStateMutex

        public java.lang.Object getStateMutex()
      • isStateTransferred

        public boolean isStateTransferred()
      • getExternalLoaders

        public java.lang.ClassLoader[] getExternalLoaders()
      • getChannelSendOptions

        public int getChannelSendOptions()
      • getAccessTimeout

        public long getAccessTimeout()
      • setExternalLoaders

        public void setExternalLoaders​(java.lang.ClassLoader[] externalLoaders)
      • setChannelSendOptions

        public void setChannelSendOptions​(int channelSendOptions)
      • setAccessTimeout

        public void setAccessTimeout​(long accessTimeout)