1 /* 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 package org.apache.hadoop.hbase.replication; 20 21 import java.util.List; 22 import java.util.SortedMap; 23 import java.util.SortedSet; 24 25 import org.apache.hadoop.classification.InterfaceAudience; 26 import org.apache.zookeeper.KeeperException; 27 28 /** 29 * This provides an interface for maintaining a region server's replication queues. These queues 30 * keep track of the HLogs that still need to be replicated to remote clusters. 31 */ 32 @InterfaceAudience.Private 33 public interface ReplicationQueues { 34 35 /** 36 * Initialize the region server replication queue interface. 37 * @param serverName The server name of the region server that owns the replication queues this 38 * interface manages. 39 */ 40 void init(String serverName) throws KeeperException; 41 42 /** 43 * Remove a replication queue. 44 * @param queueId a String that identifies the queue. 45 */ 46 void removeQueue(String queueId); 47 48 /** 49 * Add a new HLog file to the given queue. If the queue does not exist it is created. 50 * @param queueId a String that identifies the queue. 51 * @param filename name of the HLog 52 * @throws KeeperException 53 */ 54 void addLog(String queueId, String filename) throws KeeperException; 55 56 /** 57 * Remove an HLog file from the given queue. 58 * @param queueId a String that identifies the queue. 59 * @param filename name of the HLog 60 */ 61 void removeLog(String queueId, String filename); 62 63 /** 64 * Set the current position for a specific HLog in a given queue. 65 * @param queueId a String that identifies the queue 66 * @param filename name of the HLog 67 * @param position the current position in the file 68 */ 69 void setLogPosition(String queueId, String filename, long position); 70 71 /** 72 * Get the current position for a specific HLog in a given queue. 73 * @param queueId a String that identifies the queue 74 * @param filename name of the HLog 75 * @return the current position in the file 76 */ 77 long getLogPosition(String queueId, String filename) throws KeeperException; 78 79 /** 80 * Remove all replication queues for this region server. 81 */ 82 void removeAllQueues(); 83 84 /** 85 * Get a list of all HLogs in the given queue. 86 * @param queueId a String that identifies the queue 87 * @return a list of HLogs, null if this region server is dead and has no outstanding queues 88 */ 89 List<String> getLogsInQueue(String queueId); 90 91 /** 92 * Get a list of all queues for this region server. 93 * @return a list of queueIds, null if this region server is dead and has no outstanding queues 94 */ 95 List<String> getAllQueues(); 96 97 /** 98 * Take ownership for the set of queues belonging to a dead region server. 99 * @param regionserver the id of the dead region server 100 * @return A SortedMap of the queues that have been claimed, including a SortedSet of HLogs in 101 * each queue. Returns an empty map if no queues were failed-over. 102 */ 103 SortedMap<String, SortedSet<String>> claimQueues(String regionserver); 104 105 /** 106 * Get a list of all region servers that have outstanding replication queues. These servers could 107 * be alive, dead or from a previous run of the cluster. 108 * @return a list of server names 109 */ 110 List<String> getListOfReplicators(); 111 }