com.hazelcast.client.proxy

## Class ClientClusterProxy

- java.lang.Object
- - com.hazelcast.client.proxy.ClientClusterProxy

- All Implemented Interfaces:
    Cluster

      public class ClientClusterProxy
      extends Object
      implements Cluster

  Client implementation of the `Cluster`.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ClientClusterProxy(com.hazelcast.client.spi.impl.ClientClusterServiceImpl clusterService)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `String` | `addMembershipListener(MembershipListener listener)` Adds MembershipListener to listen for membership updates.
    `void` | `changeClusterState(ClusterState newState)` Changes state of the cluster to the given state transactionally.
    `void` | `changeClusterState(ClusterState newState, TransactionOptions transactionOptions)` Changes state of the cluster to the given state transactionally.
    `void` | `changeClusterVersion(Version version)` Changes the cluster version transactionally.
    `void` | `changeClusterVersion(Version version, TransactionOptions options)` Changes the cluster version transactionally, with the transaction options provided.
    `ClusterState` | `getClusterState()` Returns the state of the cluster.
    `long` | `getClusterTime()` Returns the cluster-wide time in milliseconds.
    `Version` | `getClusterVersion()` The cluster version indicates the operating version of the cluster.
    `HotRestartService` | `getHotRestartService()` Returns the Hot Restart service for interacting with Hot Restart.
    `Member` | `getLocalMember()` Returns this Hazelcast instance member.
    `Set<Member>` | `getMembers()` Set of the current members in the cluster.
    `void` | `promoteLocalLiteMember()` Promotes local lite member to data member.
    `boolean` | `removeMembershipListener(String registrationId)` Removes the specified MembershipListener.
    `void` | `shutdown()` Changes state of the cluster to the `ClusterState.PASSIVE` transactionally, then triggers the shutdown process on each node.
    `void` | `shutdown(TransactionOptions transactionOptions)` Changes state of the cluster to the `ClusterState.PASSIVE` transactionally, then triggers the shutdown process on each node.

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

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

