All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.scalecube.cluster.membership.MembershipConfig Maven / Gradle / Ivy

package io.scalecube.cluster.membership;

import io.scalecube.net.Address;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringJoiner;
import reactor.core.Exceptions;

public final class MembershipConfig implements Cloneable {

  // Default settings for LAN cluster
  public static final int DEFAULT_SYNC_INTERVAL = 30_000;
  public static final int DEFAULT_SYNC_TIMEOUT = 3_000;
  public static final int DEFAULT_SUSPICION_MULT = 5;

  // Default settings for WAN cluster (overrides default/LAN settings)
  public static final int DEFAULT_WAN_SUSPICION_MULT = 6;
  public static final int DEFAULT_WAN_SYNC_INTERVAL = 60_000;

  // Default settings for local cluster working via loopback interface (overrides default/LAN
  // settings)
  public static final int DEFAULT_LOCAL_SUSPICION_MULT = 3;
  public static final int DEFAULT_LOCAL_SYNC_INTERVAL = 15_000;

  private List
seedMembers = Collections.emptyList(); private int syncInterval = DEFAULT_SYNC_INTERVAL; private int syncTimeout = DEFAULT_SYNC_TIMEOUT; private int suspicionMult = DEFAULT_SUSPICION_MULT; private int removedMembersHistorySize = 42; private String namespace = "default"; public MembershipConfig() {} public static MembershipConfig defaultConfig() { return new MembershipConfig(); } /** * Creates {@code MembershipConfig} with default settings for cluster on LAN network. * * @return new {@code MembershipConfig} */ public static MembershipConfig defaultLanConfig() { return defaultConfig(); } /** * Creates {@code MembershipConfig} with default settings for cluster on WAN network. * * @return new {@code MembershipConfig} */ public static MembershipConfig defaultWanConfig() { return defaultConfig() .suspicionMult(DEFAULT_WAN_SUSPICION_MULT) .syncInterval(DEFAULT_WAN_SYNC_INTERVAL); } /** * Creates {@code MembershipConfig} with default settings for cluster on local loopback interface. * * @return new {@code MembershipConfig} */ public static MembershipConfig defaultLocalConfig() { return defaultConfig() .suspicionMult(DEFAULT_LOCAL_SUSPICION_MULT) .syncInterval(DEFAULT_LOCAL_SYNC_INTERVAL); } public List
seedMembers() { return seedMembers; } /** * Sets a seedMembers. * * @param seedMembers seed members * @return new {@code MembershipConfig} instance */ public MembershipConfig seedMembers(Address... seedMembers) { return seedMembers(Arrays.asList(seedMembers)); } /** * Sets a seedMembers. * * @param seedMembers seed members * @return new {@code MembershipConfig} instance */ public MembershipConfig seedMembers(List
seedMembers) { MembershipConfig m = clone(); m.seedMembers = Collections.unmodifiableList(new ArrayList<>(seedMembers)); return m; } public int syncInterval() { return syncInterval; } /** * Sets a syncInterval. * * @param syncInterval sync interval * @return new {@code MembershipConfig} instance */ public MembershipConfig syncInterval(int syncInterval) { MembershipConfig m = clone(); m.syncInterval = syncInterval; return m; } public int syncTimeout() { return syncTimeout; } /** * Sets a syncTimeout. * * @param syncTimeout sync timeout * @return new {@code MembershipConfig} instance */ public MembershipConfig syncTimeout(int syncTimeout) { MembershipConfig m = clone(); m.syncTimeout = syncTimeout; return m; } public int suspicionMult() { return suspicionMult; } /** * Sets a suspicionMult. * * @param suspicionMult suspicion multiplier * @return new {@code MembershipConfig} instance */ public MembershipConfig suspicionMult(int suspicionMult) { MembershipConfig m = clone(); m.suspicionMult = suspicionMult; return m; } public String namespace() { return namespace; } /** * Sets a namespace. * * @param namespace namespace * @return new {@code MembershipConfig} instance */ public MembershipConfig namespace(String namespace) { MembershipConfig m = clone(); m.namespace = namespace; return m; } public int removedMembersHistorySize() { return removedMembersHistorySize; } /** * Sets a removedMembersHistorySize. * * @param removedMembersHistorySize history size for remove members * @return new {@code MembershipConfig} instance */ public MembershipConfig removedMembersHistorySize(int removedMembersHistorySize) { MembershipConfig m = clone(); m.removedMembersHistorySize = removedMembersHistorySize; return m; } @Override public MembershipConfig clone() { try { return (MembershipConfig) super.clone(); } catch (CloneNotSupportedException e) { throw Exceptions.propagate(e); } } @Override public String toString() { return new StringJoiner(", ", MembershipConfig.class.getSimpleName() + "[", "]") .add("seedMembers=" + seedMembers) .add("syncInterval=" + syncInterval) .add("syncTimeout=" + syncTimeout) .add("suspicionMult=" + suspicionMult) .add("namespace='" + namespace + "'") .add("removedMembersHistorySize=" + removedMembersHistorySize) .toString(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy