Package com.emc.vipr.ribbon

Source Code of com.emc.vipr.ribbon.SmartClientConfig

/*
* Copyright 2014 EMC Corporation. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.emc.vipr.ribbon;

import com.netflix.loadbalancer.Server;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* Houses configuration for the smart client.
*/
public class SmartClientConfig {
    public static int DEFAULT_POLL_INTERVAL = 120; // seconds
    public static int DEFAULT_TIMEOUT = 5000; // ms

    private String vipAddresses;
    private List<Server> initialNodes;
    private String user;
    private String secret;
    private String pollProtocol;
    private int pollInterval = DEFAULT_POLL_INTERVAL;
    private int timeout = DEFAULT_TIMEOUT;

    public String getVipAddresses() {
        return vipAddresses;
    }

    /**
     * Set the comma-separated list of VIP addresses (hosts and ports) for load balancing. When a request uses one of
     * these addresses, it will be replaced by the load balancer with a selected host (data services node) from the LB's
     * host list.
     */
    public void setVipAddresses(String vipAddresses) {
        this.vipAddresses = vipAddresses;
    }

    public List<Server> getInitialNodes() {
        return initialNodes;
    }

    public String getInitialNodesString() {
        if (initialNodes == null) return "";
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < initialNodes.size(); i++) {
            if (i > 0) str.append(",");
            str.append(initialNodes.get(i));
        }
        return str.toString();
    }

    /**
     * Set the initial list of data services nodes in the ViPR cluster. These nodes will be queried at regular intervals
     * to get the full current list of active nodes.
     */
    public void setInitialNodes(List<Server> initialNodes) {
        this.initialNodes = initialNodes;
    }

    public String getUser() {
        return user;
    }

    /**
     * Set the user to use when querying for the full list of active nodes
     */
    public void setUser(String user) {
        this.user = user;
    }

    public String getSecret() {
        return secret;
    }

    /**
     * Set the user's secret key when querying nodes
     */
    public void setSecret(String secret) {
        this.secret = secret;
    }

    public String getPollProtocol() {
        return pollProtocol;
    }

    /**
     * Sets the protocol to use when polling for active nodes (http or https).
     */
    public void setPollProtocol(String pollProtocol) {
        this.pollProtocol = pollProtocol;
    }

    public int getPollInterval() {
        return pollInterval;
    }

    /**
     * Set the interval in seconds to wait between queries for active nodes. Defaults to 120 seconds (2 minutes).
     */
    public void setPollInterval(int pollInterval) {
        this.pollInterval = pollInterval;
    }

    public int getTimeout() {
        return timeout;
    }

    /**
     * Set the timeout threshold (in milliseconds) when querying for active nodes. Defaults to 5000ms (5 seconds).
     */
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    /**
     * @see #setVipAddresses(String)
     */
    public SmartClientConfig withVipAddresses(String vipAddresses) {
        setVipAddresses(vipAddresses);
        return this;
    }

    /**
     * @see #setInitialNodes(java.util.List)
     */
    public SmartClientConfig withInitialNodes(Server... initialNodes) {
        setInitialNodes(Arrays.asList(initialNodes));
        return this;
    }

    /**
     * @see #setInitialNodes(java.util.List)
     */
    public SmartClientConfig withInitialNodes(String listString) {
        setInitialNodes(parseServerList(listString));
        return this;
    }

    /**
     * @see #setInitialNodes(java.util.List)
     */
    public SmartClientConfig withInitialNode(Server initialNode) {
        setInitialNodes(Arrays.asList(initialNode));
        return this;
    }

    /**
     * @see #setUser(String)
     */
    public SmartClientConfig withUsername(String username) {
        setUser(username);
        return this;
    }

    /**
     * @see #setSecret(String)
     */
    public SmartClientConfig withSecret(String secret) {
        setSecret(secret);
        return this;
    }

    /**
     * @see #setPollProtocol(String)
     */
    public SmartClientConfig withPollProtocol(String pollProtocol) {
        setPollProtocol(pollProtocol);
        return this;
    }

    /**
     * @see #setPollInterval(int)
     */
    public SmartClientConfig withPollInterval(int pollInterval) {
        setPollInterval(pollInterval);
        return this;
    }

    /**
     * @see #setTimeout(int)
     */
    public SmartClientConfig withTimeout(int timeout) {
        setTimeout(timeout);
        return this;
    }

    public static List<Server> parseServerList(String listString) {
        List<Server> serverList = new ArrayList<Server>();
        for (String serverStr : listString.split(",")) {
            String[] parts = serverStr.split(":");
            if (parts.length != 2)
                throw new IllegalArgumentException("Invalid server (must be in host:port format): " + serverStr);
            serverList.add(new Server(parts[0], Integer.parseInt(parts[1])));
        }
        return serverList;
    }
}
TOP

Related Classes of com.emc.vipr.ribbon.SmartClientConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.