diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultStatsUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultStatsUtil.java index 77c56ef07ea5..793d10875cb3 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultStatsUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultStatsUtil.java @@ -17,63 +17,30 @@ */ package org.apache.hadoop.hbase.client; -import org.apache.hadoop.hbase.HRegionLocation; import org.apache.hadoop.hbase.ServerName; import org.apache.yetus.audience.InterfaceAudience; /** - * A {@link Result} with some statistics about the server/region status + * Statistics update about a server/region */ @InterfaceAudience.Private public final class ResultStatsUtil { - private ResultStatsUtil() { //private ctor for util class } /** - * Update the stats for the specified region if the result is an instance of {@link - * ResultStatsUtil} + * Update the statistics for the specified region. * - * @param r object that contains the result and possibly the statistics about the region - * @param serverStats stats tracker to update from the result + * @param tracker tracker to update * @param server server from which the result was obtained - * @param regionName full region name for the stats. - * @return the underlying {@link Result} if the passed result is an {@link - * ResultStatsUtil} or just returns the result; + * @param regionName full region name for the statistics + * @param stats statistics to update for the specified region */ - public static T updateStats(T r, ServerStatisticTracker serverStats, - ServerName server, byte[] regionName) { - if (!(r instanceof Result)) { - return r; - } - Result result = (Result) r; - // early exit if there are no stats to collect - RegionLoadStats stats = result.getStats(); - if(stats == null){ - return r; - } - - updateStats(serverStats, server, regionName, stats); - return r; - } - public static void updateStats(StatisticTrackable tracker, ServerName server, byte[] regionName, RegionLoadStats stats) { if (regionName != null && stats != null && tracker != null) { tracker.updateRegionStats(server, regionName, stats); } } - - public static T updateStats(T r, ServerStatisticTracker stats, - HRegionLocation regionLocation) { - byte[] regionName = null; - ServerName server = null; - if (regionLocation != null) { - server = regionLocation.getServerName(); - regionName = regionLocation.getRegionInfo().getRegionName(); - } - - return updateStats(r, stats, server, regionName); - } } diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestResultStatsUtil.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestResultStatsUtil.java new file mode 100644 index 000000000000..5b591030c966 --- /dev/null +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestResultStatsUtil.java @@ -0,0 +1,91 @@ +/** + * 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.client; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.apache.hadoop.hbase.HBaseClassTestRule; +import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.client.backoff.ServerStatistics; +import org.apache.hadoop.hbase.testclassification.ClientTests; +import org.apache.hadoop.hbase.testclassification.SmallTests; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category({ClientTests.class, SmallTests.class}) +public class TestResultStatsUtil { + @ClassRule + public static final HBaseClassTestRule CLASS_RULE = + HBaseClassTestRule.forClass(TestResultStatsUtil.class); + + private static final RegionLoadStats regionLoadStats = new RegionLoadStats(100, + 10,90); + private static final byte[] regionName = {80}; + private static final ServerName server = ServerName.parseServerName("3.1.yg.n,50,1"); + + @Test + public void testUpdateStats() { + // Create a tracker + ServerStatisticTracker serverStatisticTracker = new ServerStatisticTracker(); + + // Pass in the tracker for update + ResultStatsUtil.updateStats(serverStatisticTracker, server, regionName, regionLoadStats); + + // Check that the tracker was updated as expected + ServerStatistics stats = serverStatisticTracker.getStats(server); + + assertEquals(regionLoadStats.memstoreLoad, stats.getStatsForRegion(regionName) + .getMemStoreLoadPercent()); + assertEquals(regionLoadStats.compactionPressure, stats.getStatsForRegion(regionName) + .getCompactionPressure()); + assertEquals(regionLoadStats.heapOccupancy, stats.getStatsForRegion(regionName) + .getHeapOccupancyPercent()); + } + + @Test + public void testUpdateStatsRegionNameNull() { + ServerStatisticTracker serverStatisticTracker = new ServerStatisticTracker(); + + ResultStatsUtil.updateStats(serverStatisticTracker, server, null, regionLoadStats); + + ServerStatistics stats = serverStatisticTracker.getStats(server); + assertNull(stats); + } + + @Test + public void testUpdateStatsStatsNull() { + ServerStatisticTracker serverStatisticTracker = new ServerStatisticTracker(); + + ResultStatsUtil.updateStats(serverStatisticTracker, server, regionName, null); + + ServerStatistics stats = serverStatisticTracker.getStats(server); + assertNull(stats); + } + + @Test + public void testUpdateStatsTrackerNull() { + ServerStatisticTracker serverStatisticTracker = new ServerStatisticTracker(); + + ResultStatsUtil.updateStats(null, server, regionName, regionLoadStats); + + ServerStatistics stats = serverStatisticTracker.getStats(server); + assertNull(stats); + } +}