From 9a6bd5b6f1917ea5d484e3cdc35bc1f25abc200e Mon Sep 17 00:00:00 2001 From: Baiqiang Zhao Date: Tue, 9 Feb 2021 23:27:27 +0800 Subject: [PATCH] HBASE-25519 BLOCKSIZE needs to support pretty print (#2944) --- .../hadoop/hbase/HColumnDescriptor.java | 5 ++++ .../client/ColumnFamilyDescriptorBuilder.java | 12 ++++++++ .../TestColumnFamilyDescriptorBuilder.java | 28 +++++++++++++++++++ .../client/TestTableDescriptorBuilder.java | 8 ++++-- hbase-shell/src/main/ruby/hbase/admin.rb | 2 +- 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java index a2039360acc0..ac290dc163cd 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/HColumnDescriptor.java @@ -313,6 +313,11 @@ public HColumnDescriptor setBlocksize(int value) { return this; } + public HColumnDescriptor setBlocksize(String value) throws HBaseException { + getDelegateeForModification().setBlocksize(value); + return this; + } + @Override public Compression.Algorithm getCompressionType() { return delegatee.getCompressionType(); diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java index cf7812ba544d..1d062075752d 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java @@ -312,6 +312,8 @@ public static Unit getUnit(String key) { switch (key) { case TTL: return Unit.TIME_INTERVAL; + case BLOCKSIZE: + return Unit.BYTE; default: return Unit.NONE; } @@ -417,6 +419,11 @@ public ColumnFamilyDescriptorBuilder setBlocksize(int value) { return this; } + public ColumnFamilyDescriptorBuilder setBlocksize(String value) throws HBaseException { + desc.setBlocksize(value); + return this; + } + public ColumnFamilyDescriptorBuilder setBloomFilterType(final BloomType value) { desc.setBloomFilterType(value); return this; @@ -780,6 +787,11 @@ public ModifyableColumnFamilyDescriptor setBlocksize(int s) { return setValue(BLOCKSIZE_BYTES, Integer.toString(s)); } + public ModifyableColumnFamilyDescriptor setBlocksize(String blocksize) throws HBaseException { + return setBlocksize(Integer.parseInt(PrettyPrinter. + valueOf(blocksize, PrettyPrinter.Unit.BYTE))); + } + @Override public Compression.Algorithm getCompressionType() { return getStringOrDefault(COMPRESSION_BYTES, diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.java index 478bc0f8ae7b..15772324c811 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.java @@ -196,6 +196,34 @@ public void testSetTimeToLive() throws HBaseException { Assert.assertEquals(43282800, builder.build().getTimeToLive()); } + @Test + public void testSetBlocksize() throws HBaseException { + String blocksize; + ColumnFamilyDescriptorBuilder builder = + ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("foo")); + + blocksize = "131072"; + builder.setBlocksize(blocksize); + assertEquals(131072, builder.build().getBlocksize()); + + blocksize = "100KB"; + builder.setBlocksize(blocksize); + assertEquals(102400, builder.build().getBlocksize()); + + blocksize = "1MB"; + builder.setBlocksize(blocksize); + assertEquals(1048576, builder.build().getBlocksize()); + + // ignore case + blocksize = "64kb 512B"; + builder.setBlocksize(blocksize); + assertEquals(66048, builder.build().getBlocksize()); + + blocksize = "66048 B (64KB 512B)"; + builder.setBlocksize(blocksize); + assertEquals(66048, builder.build().getBlocksize()); + } + /** * Test for verifying the ColumnFamilyDescriptorBuilder's default values so that backward * compatibility with hbase-1.x can be mantained (see HBASE-24981). diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java index 01e0e0cdadf9..aa4d5a1b5b53 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java @@ -371,7 +371,7 @@ public void testPriority() { public void testStringCustomizedValues() throws HBaseException { byte[] familyName = Bytes.toBytes("cf"); ColumnFamilyDescriptor hcd = ColumnFamilyDescriptorBuilder.newBuilder(familyName) - .setBlocksize(1000) + .setBlocksize(131072) .build(); TableDescriptor htd = TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName())) .setColumnFamily(hcd) @@ -380,7 +380,8 @@ public void testStringCustomizedValues() throws HBaseException { assertEquals( "'testStringCustomizedValues', " + - "{TABLE_ATTRIBUTES => {DURABILITY => 'ASYNC_WAL'}}, {NAME => 'cf', BLOCKSIZE => '1000'}", + "{TABLE_ATTRIBUTES => {DURABILITY => 'ASYNC_WAL'}}, " + + "{NAME => 'cf', BLOCKSIZE => '131072 B (128KB)'}", htd.toStringCustomizedValues()); htd = TableDescriptorBuilder.newBuilder(htd) @@ -391,7 +392,8 @@ public void testStringCustomizedValues() throws HBaseException { "'testStringCustomizedValues', " + "{TABLE_ATTRIBUTES => {DURABILITY => 'ASYNC_WAL', " + "MAX_FILESIZE => '10737942528 B (10GB 512KB)', " - + "MEMSTORE_FLUSHSIZE => '268435456 B (256MB)'}}, {NAME => 'cf', BLOCKSIZE => '1000'}", + + "MEMSTORE_FLUSHSIZE => '268435456 B (256MB)'}}, " + + "{NAME => 'cf', BLOCKSIZE => '131072 B (128KB)'}", htd.toStringCustomizedValues()); } diff --git a/hbase-shell/src/main/ruby/hbase/admin.rb b/hbase-shell/src/main/ruby/hbase/admin.rb index 776c9e3f4ee1..62b2ab1a1569 100644 --- a/hbase-shell/src/main/ruby/hbase/admin.rb +++ b/hbase-shell/src/main/ruby/hbase/admin.rb @@ -1025,7 +1025,7 @@ def hcd(arg, htd) end family.setTimeToLive(arg.delete(ColumnFamilyDescriptorBuilder::TTL)) if arg.include?(ColumnFamilyDescriptorBuilder::TTL) family.setDataBlockEncoding(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding.valueOf(arg.delete(ColumnFamilyDescriptorBuilder::DATA_BLOCK_ENCODING))) if arg.include?(ColumnFamilyDescriptorBuilder::DATA_BLOCK_ENCODING) - family.setBlocksize(JInteger.valueOf(arg.delete(ColumnFamilyDescriptorBuilder::BLOCKSIZE))) if arg.include?(ColumnFamilyDescriptorBuilder::BLOCKSIZE) + family.setBlocksize(arg.delete(ColumnFamilyDescriptorBuilder::BLOCKSIZE)) if arg.include?(ColumnFamilyDescriptorBuilder::BLOCKSIZE) family.setMaxVersions(JInteger.valueOf(arg.delete(HConstants::VERSIONS))) if arg.include?(HConstants::VERSIONS) family.setMinVersions(JInteger.valueOf(arg.delete(ColumnFamilyDescriptorBuilder::MIN_VERSIONS))) if arg.include?(ColumnFamilyDescriptorBuilder::MIN_VERSIONS) family.setKeepDeletedCells(org.apache.hadoop.hbase.KeepDeletedCells.valueOf(arg.delete(ColumnFamilyDescriptorBuilder::KEEP_DELETED_CELLS).to_s.upcase)) if arg.include?(ColumnFamilyDescriptorBuilder::KEEP_DELETED_CELLS)