/* * Copyright 2008-2009 LinkedIn, Inc * * 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 voldemort.routing; import java.util.List; import java.util.Set; import voldemort.cluster.Node; /** * A routing strategy maps puts and gets to an ordered "preference list" of * servers. The preference list is the order under which operations will be * completed in the absence of failures. * * */ public interface RoutingStrategy { /** * Get the type of RoutingStrategyType * * @return RoutingStrategyType */ public String getType(); /** * Get the node preference list for the given key. The preference list is a * list of nodes to perform an operation on. * * @param key The key the operation is operating on * @return The preference list for the given key */ public List<Node> routeRequest(byte[] key); /** * Get the partition list for the given key. * * TODO: The naming of this method is confusing.. it is simply a wrapper * around {@link RoutingStrategy#getReplicatingPartitionList(int)} that * takes a key. So, would be good to rename this also as * getReplicatingPartitionList * * @param key The key the operation is operating on * @return The partition list for the given key */ public List<Integer> getPartitionList(byte[] key); /** * Obtain the master partition for a given key * * @param key The key being operated on * @return The partition that owns the key */ public Integer getMasterPartition(byte[] key); /** * Get the replication partitions list for the given partition. * * @param partitionId * @return The List of partitionId where this partition is replicated. */ public List<Integer> getReplicatingPartitionList(int partitionId); /** * Get the collection of nodes that are candidates for routing. * * @return The collection of nodes */ public Set<Node> getNodes(); /** * Return the number of replicas * * @return The number of replicas */ public int getNumReplicas(); }