| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.hadoop.hbase.master; |
| |
| import org.apache.hadoop.conf.Configuration; |
| import org.apache.hadoop.hbase.*; |
| import org.apache.hadoop.hbase.protobuf.ProtobufUtil; |
| import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos; |
| import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos; |
| import org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction; |
| import org.apache.hadoop.hbase.regionserver.RSRpcServices; |
| import org.apache.hadoop.hbase.testclassification.MasterTests; |
| import org.apache.hadoop.hbase.testclassification.SmallTests; |
| import org.apache.hadoop.hbase.util.Bytes; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.experimental.categories.Category; |
| import org.mockito.Mockito; |
| |
| import java.io.IOException; |
| |
| import static org.junit.Assert.*; |
| import static org.mockito.Mockito.when; |
| |
| @Category({MasterTests.class, SmallTests.class}) |
| public class TestMasterQosFunction extends QosTestHelper { |
| private Configuration conf; |
| private RSRpcServices rpcServices; |
| private AnnotationReadingPriorityFunction qosFunction; |
| |
| |
| @Before |
| public void setUp() { |
| conf = HBaseConfiguration.create(); |
| rpcServices = Mockito.mock(MasterRpcServices.class); |
| when(rpcServices.getConfiguration()).thenReturn(conf); |
| qosFunction = new MasterAnnotationReadingPriorityFunction(rpcServices, MasterRpcServices.class); |
| } |
| |
| @Test |
| public void testRegionInTransition() throws IOException { |
| // Check ReportRegionInTransition |
| HBaseProtos.RegionInfo meta_ri = HRegionInfo.convert(HRegionInfo.FIRST_META_REGIONINFO); |
| HBaseProtos.RegionInfo normal_ri = HRegionInfo.convert( |
| new HRegionInfo(TableName.valueOf("test:table"), |
| Bytes.toBytes("a"), Bytes.toBytes("b"), false)); |
| |
| |
| RegionServerStatusProtos.RegionStateTransition metaTransition = RegionServerStatusProtos |
| .RegionStateTransition.newBuilder() |
| .addRegionInfo(meta_ri) |
| .setTransitionCode(RegionServerStatusProtos.RegionStateTransition.TransitionCode.CLOSED) |
| .build(); |
| |
| RegionServerStatusProtos.RegionStateTransition normalTransition = RegionServerStatusProtos |
| .RegionStateTransition.newBuilder() |
| .addRegionInfo(normal_ri) |
| .setTransitionCode(RegionServerStatusProtos.RegionStateTransition.TransitionCode.CLOSED) |
| .build(); |
| |
| RegionServerStatusProtos.ReportRegionStateTransitionRequest metaTransitionRequest = |
| RegionServerStatusProtos.ReportRegionStateTransitionRequest.newBuilder() |
| .setServer(ProtobufUtil.toServerName(ServerName.valueOf("locahost:60020", 100))) |
| .addTransition(normalTransition) |
| .addTransition(metaTransition).build(); |
| |
| RegionServerStatusProtos.ReportRegionStateTransitionRequest normalTransitionRequest = |
| RegionServerStatusProtos.ReportRegionStateTransitionRequest.newBuilder() |
| .setServer(ProtobufUtil.toServerName(ServerName.valueOf("locahost:60020", 100))) |
| .addTransition(normalTransition).build(); |
| |
| final String reportFuncName = "ReportRegionStateTransition"; |
| checkMethod(conf, reportFuncName, HConstants.SYSTEMTABLE_QOS, qosFunction, |
| metaTransitionRequest); |
| checkMethod(conf, reportFuncName, HConstants.NORMAL_QOS, qosFunction, normalTransitionRequest); |
| } |
| |
| @Test |
| public void testAnnotations() { |
| checkMethod(conf, "GetLastFlushedSequenceId", HConstants.ADMIN_QOS, qosFunction); |
| checkMethod(conf, "CompactRegion", HConstants.ADMIN_QOS, qosFunction); |
| checkMethod(conf, "GetLastFlushedSequenceId", HConstants.ADMIN_QOS, qosFunction); |
| checkMethod(conf, "GetRegionInfo", HConstants.ADMIN_QOS, qosFunction); |
| } |
| } |