View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.hadoop.hbase.coordination;
19  
20  import org.apache.hadoop.hbase.classification.InterfaceAudience;
21  import org.apache.hadoop.hbase.HRegionInfo;
22  import org.apache.hadoop.hbase.ServerName;
23  import org.apache.hadoop.hbase.master.AssignmentManager;
24  import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
25  import org.apache.hadoop.hbase.regionserver.HRegion;
26  import org.apache.hadoop.hbase.regionserver.RegionServerServices;
27  
28  import java.io.IOException;
29  
30  /**
31   * Cocoordination operations for opening regions.
32   */
33  @InterfaceAudience.Private
34  public interface OpenRegionCoordination {
35  
36    //---------------------
37    // RS-side operations
38    //---------------------
39    /**
40     * Tries to move regions to OPENED state.
41     *
42     * @param r Region we're working on.
43     * @param ord details about region opening task
44     * @return whether transition was successful or not
45     * @throws java.io.IOException
46     */
47    boolean transitionToOpened(HRegion r, OpenRegionDetails ord) throws IOException;
48  
49    /**
50     * Transitions region from offline to opening state.
51     * @param regionInfo region we're working on.
52     * @param ord details about opening task.
53     * @return true if successful, false otherwise
54     */
55    boolean transitionFromOfflineToOpening(HRegionInfo regionInfo,
56                                           OpenRegionDetails ord);
57  
58    /**
59     * Heartbeats to prevent timeouts.
60     *
61     * @param ord details about opening task.
62     * @param regionInfo region we're working on.
63     * @param rsServices instance of RegionServerrServices
64     * @param context used for logging purposes only
65     * @return true if successful heartbeat, false otherwise.
66     */
67    boolean tickleOpening(OpenRegionDetails ord, HRegionInfo regionInfo,
68                          RegionServerServices rsServices, String context);
69  
70    /**
71     * Tries transition region from offline to failed open.
72     * @param rsServices instance of RegionServerServices
73     * @param hri region we're working on
74     * @param ord details about region opening task
75     * @return true if successful, false otherwise
76     */
77    boolean tryTransitionFromOfflineToFailedOpen(RegionServerServices rsServices,
78                                                 HRegionInfo hri, OpenRegionDetails ord);
79  
80    /**
81     * Tries transition from Opening to Failed open.
82     * @param hri region we're working on
83     * @param ord details about region opening task
84     * @return true if successfu. false otherwise.
85     */
86    boolean tryTransitionFromOpeningToFailedOpen(HRegionInfo hri, OpenRegionDetails ord);
87  
88    /**
89     * Construct OpenRegionDetails instance from part of protobuf request.
90     * @return instance of OpenRegionDetails.
91     */
92    OpenRegionDetails parseFromProtoRequest(AdminProtos.OpenRegionRequest.RegionOpenInfo
93                                              regionOpenInfo);
94  
95    /**
96     * Get details object with params for case when we're opening on
97     * regionserver side with all "default" properties.
98     */
99    OpenRegionDetails getDetailsForNonCoordinatedOpening();
100 
101   //-------------------------
102   // HMaster-side operations
103   //-------------------------
104 
105   /**
106    * Commits opening operation on HM side (steps required for "commit"
107    * are determined by coordination implementation).
108    * @return true if committed successfully, false otherwise.
109    */
110   public boolean commitOpenOnMasterSide(AssignmentManager assignmentManager,
111                                         HRegionInfo regionInfo,
112                                         OpenRegionDetails ord);
113 
114   /**
115    * Interface for region opening tasks. Used to carry implementation details in
116    * encapsulated way through Handlers to the coordination API.
117    */
118   static interface OpenRegionDetails {
119     /**
120      * Sets server name on which opening operation is running.
121      */
122     void setServerName(ServerName serverName);
123 
124     /**
125      * @return server name on which opening op is running.
126      */
127     ServerName getServerName();
128   }
129 }