From dc57996ca6d52b48c7f274956c0deca513ea7a83 Mon Sep 17 00:00:00 2001 From: Jonathan M Hsieh Date: Thu, 14 Jan 2016 07:59:33 -0800 Subject: [PATCH] HBASE-15104 Occasional failures due to NotServingRegionException in IT tests (Huaxiang Sun) --- .../actions/ChangeCompressionAction.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.java index 0d7f7aeafbf..9c7bf45e3ab 100644 --- a/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.java +++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.io.compress.Compression.Algorithm; +import org.apache.hadoop.io.compress.Compressor; /** * Action that changes the compression algorithm on a column family from a list of tables. @@ -62,7 +63,25 @@ public class ChangeCompressionAction extends Action { // Since not every compression algorithm is supported, // let's use the same algorithm for all column families. - Algorithm algo = possibleAlgos[random.nextInt(possibleAlgos.length)]; + + // If an unsupported compression algorithm is chosen, pick a different one. + // This is to work around the issue that modifyTable() does not throw remote + // exception. + Algorithm algo; + do { + algo = possibleAlgos[random.nextInt(possibleAlgos.length)]; + + try { + Compressor c = algo.getCompressor(); + + // call returnCompressor() to release the Compressor + algo.returnCompressor(c); + break; + } catch (Throwable t) { + LOG.info("Performing action: Changing compression algorithms to " + algo + + " is not supported, pick another one"); + } + } while (true); LOG.debug("Performing action: Changing compression algorithms on " + tableName.getNameAsString() + " to " + algo);