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

io.scalecube.cluster.fdetector.FailureDetectorConfig Maven / Gradle / Ivy

package io.scalecube.cluster.fdetector;

import java.util.StringJoiner;
import reactor.core.Exceptions;

public final class FailureDetectorConfig implements Cloneable {

  // Default settings for LAN cluster
  public static final int DEFAULT_PING_INTERVAL = 1_000;
  public static final int DEFAULT_PING_TIMEOUT = 500;
  public static final int DEFAULT_PING_REQ_MEMBERS = 3;

  // Default settings for WAN cluster (overrides default/LAN settings)
  public static final int DEFAULT_WAN_PING_TIMEOUT = 3_000;
  public static final int DEFAULT_WAN_PING_INTERVAL = 5_000;

  // Default settings for local cluster working via loopback interface (overrides default/LAN
  // settings)
  public static final int DEFAULT_LOCAL_PING_TIMEOUT = 200;
  public static final int DEFAULT_LOCAL_PING_INTERVAL = 1_000;
  public static final int DEFAULT_LOCAL_PING_REQ_MEMBERS = 1;

  private int pingInterval = DEFAULT_PING_INTERVAL;
  private int pingTimeout = DEFAULT_PING_TIMEOUT;
  private int pingReqMembers = DEFAULT_PING_REQ_MEMBERS;

  public FailureDetectorConfig() {}

  public static FailureDetectorConfig defaultConfig() {
    return new FailureDetectorConfig();
  }

  /**
   * Creates {@code FailureDetectorConfig} with default settings for cluster on LAN network.
   *
   * @return new {@code FailureDetectorConfig}
   */
  public static FailureDetectorConfig defaultLanConfig() {
    return defaultConfig();
  }

  /**
   * Creates {@code FailureDetectorConfig} with default settings for cluster on WAN network.
   *
   * @return new {@code FailureDetectorConfig}
   */
  public static FailureDetectorConfig defaultWanConfig() {
    return defaultConfig()
        .pingTimeout(DEFAULT_WAN_PING_TIMEOUT)
        .pingInterval(DEFAULT_WAN_PING_INTERVAL);
  }

  /**
   * Creates {@code FailureDetectorConfig} with default settings for cluster on local loopback
   * interface.
   *
   * @return new {@code FailureDetectorConfig}
   */
  public static FailureDetectorConfig defaultLocalConfig() {
    return defaultConfig()
        .pingTimeout(DEFAULT_LOCAL_PING_TIMEOUT)
        .pingInterval(DEFAULT_LOCAL_PING_INTERVAL)
        .pingReqMembers(DEFAULT_LOCAL_PING_REQ_MEMBERS);
  }

  /**
   * Sets pingInterval.
   *
   * @param pingInterval ping interval
   * @return new {@code FailureDetectorConfig}
   */
  public FailureDetectorConfig pingInterval(int pingInterval) {
    FailureDetectorConfig f = clone();
    f.pingInterval = pingInterval;
    return f;
  }

  public int pingInterval() {
    return pingInterval;
  }

  /**
   * Sets ping timeout.
   *
   * @param pingTimeout ping timeout
   * @return new {@code FailureDetectorConfig}
   */
  public FailureDetectorConfig pingTimeout(int pingTimeout) {
    FailureDetectorConfig f = clone();
    f.pingTimeout = pingTimeout;
    return f;
  }

  public int pingTimeout() {
    return pingTimeout;
  }

  /**
   * Sets number of members for requesting a ping.
   *
   * @param pingReqMembers number of members for requesting a ping
   * @return new {@code FailureDetectorConfig}
   */
  public FailureDetectorConfig pingReqMembers(int pingReqMembers) {
    FailureDetectorConfig f = clone();
    f.pingReqMembers = pingReqMembers;
    return f;
  }

  public int pingReqMembers() {
    return pingReqMembers;
  }

  @Override
  public FailureDetectorConfig clone() {
    try {
      return (FailureDetectorConfig) super.clone();
    } catch (CloneNotSupportedException e) {
      throw Exceptions.propagate(e);
    }
  }

  @Override
  public String toString() {
    return new StringJoiner(", ", FailureDetectorConfig.class.getSimpleName() + "[", "]")
        .add("pingInterval=" + pingInterval)
        .add("pingTimeout=" + pingTimeout)
        .add("pingReqMembers=" + pingReqMembers)
        .toString();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy