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

com.netflix.dyno.connectionpool.impl.HostSelectionStrategy Maven / Gradle / Ivy

There is a newer version: 1.9.1
Show newest version
/*******************************************************************************
 * Copyright 2011 Netflix
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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.netflix.dyno.connectionpool.impl;

import com.netflix.dyno.connectionpool.BaseOperation;
import com.netflix.dyno.connectionpool.Connection;
import com.netflix.dyno.connectionpool.Host;
import com.netflix.dyno.connectionpool.HostConnectionPool;
import com.netflix.dyno.connectionpool.exception.NoAvailableHostsException;
import com.netflix.dyno.connectionpool.impl.lb.HostToken;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * Interface that encapsulates a strategy for selecting a {@link Connection} to a {@link Host} for the given {@link BaseOperation}
 * @author poberai
 *
 * @param 
 */
public interface HostSelectionStrategy {

	/**
	 * 
	 * @param op
	 * @param hashtag
	 * @return
	 * @throws NoAvailableHostsException
	 */
         HostConnectionPool getPoolForOperation(BaseOperation op, String hashtag)
            throws NoAvailableHostsException;
	/**
	 * 
	 * @param ops
	 * @return
	 * @throws NoAvailableHostsException
	 */
	Map,BaseOperation> getPoolsForOperationBatch(Collection> ops) throws NoAvailableHostsException;
	
	/**
	 * 
	 * @return
	 */
	List> getOrderedHostPools();
	
	/**
	 * 
	 * @param token
	 * @return
	 */
	HostConnectionPool getPoolForToken(Long token);
	
	/**
	 * 
	 * @param start
	 * @param end
	 * @return
	 */
	List> getPoolsForTokens(Long start, Long end);

    /**
     * Finds the server Host that owns the specified key.
     *
     * @param key
     * @return {@link HostToken}
     * @throws UnsupportedOperationException for non-token aware load balancing strategies
     */
    HostToken getTokenForKey(String key) throws UnsupportedOperationException;

    
    /**
     * Finds the server Host that owns the specified binary key.
     *
     * @param key
     * @return {@link HostToken}
     * @throws UnsupportedOperationException for non-token aware load balancing strategies
     */
	HostToken getTokenForKey(byte[] key) throws UnsupportedOperationException;

    
	/**
	 * Init the connection pool with the set of hosts provided
	 * @param hostPools
	 */
	void initWithHosts(Map> hostPools);
	
	/**
	 * Add a host to the selection strategy. This is useful when the underlying dynomite topology changes.
	 * @param {@link com.netflix.dyno.connectionpool.impl.lb.HostToken}
	 * @param hostPool
	 * @return true/false indicating whether the pool was indeed added
	 */
	boolean addHostPool(HostToken host, HostConnectionPool hostPool);
	
	/**
	 * Remove a host from the selection strategy. This is useful when the underlying dynomite topology changes.
	 * @param {@link com.netflix.dyno.connectionpool.impl.lb.HostToken}
	 * @return true/false indicating whether the pool was indeed removed
	 */
	boolean removeHostPool(HostToken host);

	boolean isTokenAware();

	boolean isEmpty();

	interface HostSelectionStrategyFactory {
		
		/**
		 * Create/Return a HostSelectionStrategy 
		 * @return HostSelectionStrategy
		 */
		public HostSelectionStrategy vendPoolSelectionStrategy();
	}




}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy