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

org.n3r.diamond.client.impl.DiamondManagerConf Maven / Gradle / Ivy

The newest version!
package org.n3r.diamond.client.impl;

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

import static org.n3r.diamond.client.impl.Constants.*;

public class DiamondManagerConf {
    private Logger log = LoggerFactory.getLogger(DiamondManagerConf.class);

    private volatile int pollingInterval = POLLING_INTERVAL; // interval for periodically check
    private volatile int onceTimeout = ONCE_TIMEOUT; // Timeout for one try config from diamond-server
    private volatile int receiveWaitTime = RECV_WAIT_TIMEOUT; // total timeout for one config with multi tries

    private AtomicInteger domainNamePos = new AtomicInteger(0);

    private volatile List diamondServers = Lists.newArrayList();

    private int maxHostConnections = 1;
    private boolean connectionStaleCheckingEnabled = true;
    private int maxTotalConnections = 20;
    private int connectionTimeout = CONN_TIMEOUT;
    private int retrieveDataRetryTimes = Integer.MAX_VALUE / 10;

    private String filePath; // local data dir root

    public DiamondManagerConf() {
        filePath = System.getProperty("user.home") + File.separator + ".diamond-client";
        File dir = new File(filePath);
        dir.mkdirs();
        if (!dir.exists()) throw new RuntimeException("create diamond-miner dir fail " + filePath);
    }


    public int getMaxHostConnections() {
        return maxHostConnections;
    }

    public void setMaxHostConnections(int maxHostConnections) {
        this.maxHostConnections = maxHostConnections;
    }

    public boolean isConnectionStaleCheckingEnabled() {
        return connectionStaleCheckingEnabled;
    }

    public void setConnectionStaleCheckingEnabled(boolean connectionStaleCheckingEnabled) {
        this.connectionStaleCheckingEnabled = connectionStaleCheckingEnabled;
    }

    public int getMaxTotalConnections() {
        return maxTotalConnections;
    }

    public void setMaxTotalConnections(int maxTotalConnections) {
        this.maxTotalConnections = maxTotalConnections;
    }

    public int getPollingInterval() {
        return pollingInterval;
    }


    public void setPollingInterval(int pollingInterval) {
        if (pollingInterval < POLLING_INTERVAL && !MockDiamondServer.isTestMode()) return;
        this.pollingInterval = pollingInterval;
    }


    public List getDiamondServers() {
        return diamondServers;
    }

    public boolean hasDiamondServers() {
        return diamondServers.size() > 0;
    }

    public void setDiamondServers(Set diamondServers, DiamondHttpClient diamondHttpClient) {
        if (Sets.newHashSet(this.diamondServers).equals(diamondServers)) return;

        this.diamondServers = Lists.newArrayList(diamondServers);
        randomDomainNamePos();
        diamondHttpClient.resetHostConfig(getDomainName());
    }

    public void addDomainName(String domainName) {
        this.diamondServers.add(domainName);
    }

    public String getFilePath() {
        return filePath;
    }

    public int getOnceTimeout() {
        return onceTimeout;
    }

    public void setOnceTimeout(int onceTimeout) {
        this.onceTimeout = onceTimeout;
    }

    public int getConnectionTimeout() {
        return connectionTimeout;
    }

    public void setConnectionTimeout(int connectionTimeout) {
        this.connectionTimeout = connectionTimeout;
    }


    public int getReceiveWaitTime() {
        return receiveWaitTime;
    }

    public void setReceiveWaitTime(int receiveWaitTime) {
        this.receiveWaitTime = receiveWaitTime;
    }

    public int getRetrieveDataRetryTimes() {
        return retrieveDataRetryTimes;
    }

    public void setRetrieveDataRetryTimes(int retrieveDataRetryTimes) {
        this.retrieveDataRetryTimes = retrieveDataRetryTimes;
    }

    public String getDomainName() {
        if (diamondServers.size() == 0)
            throw new NoNameServerAvailableException("no name server available!");

        return diamondServers.get(domainNamePos.get());
    }

    private void randomDomainNamePos() {
        int diamondServerNum = diamondServers.size();
        if (diamondServerNum > 1) {
            domainNamePos.set(new Random().nextInt(diamondServerNum));
            log.info("random DiamondServer to:" + getDomainName());
        }
    }

    synchronized void rotateToNextDomain(DiamondHttpClient diamondHttpClient) {
        int diamondServerNum = diamondServers.size();
        if (diamondServerNum == 0) {
            log.error("diamond server list is empty, please contact administrator");
            return;
        }

        if (diamondServerNum <= 1) {
            diamondHttpClient.resetHostConfig(getDomainName());
            return;
        }

        int index = domainNamePos.incrementAndGet();
        if (index < 0) index = -index;
        domainNamePos.set(index % diamondServerNum);

        diamondHttpClient.resetHostConfig(getDomainName());

        log.warn("rotate diamond server to " + getDomainName());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy