hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vjas...@apache.org
Subject [hbase] branch master updated: HBASE-24979 : Client operation timeout test for batch requests
Date Tue, 08 Sep 2020 12:22:38 GMT
This is an automated email from the ASF dual-hosted git repository.

vjasani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 0d95a8f  HBASE-24979 : Client operation timeout test for batch requests
0d95a8f is described below

commit 0d95a8f91bc3a479a0fdbd758cf3264e73c5d3ca
Author: Viraj Jasani <vjasani@apache.org>
AuthorDate: Tue Sep 8 17:47:08 2020 +0530

    HBASE-24979 : Client operation timeout test for batch requests
    
    Closes #2347
    
    Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
    Signed-off-by: Guanghao Zhang <zghao@apache.org>
---
 .../hadoop/hbase/TestClientOperationTimeout.java   | 85 ++++++++++++++++++----
 1 file changed, 72 insertions(+), 13 deletions(-)

diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestClientOperationTimeout.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestClientOperationTimeout.java
index 52f0c7d..10a3cb7 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestClientOperationTimeout.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestClientOperationTimeout.java
@@ -19,6 +19,8 @@ package org.apache.hadoop.hbase;
 
 import java.io.IOException;
 import java.net.SocketTimeoutException;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
 import org.apache.hadoop.hbase.client.Connection;
@@ -30,12 +32,15 @@ import org.apache.hadoop.hbase.client.RetriesExhaustedException;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
+import org.apache.hadoop.hbase.exceptions.TimeoutIOException;
+import org.apache.hadoop.hbase.ipc.CallTimeoutException;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.regionserver.RSRpcServices;
 import org.apache.hadoop.hbase.testclassification.ClientTests;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.AfterClass;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -74,6 +79,7 @@ public class TestClientOperationTimeout {
   private static int DELAY_GET;
   private static int DELAY_SCAN;
   private static int DELAY_MUTATE;
+  private static int DELAY_BATCH_MUTATE;
 
   private static final TableName TABLE_NAME = TableName.valueOf("Timeout");
   private static final byte[] FAMILY = Bytes.toBytes("family");
@@ -107,6 +113,7 @@ public class TestClientOperationTimeout {
     DELAY_GET = 0;
     DELAY_SCAN = 0;
     DELAY_MUTATE = 0;
+    DELAY_BATCH_MUTATE = 0;
   }
 
   @AfterClass
@@ -117,37 +124,78 @@ public class TestClientOperationTimeout {
   }
 
   /**
-   * Tests that a get on a table throws {@link SocketTimeoutException} when the operation
takes
+   * Tests that a get on a table throws {@link RetriesExhaustedException} when the operation
takes
    * longer than 'hbase.client.operation.timeout'.
    */
-  @Test(expected = RetriesExhaustedException.class)
-  public void testGetTimeout() throws Exception {
+  @Test
+  public void testGetTimeout() {
     DELAY_GET = 600;
-    TABLE.get(new Get(ROW));
+    try {
+      TABLE.get(new Get(ROW));
+      Assert.fail("should not reach here");
+    } catch (Exception e) {
+      Assert.assertTrue(
+        e instanceof RetriesExhaustedException && e.getCause() instanceof CallTimeoutException);
+    }
   }
 
   /**
-   * Tests that a put on a table throws {@link SocketTimeoutException} when the operation
takes
+   * Tests that a put on a table throws {@link RetriesExhaustedException} when the operation
takes
    * longer than 'hbase.client.operation.timeout'.
    */
-  @Test(expected = RetriesExhaustedException.class)
-  public void testPutTimeout() throws Exception {
+  @Test
+  public void testPutTimeout() {
     DELAY_MUTATE = 600;
-
     Put put = new Put(ROW);
     put.addColumn(FAMILY, QUALIFIER, VALUE);
-    TABLE.put(put);
+    try {
+      TABLE.put(put);
+      Assert.fail("should not reach here");
+    } catch (Exception e) {
+      Assert.assertTrue(
+        e instanceof RetriesExhaustedException && e.getCause() instanceof CallTimeoutException);
+    }
+  }
+
+  /**
+   * Tests that a batch mutate on a table throws {@link RetriesExhaustedException} when the
+   * operation takes longer than 'hbase.client.operation.timeout'.
+   */
+  @Test
+  public void testMultiPutsTimeout() {
+    DELAY_BATCH_MUTATE = 600;
+    Put put1 = new Put(ROW);
+    put1.addColumn(FAMILY, QUALIFIER, VALUE);
+    Put put2 = new Put(ROW);
+    put2.addColumn(FAMILY, QUALIFIER, VALUE);
+    List<Put> puts = new ArrayList<>();
+    puts.add(put1);
+    puts.add(put2);
+    try {
+      TABLE.batch(puts, new Object[2]);
+      Assert.fail("should not reach here");
+    } catch (Exception e) {
+      Assert.assertTrue(
+        e instanceof RetriesExhaustedException && e.getCause() instanceof RetriesExhaustedException
+          && e.getCause().getCause() instanceof CallTimeoutException);
+    }
   }
 
   /**
    * Tests that scan on a table throws {@link RetriesExhaustedException} when the operation
takes
    * longer than 'hbase.client.scanner.timeout.period'.
    */
-  @Test(expected = RetriesExhaustedException.class)
-  public void testScanTimeout() throws Exception {
+  @Test
+  public void testScanTimeout() {
     DELAY_SCAN = 600;
-    ResultScanner scanner = TABLE.getScanner(new Scan());
-    scanner.next();
+    try {
+      ResultScanner scanner = TABLE.getScanner(new Scan());
+      scanner.next();
+      Assert.fail("should not reach here");
+    } catch (Exception e) {
+      Assert.assertTrue(
+        e instanceof RetriesExhaustedException && e.getCause() instanceof TimeoutIOException);
+    }
   }
 
   private static class DelayedRegionServer extends MiniHBaseCluster.MiniHBaseClusterRegionServer
{
@@ -201,5 +249,16 @@ public class TestClientOperationTimeout {
       }
       return super.scan(controller, request);
     }
+
+    @Override
+    public ClientProtos.MultiResponse multi(RpcController rpcc, ClientProtos.MultiRequest
request)
+        throws ServiceException {
+      try {
+        Thread.sleep(DELAY_BATCH_MUTATE);
+      } catch (InterruptedException e) {
+        LOG.error("Sleep interrupted during multi operation", e);
+      }
+      return super.multi(rpcc, request);
+    }
   }
 }


Mime
View raw message