You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ec...@apache.org on 2014/08/01 00:08:22 UTC
[46/50] [abbrv] git commit: [master] Add test for
SizeAwareThriftHRegionServer
[master] Add test for SizeAwareThriftHRegionServer
Summary: Add a test
Test Plan: Unit test only
Reviewers: manukranthk, rshroff
Reviewed By: manukranthk, rshroff
Subscribers: hbase-prodeng@, hbase-eng@
Differential Revision: https://phabricator.fb.com/D1409864
git-svn-id: svn+ssh://tubbs/svnhive/hadoop/branches/titan/VENDOR.hbase/hbase-trunk@43220 e7acf4d4-3532-417f-9e73-7a9ae25a1f51
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4282d5d0
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4282d5d0
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4282d5d0
Branch: refs/heads/0.89-fb
Commit: 4282d5d0f2b6e5716a74eef7ae0953783c68889b
Parents: 6b30de6
Author: elliott <el...@e7acf4d4-3532-417f-9e73-7a9ae25a1f51>
Authored: Sat Jun 28 01:34:14 2014 +0000
Committer: Elliott Clark <el...@fb.com>
Committed: Thu Jul 31 14:44:24 2014 -0700
----------------------------------------------------------------------
.../SizeAwareThriftHRegionServer.java | 13 ++-
.../TestSizeAwareThriftHRegionServer.java | 116 +++++++++++++++++++
2 files changed, 123 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/4282d5d0/src/main/java/org/apache/hadoop/hbase/regionserver/SizeAwareThriftHRegionServer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/SizeAwareThriftHRegionServer.java b/src/main/java/org/apache/hadoop/hbase/regionserver/SizeAwareThriftHRegionServer.java
index d2526c6..a0c4476 100644
--- a/src/main/java/org/apache/hadoop/hbase/regionserver/SizeAwareThriftHRegionServer.java
+++ b/src/main/java/org/apache/hadoop/hbase/regionserver/SizeAwareThriftHRegionServer.java
@@ -10,6 +10,7 @@ import org.apache.hadoop.hbase.client.MultiPut;
import org.apache.hadoop.hbase.client.MultiPutResponse;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.TMultiResponse;
+import org.apache.hadoop.hbase.ipc.thrift.exceptions.ThriftHBaseException;
import javax.annotation.Nullable;
import java.util.List;
@@ -35,7 +36,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
@@ -51,7 +52,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
@@ -79,7 +80,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
@@ -97,7 +98,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
@@ -110,7 +111,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
@@ -126,7 +127,7 @@ public class SizeAwareThriftHRegionServer extends ThriftHRegionServer {
Futures.addCallback(f, new DecrementWriteSizeCallback(heapSize));
return f;
} else {
- return Futures.immediateFailedFuture(new RegionOverloadedException());
+ return Futures.immediateFailedFuture(new ThriftHBaseException(new RegionOverloadedException()));
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/4282d5d0/src/test/java/org/apache/hadoop/hbase/regionserver/TestSizeAwareThriftHRegionServer.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/hadoop/hbase/regionserver/TestSizeAwareThriftHRegionServer.java b/src/test/java/org/apache/hadoop/hbase/regionserver/TestSizeAwareThriftHRegionServer.java
new file mode 100644
index 0000000..4b992dc
--- /dev/null
+++ b/src/test/java/org/apache/hadoop/hbase/regionserver/TestSizeAwareThriftHRegionServer.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright 2008 The Apache Software Foundation
+ *
+ * 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.regionserver;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.util.ArrayList;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static org.junit.Assert.assertTrue;
+
+@Category(MediumTests.class)
+public class TestSizeAwareThriftHRegionServer {
+
+ private static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+
+ private ExecutorService service = Executors.newFixedThreadPool(20);
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ Configuration configuration = TEST_UTIL.getConfiguration();
+ configuration.setLong("max.callqueue.memory.size", 1024 * 5);
+ configuration.setInt("hbase.client.retries.number", 3);
+ TEST_UTIL.startMiniCluster(1);
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ TEST_UTIL.shutdownMiniCluster();
+ }
+
+ @Test
+ public void testSize() throws Exception {
+ String tableName = "testSizeThrottle";
+ final byte[] tableNameBytes = Bytes.toBytes(tableName);
+ final byte[] cf = Bytes.toBytes("d");
+ TEST_UTIL.createTable(tableNameBytes, cf);
+
+ HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
+ ht.setAutoFlush(false);
+ Put smallPut = new Put(Bytes.toBytes("a"));
+ smallPut.add(cf, Bytes.toBytes(0), Bytes.toBytes("1"));
+
+ // This should work.
+ ht.put(smallPut);
+ ht.flushCommits();
+
+ final AtomicBoolean threw = new AtomicBoolean(false);
+
+ final ArrayList<Future<Void>> futures = new ArrayList<>();
+
+ // Since there's so many threads some of these should fail.
+ for (int i = 0; i < 20; i++) {
+ futures.add(service.submit(new Callable<Void>() {
+ @Override public Void call() throws Exception {
+
+ HTable t = new HTable(TEST_UTIL.getConfiguration(), tableNameBytes);
+ t.setAutoFlush(false);
+ for (int y = 0; y < 100; y++) {
+ Put p = new Put(Bytes.toBytes("test"));
+ for (int x = 0; x < 1000; x++) {
+ p.add(cf, Bytes.toBytes(x), Bytes.toBytes("b"));
+ }
+ try {
+ t.put(p);
+ t.flushCommits();
+ } catch (Exception roe) {
+ threw.set(true);
+ }
+
+ }
+
+ t.close();
+
+ return null;
+ }
+ }));
+ }
+
+ for (Future<Void> f : futures) {
+ f.get();
+ }
+
+ assertTrue("Should have caught a region too busy exception", threw.get());
+ }
+}