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

com.zhizus.forest.thrift.client.cluster.loadbalance.AbstractLoadBalance Maven / Gradle / Ivy

package com.zhizus.forest.thrift.client.cluster.loadbalance;

import com.google.common.collect.Lists;
import com.zhizus.forest.thrift.client.ServerInfo;
import com.zhizus.forest.thrift.client.cluster.IsolationStrategy;
import com.zhizus.forest.thrift.client.cluster.LoadBalance;
import com.zhizus.forest.thrift.client.registry.Registry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Set;


/**
 * Created by Dempe on 2016/12/26.
 */
public abstract class AbstractLoadBalance implements LoadBalance {

    private final static Logger LOGGER = LoggerFactory.getLogger(AbstractLoadBalance.class);

    public Registry registry;

    private List serverInfoList = Lists.newArrayList();

    private IsolationStrategy isolationStrategy;

    public AbstractLoadBalance(Registry registry, IsolationStrategy isolationStrategy) {
        this.registry = registry;
        this.isolationStrategy = isolationStrategy;
    }

    public List getAvailableServerList() {
        List availableList = Lists.newArrayList();
        Set failed = isolationStrategy.getFailed();
        for (ServerInfo serverInfo : serverInfoList) {
            if (!failed.contains(serverInfo)) {
                availableList.add(serverInfo);
            }
        }
        if (availableList.isEmpty()) {
            for (ServerInfo serverInfo : serverInfoList) {
                availableList.add(serverInfo);
            }
            LOGGER.warn("available server list is empty, use failed back list instead");
        }
        return serverInfoList;
    }

    @Override
    public void setList(List list) {
        serverInfoList =list;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy