1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.regionserver;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.IOException;
26
27 import org.apache.hadoop.hbase.util.ByteStringer;
28 import org.apache.hadoop.conf.Configuration;
29 import org.apache.hadoop.hbase.CoordinatedStateManagerFactory;
30 import org.apache.hadoop.hbase.HBaseConfiguration;
31 import org.apache.hadoop.hbase.HConstants;
32 import org.apache.hadoop.hbase.HRegionInfo;
33 import org.apache.hadoop.hbase.testclassification.MediumTests;
34 import org.apache.hadoop.hbase.CoordinatedStateManager;
35 import org.apache.hadoop.hbase.ipc.PriorityFunction;
36 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Get;
37 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
38 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
39 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
40 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
41 import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.experimental.categories.Category;
45 import org.mockito.Mockito;
46
47 import com.google.protobuf.ByteString;
48
49
50
51
52 @Category(MediumTests.class)
53 public class TestPriorityRpc {
54 private HRegionServer regionServer = null;
55 private PriorityFunction priority = null;
56
57 @Before
58 public void setup() {
59 Configuration conf = HBaseConfiguration.create();
60 conf.setBoolean("hbase.testing.nocluster", true);
61 CoordinatedStateManager cp = CoordinatedStateManagerFactory.getCoordinatedStateManager(conf);
62 regionServer = HRegionServer.constructRegionServer(HRegionServer.class, conf, cp);
63 priority = regionServer.rpcServices.getPriority();
64 }
65
66 @Test
67 public void testQosFunctionForMeta() throws IOException {
68 priority = regionServer.rpcServices.getPriority();
69 RequestHeader.Builder headerBuilder = RequestHeader.newBuilder();
70
71
72
73 headerBuilder.setMethodName("foo");
74
75 GetRequest.Builder getRequestBuilder = GetRequest.newBuilder();
76 RegionSpecifier.Builder regionSpecifierBuilder = RegionSpecifier.newBuilder();
77 regionSpecifierBuilder.setType(RegionSpecifierType.REGION_NAME);
78 ByteString name = ByteStringer.wrap(HRegionInfo.FIRST_META_REGIONINFO.getRegionName());
79 regionSpecifierBuilder.setValue(name);
80 RegionSpecifier regionSpecifier = regionSpecifierBuilder.build();
81 getRequestBuilder.setRegion(regionSpecifier);
82 Get.Builder getBuilder = Get.newBuilder();
83 getBuilder.setRow(ByteStringer.wrap("somerow".getBytes()));
84 getRequestBuilder.setGet(getBuilder.build());
85 GetRequest getRequest = getRequestBuilder.build();
86 RequestHeader header = headerBuilder.build();
87 HRegion mockRegion = Mockito.mock(HRegion.class);
88 HRegionServer mockRS = Mockito.mock(HRegionServer.class);
89 RSRpcServices mockRpc = Mockito.mock(RSRpcServices.class);
90 Mockito.when(mockRS.getRSRpcServices()).thenReturn(mockRpc);
91 HRegionInfo mockRegionInfo = Mockito.mock(HRegionInfo.class);
92 Mockito.when(mockRpc.getRegion((RegionSpecifier)Mockito.any())).thenReturn(mockRegion);
93 Mockito.when(mockRegion.getRegionInfo()).thenReturn(mockRegionInfo);
94 Mockito.when(mockRegionInfo.isSystemTable()).thenReturn(true);
95
96 ((AnnotationReadingPriorityFunction)priority).setRegionServer(mockRS);
97 assertEquals(HConstants.SYSTEMTABLE_QOS, priority.getPriority(header, getRequest));
98 }
99
100 @Test
101 public void testQosFunctionWithoutKnownArgument() throws IOException {
102
103
104
105
106 RequestHeader.Builder headerBuilder = RequestHeader.newBuilder();
107 headerBuilder.setMethodName("foo");
108 RequestHeader header = headerBuilder.build();
109 PriorityFunction qosFunc = regionServer.rpcServices.getPriority();
110 assertEquals(HConstants.NORMAL_QOS, qosFunc.getPriority(header, null));
111 }
112
113 @Test
114 public void testQosFunctionForScanMethod() throws IOException {
115 RequestHeader.Builder headerBuilder = RequestHeader.newBuilder();
116 headerBuilder.setMethodName("Scan");
117 RequestHeader header = headerBuilder.build();
118
119
120 ScanRequest.Builder scanBuilder = ScanRequest.newBuilder();
121 ScanRequest scanRequest = scanBuilder.build();
122 HRegion mockRegion = Mockito.mock(HRegion.class);
123 HRegionServer mockRS = Mockito.mock(HRegionServer.class);
124 RSRpcServices mockRpc = Mockito.mock(RSRpcServices.class);
125 Mockito.when(mockRS.getRSRpcServices()).thenReturn(mockRpc);
126 HRegionInfo mockRegionInfo = Mockito.mock(HRegionInfo.class);
127 Mockito.when(mockRpc.getRegion((RegionSpecifier)Mockito.any())).thenReturn(mockRegion);
128 Mockito.when(mockRegion.getRegionInfo()).thenReturn(mockRegionInfo);
129 Mockito.when(mockRegionInfo.isSystemTable()).thenReturn(false);
130
131 ((AnnotationReadingPriorityFunction)priority).setRegionServer(mockRS);
132 int qos = priority.getPriority(header, scanRequest);
133 assertTrue ("" + qos, qos == HConstants.NORMAL_QOS);
134
135
136 scanBuilder = ScanRequest.newBuilder();
137 scanBuilder.setScannerId(12345);
138 scanRequest = scanBuilder.build();
139
140 RegionScanner mockRegionScanner = Mockito.mock(RegionScanner.class);
141 Mockito.when(mockRpc.getScanner(12345)).thenReturn(mockRegionScanner);
142 Mockito.when(mockRegionScanner.getRegionInfo()).thenReturn(mockRegionInfo);
143 Mockito.when(mockRpc.getRegion((RegionSpecifier)Mockito.any())).thenReturn(mockRegion);
144 Mockito.when(mockRegion.getRegionInfo()).thenReturn(mockRegionInfo);
145 Mockito.when(mockRegionInfo.isSystemTable()).thenReturn(true);
146
147
148 ((AnnotationReadingPriorityFunction)priority).setRegionServer(mockRS);
149
150 assertEquals(HConstants.SYSTEMTABLE_QOS, priority.getPriority(header, scanRequest));
151
152
153 Mockito.when(mockRegionInfo.isSystemTable()).thenReturn(false);
154 assertEquals(HConstants.NORMAL_QOS, priority.getPriority(header, scanRequest));
155 }
156 }