1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.regionserver;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.mockito.Mockito.when;
23
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.HBaseConfiguration;
26 import org.apache.hadoop.hbase.HConstants;
27 import org.apache.hadoop.hbase.security.Superusers;
28 import org.apache.hadoop.hbase.HRegionInfo;
29 import org.apache.hadoop.hbase.ServerName;
30 import org.apache.hadoop.hbase.TableName;
31 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
32 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
33 import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos;
34 import org.apache.hadoop.hbase.testclassification.SmallTests;
35 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;
36 import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;
37 import org.apache.hadoop.hbase.util.Bytes;
38 import org.junit.Test;
39 import org.junit.experimental.categories.Category;
40 import org.mockito.Mockito;
41
42 import com.google.protobuf.Message;
43
44 import java.io.IOException;
45
46
47
48
49
50 @Category(SmallTests.class)
51 public class TestQosFunction {
52 @Test
53 public void testPriority() {
54 Configuration conf = HBaseConfiguration.create();
55 RSRpcServices rpcServices = Mockito.mock(RSRpcServices.class);
56 when(rpcServices.getConfiguration()).thenReturn(conf);
57
58 AnnotationReadingPriorityFunction qosFunction =
59 new AnnotationReadingPriorityFunction(rpcServices, RSRpcServices.class);
60
61
62 checkMethod("ReplicateWALEntry", HConstants.REPLICATION_QOS, qosFunction);
63
64 checkMethod("OpenRegion", HConstants.ADMIN_QOS, qosFunction);
65
66 checkMethod("Multi", HConstants.NORMAL_QOS, qosFunction, MultiRequest.getDefaultInstance());
67
68 }
69
70 @Test
71 public void testRegionInTransition() throws IOException {
72 Configuration conf = HBaseConfiguration.create();
73 Superusers.initialize(conf);
74 RSRpcServices rpcServices = Mockito.mock(RSRpcServices.class);
75 when(rpcServices.getConfiguration()).thenReturn(conf);
76
77 AnnotationReadingPriorityFunction qosFunction =
78 new AnnotationReadingPriorityFunction(rpcServices, RSRpcServices.class);
79
80
81 HBaseProtos.RegionInfo meta_ri = HRegionInfo.convert(HRegionInfo.FIRST_META_REGIONINFO);
82 HBaseProtos.RegionInfo normal_ri = HRegionInfo.convert(
83 new HRegionInfo(TableName.valueOf("test:table"),
84 Bytes.toBytes("a"), Bytes.toBytes("b"), false));
85
86
87 RegionServerStatusProtos.RegionStateTransition metaTransition = RegionServerStatusProtos
88 .RegionStateTransition.newBuilder()
89 .addRegionInfo(meta_ri)
90 .setTransitionCode(RegionServerStatusProtos.RegionStateTransition.TransitionCode.CLOSED)
91 .build();
92
93 RegionServerStatusProtos.RegionStateTransition normalTransition = RegionServerStatusProtos
94 .RegionStateTransition.newBuilder()
95 .addRegionInfo(normal_ri)
96 .setTransitionCode(RegionServerStatusProtos.RegionStateTransition.TransitionCode.CLOSED)
97 .build();
98
99 RegionServerStatusProtos.ReportRegionStateTransitionRequest metaTransitionRequest =
100 RegionServerStatusProtos.ReportRegionStateTransitionRequest.newBuilder()
101 .setServer(ProtobufUtil.toServerName(ServerName.valueOf("locahost:60020", 100)))
102 .addTransition(normalTransition)
103 .addTransition(metaTransition).build();
104
105 RegionServerStatusProtos.ReportRegionStateTransitionRequest normalTransitionRequest =
106 RegionServerStatusProtos.ReportRegionStateTransitionRequest.newBuilder()
107 .setServer(ProtobufUtil.toServerName(ServerName.valueOf("locahost:60020", 100)))
108 .addTransition(normalTransition).build();
109
110 final String reportFuncName = "ReportRegionStateTransition";
111 checkMethod(reportFuncName, HConstants.SYSTEMTABLE_QOS, qosFunction, metaTransitionRequest);
112 checkMethod(reportFuncName, HConstants.NORMAL_QOS, qosFunction, normalTransitionRequest);
113 }
114
115 private void checkMethod(final String methodName, final int expected,
116 final AnnotationReadingPriorityFunction qosf) {
117 checkMethod(methodName, expected, qosf, null);
118 }
119
120 private void checkMethod(final String methodName, final int expected,
121 final AnnotationReadingPriorityFunction qosf, final Message param) {
122 RequestHeader.Builder builder = RequestHeader.newBuilder();
123 builder.setMethodName(methodName);
124 assertEquals(methodName, expected, qosf.getPriority(builder.build(), param));
125 }
126 }