- - ### Constructor Detail

    - #### ClientClusterProxy

          public ClientClusterProxy(com.hazelcast.client.spi.impl.ClientClusterServiceImpl clusterService)

  - ### Method Detail

    - #### addMembershipListener

          public String addMembershipListener(MembershipListener listener)

      Description copied from interface: `Cluster`
      Adds MembershipListener to listen for membership updates.

      The addMembershipListener method returns a register ID. This ID is needed to remove the MembershipListener using the `Cluster.removeMembershipListener(String)` method.

      If the MembershipListener implements the `InitialMembershipListener` interface, it will also receive the `InitialMembershipEvent`.

      There is no check for duplicate registrations, so if you register the listener twice, it will get events twice.

      Specified by:
        `addMembershipListener` in interface `Cluster`
      Parameters:
        `listener` - membership listener
      Returns:
        the registration ID
      See Also:
        `Cluster.removeMembershipListener(String)`

    - #### removeMembershipListener

          public boolean removeMembershipListener(String registrationId)

      Description copied from interface: `Cluster`
      Removes the specified MembershipListener.

      If the same MembershipListener is registered multiple times, it needs to be removed multiple times. This method can safely be called multiple times for the same registration ID; subsequent calls are ignored.

      Specified by:
        `removeMembershipListener` in interface `Cluster`
      Parameters:
        `registrationId` - the registrationId of MembershipListener to remove
      Returns:
        true if the registration is removed, false otherwise
      See Also:
        `Cluster.addMembershipListener(MembershipListener)`

    - #### getMembers

          public Set<Member> getMembers()

      Description copied from interface: `Cluster`
      Set of the current members in the cluster. The returned set is an immutable set; it can't be modified.

      The returned set is backed by an ordered set. Every member in the cluster returns the 'members' in the same order. To obtain the oldest member (the master) in the cluster, you can retrieve the first item in the set using 'getMembers().iterator().next()'.

      Specified by:
        `getMembers` in interface `Cluster`
      Returns:
        current members in the cluster

    - #### getLocalMember

          public Member getLocalMember()

      Description copied from interface: `Cluster`
      Returns this Hazelcast instance member.

      The returned value will never be null, but it may change when local lite member is promoted to a data member via `Cluster.promoteLocalLiteMember()` or when this member merges to a new cluster after split-brain detected. Returned value should not be cached but instead this method should be called each time when local member is needed.

      Specified by:
        `getLocalMember` in interface `Cluster`
      Returns:
        this Hazelcast instance member

    - #### getClusterTime

          public long getClusterTime()

      Description copied from interface: `Cluster`
      Returns the cluster-wide time in milliseconds.

      Cluster tries to keep a cluster-wide time which might be different than the member's own system time. Cluster-wide time is -almost- the same on all members of the cluster.

      Specified by:
        `getClusterTime` in interface `Cluster`
      Returns:
        cluster-wide time

    - #### getClusterState

          public ClusterState getClusterState()

      Description copied from interface: `Cluster`
      Returns the state of the cluster.

      If cluster state change is in process, `ClusterState.IN_TRANSITION` will be returned.

      This is a local operation, state will be read directly from local member.

      Specified by:
        `getClusterState` in interface `Cluster`
      Returns:
        state of the cluster

    - #### changeClusterState

          public void changeClusterState(ClusterState newState)

      Description copied from interface: `Cluster`
      Changes state of the cluster to the given state transactionally. Transaction will be `TWO_PHASE` and will have 1 durability by default. If you want to override transaction options, use `Cluster.changeClusterState(ClusterState, TransactionOptions)`.

      If the given state is already same as current state of the cluster, then this method will have no effect.

      If there's an ongoing state change transaction in the cluster, this method will fail immediately with a `TransactionException`.

      If a membership change occurs in the cluster during state change, a new member joins or an existing member leaves, then this method will fail with an `IllegalStateException`.

      If there are ongoing/pending migration/replication operations, because of re-balancing due to member join or leave, then trying to change from `ACTIVE` to `FROZEN` or `PASSIVE` will fail with an `IllegalStateException`.

      If transaction timeouts during state change, then this method will fail with a `TransactionException`.

      Specified by:
        `changeClusterState` in interface `Cluster`
      Parameters:
        `newState` - new state of the cluster

    - #### getClusterVersion

          public Version getClusterVersion()

      Description copied from interface: `Cluster`
      The cluster version indicates the operating version of the cluster. It is separate from each node's codebase version, as it may be acceptable for a node to operate at a different compatibility version than its codebase version. This method may return Version.UNKNOWN if invoked after the ClusterService is constructed and before the node forms a cluster, either by joining existing members or becoming master of its standalone cluster if it is the first node on the cluster. Importantly, this is the time during which a lifecycle event with state `LifecycleEvent.LifecycleState.STARTING` is triggered.

      For example, consider a cluster comprised of nodes running on `hazelcast-3.8.0.jar`. Each node's codebase version is 3.8.0 and on startup the cluster version is 3.8. After a while, another node joins, running on `hazelcast-3.9.jar`; this node's codebase version is 3.9.0. If deemed compatible, it is allowed to join the cluster. At this point, the cluster version is still 3.8 and the 3.9.0 member should be able to adapt its behaviour to be compatible with the other 3.8.0 members. Once all 3.8.0 members have been shutdown and replaced by other members on codebase version 3.9.0, still the cluster version will be 3.8. At this point, it is possible to update the cluster version to 3.9, since all cluster members will be compatible with the new cluster version. Once cluster version is updated to 3.9, further communication among members will take place in 3.9 and all new features and functionality of version 3.9 will be available.

      Specified by:
        `getClusterVersion` in interface `Cluster`
      Returns:
        the version at which this cluster operates.

    - #### getHotRestartService

          public HotRestartService getHotRestartService()

      Description copied from interface: `Cluster`
      Returns the Hot Restart service for interacting with Hot Restart.
      Specified by:
        `getHotRestartService` in interface `Cluster`
      Returns:
        the hot restart service

    - #### changeClusterState

          public void changeClusterState(ClusterState newState,
                                         TransactionOptions transactionOptions)

      Description copied from interface: `Cluster`
      Changes state of the cluster to the given state transactionally. Transaction must be a `TWO_PHASE` transaction.

      If the given state is already same as current state of the cluster, then this method will have no effect.

      If there's an ongoing state change transaction in the cluster, this method will fail immediately with a `TransactionException`.

      If a membership change occurs in the cluster during state change, a new member joins or an existing member leaves, then this method will fail with an `IllegalStateException`.

      If there are ongoing/pending migration/replication operations, because of re-balancing due to member join or leave, then trying to change from `ACTIVE` to `FROZEN` or `PASSIVE` will fail with an `IllegalStateException`.

      If transaction timeouts during state change, then this method will fail with a `TransactionException`.

      Specified by:
        `changeClusterState` in interface `Cluster`
      Parameters:
        `newState` - new state of the cluster
        `transactionOptions` - transaction options

    - #### shutdown

          public void shutdown()

      Description copied from interface: `Cluster`
      Changes state of the cluster to the `ClusterState.PASSIVE` transactionally, then triggers the shutdown process on each node. Transaction will be `TWO_PHASE` and will have 1 durability by default. If you want to override transaction options, use `Cluster.shutdown(TransactionOptions)`.

      If the cluster is already in `ClusterState.PASSIVE`, shutdown process begins immediately. All the node join / leave rules described in `ClusterState.PASSIVE` state also applies here.

      Any node can start the shutdown process. A shutdown command is sent to other nodes periodically until either all other nodes leave the cluster or a configurable timeout occurs (see `GroupProperty.CLUSTER_SHUTDOWN_TIMEOUT_SECONDS`). If some of the nodes do not shutdown before the timeout duration, shutdown can be also invoked on them.

      Specified by:
        `shutdown` in interface `Cluster`
      See Also:
        `GroupProperty.CLUSTER_SHUTDOWN_TIMEOUT_SECONDS`, `Cluster.changeClusterState(ClusterState)`, `ClusterState.PASSIVE`

    - #### shutdown

          public void shutdown(TransactionOptions transactionOptions)

      Description copied from interface: `Cluster`
      Changes state of the cluster to the `ClusterState.PASSIVE` transactionally, then triggers the shutdown process on each node. Transaction must be a `TWO_PHASE` transaction.

      If the cluster is already in `ClusterState.PASSIVE`, shutdown process begins immediately. All the node join / leave rules described in `ClusterState.PASSIVE` state also applies here.

      Any node can start the shutdown process. A shutdown command is sent to other nodes periodically until either all other nodes leave the cluster or a configurable timeout occurs (see `GroupProperty.CLUSTER_SHUTDOWN_TIMEOUT_SECONDS`). If some of the nodes do not shutdown before the timeout duration, shutdown can be also invoked on them.

      Specified by:
        `shutdown` in interface `Cluster`
      Parameters:
        `transactionOptions` - transaction options
      See Also:
        `GroupProperty.CLUSTER_SHUTDOWN_TIMEOUT_SECONDS`, `Cluster.changeClusterState(ClusterState)`, `ClusterState.PASSIVE`

    - #### changeClusterVersion

          public void changeClusterVersion(Version version)

      Description copied from interface: `Cluster`
      Changes the cluster version transactionally. Internally this method uses the same transaction infrastructure as `Cluster.changeClusterState(ClusterState)` and the transaction defaults are the same in this case as well (`TWO_PHASE` transaction with durability 1 by default).

      If the requested cluster version is same as the current one, nothing happens.

      If a member of the cluster is not compatible with the given cluster `version`, as implemented by `NodeExtension.isNodeVersionCompatibleWith(Version)`, then a `VersionMismatchException` is thrown.

      If an invalid version transition is requested, for example changing to a different major version, an `IllegalArgumentException` is thrown.

      If a membership change occurs in the cluster during locking phase, a new member joins or an existing member leaves, then this method will fail with an `IllegalStateException`.

      Likewise, once locking phase is completed successfully, `Cluster.getClusterState()` will report being `ClusterState.IN_TRANSITION`, disallowing membership changes until the new cluster version is committed.

      Specified by:
        `changeClusterVersion` in interface `Cluster`
      Parameters:
        `version` - new version of the cluster

    - #### changeClusterVersion

          public void changeClusterVersion(Version version,
                                           TransactionOptions options)

      Description copied from interface: `Cluster`
      Changes the cluster version transactionally, with the transaction options provided. Internally this method uses the same transaction infrastructure as `Cluster.changeClusterState(ClusterState, TransactionOptions)`. The transaction options must specify a `TWO_PHASE` transaction.

      If the requested cluster version is same as the current one, nothing happens.

      If a member of the cluster is not compatible with the given cluster `version`, as implemented by `NodeExtension.isNodeVersionCompatibleWith(Version)`, then a `VersionMismatchException` is thrown.

      If an invalid version transition is requested, for example changing to a different major version, an `IllegalArgumentException` is thrown.

      If a membership change occurs in the cluster during locking phase, a new member joins or an existing member leaves, then this method will fail with an `IllegalStateException`.

      Likewise, once locking phase is completed successfully, `Cluster.getClusterState()` will report being `ClusterState.IN_TRANSITION`, disallowing membership changes until the new cluster version is committed.

      Specified by:
        `changeClusterVersion` in interface `Cluster`
      Parameters:
        `version` - new version of the cluster
        `options` - options by which to execute the transaction

    - #### promoteLocalLiteMember

          public void promoteLocalLiteMember()

      Description copied from interface: `Cluster`
      Promotes local lite member to data member. When this method returns both `Cluster.getLocalMember()` and `Cluster.getMembers()` reflects the promotion.
      Specified by:
        `promoteLocalLiteMember` in interface `Cluster`

Copyright © 2020. All rights reserved.