1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
3 * agreements. See the NOTICE file distributed with this work for additional information regarding
4 * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
5 * "License"); you may not use this file except in compliance with the License. You may obtain a
6 * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
7 * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
8 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
9 * for the specific language governing permissions and limitations under the License.
10 */
11
12 package org.apache.hadoop.hbase.coordination;
13
14 import java.io.IOException;
15
16 import org.apache.hadoop.hbase.classification.InterfaceAudience;
17 import org.apache.hadoop.hbase.HRegionInfo;
18 import org.apache.hadoop.hbase.ServerName;
19 import org.apache.hadoop.hbase.regionserver.HRegion;
20 import org.apache.hadoop.hbase.regionserver.RegionServerServices;
21
22 /**
23 * Coordination operations for region merge transaction. The operation should be coordinated at the
24 * following stages:<br>
25 * 1. startRegionMergeTransaction - all preparation/initialization for merge region transaction<br>
26 * 2. waitForRegionMergeTransaction - wait until coordination complete all works related
27 * to merge<br>
28 * 3. confirmRegionMergeTransaction - confirm that the merge could be completed and none of merging
29 * regions moved somehow<br>
30 * 4. completeRegionMergeTransaction - all steps that are required to complete the transaction.
31 * Called after PONR (point of no return) <br>
32 */
33 @InterfaceAudience.Private
34 public interface RegionMergeCoordination {
35
36 RegionMergeDetails getDefaultDetails();
37
38 /**
39 * Dummy interface for region merge transaction details.
40 */
41 public static interface RegionMergeDetails {
42 }
43
44 /**
45 * Start the region merge transaction
46 * @param region region to be created as offline
47 * @param serverName server event originates from
48 * @throws IOException
49 */
50 void startRegionMergeTransaction(HRegionInfo region, ServerName serverName, HRegionInfo a,
51 HRegionInfo b) throws IOException;
52
53 /**
54 * Get everything ready for region merge
55 * @throws IOException
56 */
57 void waitForRegionMergeTransaction(RegionServerServices services, HRegionInfo mergedRegionInfo,
58 HRegion region_a, HRegion region_b, RegionMergeDetails details) throws IOException;
59
60 /**
61 * Confirm that the region merge can be performed
62 * @param merged region
63 * @param a merging region A
64 * @param b merging region B
65 * @param serverName server event originates from
66 * @param rmd region merge details
67 * @throws IOException If thrown, transaction failed.
68 */
69 void confirmRegionMergeTransaction(HRegionInfo merged, HRegionInfo a, HRegionInfo b,
70 ServerName serverName, RegionMergeDetails rmd) throws IOException;
71
72 /**
73 * @param merged region
74 * @param a merging region A
75 * @param b merging region B
76 * @param serverName server event originates from
77 * @param rmd region merge details
78 * @throws IOException
79 */
80 void processRegionMergeRequest(HRegionInfo merged, HRegionInfo a, HRegionInfo b,
81 ServerName serverName, RegionMergeDetails rmd) throws IOException;
82
83 /**
84 * Finish off merge transaction
85 * @param services Used to online/offline regions.
86 * @param merged region
87 * @param region_a merging region A
88 * @param region_b merging region B
89 * @param rmd region merge details
90 * @param mergedRegion
91 * @throws IOException If thrown, transaction failed. Call
92 * {@link org.apache.hadoop.hbase.regionserver.RegionMergeTransaction#rollback(
93 * Server, RegionServerServices)}
94 */
95 void completeRegionMergeTransaction(RegionServerServices services, HRegionInfo merged,
96 HRegion region_a, HRegion region_b, RegionMergeDetails rmd, HRegion mergedRegion)
97 throws IOException;
98
99 /**
100 * This method is used during rollback
101 * @param merged region to be rolled back
102 */
103 void clean(HRegionInfo merged);
104
105 }