From 74e533d5ab69eaed3ece6b50f61ec1d550e96d00 Mon Sep 17 00:00:00 2001 From: Geoffrey Jacoby Date: Fri, 9 Apr 2021 13:05:47 -0700 Subject: [PATCH] HBASE-25751 - Add writable TimeToPurgeDeletes to ScanOptions (#3137) Signed-off-by: Andrew Purtell Signed-off-by: Duo Zhang Signed-off-by: Viraj Jasani --- .../regionserver/CustomizedScanInfoBuilder.java | 16 ++++++++++++++-- .../hadoop/hbase/regionserver/ScanInfo.java | 10 +++++++--- .../hadoop/hbase/regionserver/ScanOptions.java | 4 ++++ .../hbase/coprocessor/SimpleRegionObserver.java | 1 + .../coprocessor/TestRegionCoprocessorHost.java | 2 ++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CustomizedScanInfoBuilder.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CustomizedScanInfoBuilder.java index ac9980b01a0..7dae7ac3d07 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CustomizedScanInfoBuilder.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CustomizedScanInfoBuilder.java @@ -17,7 +17,6 @@ */ package org.apache.hadoop.hbase.regionserver; -import java.io.IOException; import org.apache.hadoop.hbase.KeepDeletedCells; import org.apache.hadoop.hbase.client.ImmutableScan; import org.apache.hadoop.hbase.client.Scan; @@ -39,6 +38,8 @@ public class CustomizedScanInfoBuilder implements ScanOptions { private Integer minVersions; + private long timeToPurgeDeletes; + private final Scan scan; public CustomizedScanInfoBuilder(ScanInfo scanInfo) { @@ -76,7 +77,8 @@ public class CustomizedScanInfoBuilder implements ScanOptions { if (maxVersions == null && ttl == null && keepDeletedCells == null) { return scanInfo; } - return scanInfo.customize(getMaxVersions(), getTTL(), getKeepDeletedCells(), getMinVersions()); + return scanInfo.customize(getMaxVersions(), getTTL(), getKeepDeletedCells(), getMinVersions(), + getTimeToPurgeDeletes()); } @Override @@ -105,6 +107,16 @@ public class CustomizedScanInfoBuilder implements ScanOptions { this.minVersions = minVersions; } + @Override + public long getTimeToPurgeDeletes() { + return timeToPurgeDeletes; + } + + @Override + public void setTimeToPurgeDeletes(long ttl) { + this.timeToPurgeDeletes = ttl; + } + @Override public Scan getScan() { return scan; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanInfo.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanInfo.java index 4e2066601c5..831ce01f871 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanInfo.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanInfo.java @@ -168,14 +168,18 @@ public class ScanInfo { } /** - * Used for CP users for customizing max versions, ttl and keepDeletedCells. + * Used by CP users for customizing max versions, ttl and keepDeletedCells. */ ScanInfo customize(int maxVersions, long ttl, KeepDeletedCells keepDeletedCells) { - return customize(maxVersions, ttl, keepDeletedCells, minVersions); + return customize(maxVersions, ttl, keepDeletedCells, minVersions, timeToPurgeDeletes); } + /** + * Used by CP users for customizing max versions, ttl, keepDeletedCells, min versions, + * and time to purge deletes. + */ ScanInfo customize(int maxVersions, long ttl, KeepDeletedCells keepDeletedCells, - int minVersions) { + int minVersions, long timeToPurgeDeletes) { return new ScanInfo(family, minVersions, maxVersions, ttl, keepDeletedCells, timeToPurgeDeletes, comparator, tableMaxRowSize, usePread, cellsPerTimeoutCheck, parallelSeekEnabled, preadMaxBytes, newVersionBehavior); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanOptions.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanOptions.java index e81f3ce4b30..a51cfb867d0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanOptions.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanOptions.java @@ -71,6 +71,10 @@ public interface ScanOptions { void setMinVersions(int minVersions); + long getTimeToPurgeDeletes(); + + void setTimeToPurgeDeletes(long ttl); + /** * Returns a copy of the Scan object. Modifying it will have no effect. */ diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java index e432acdda1d..fb1da66e603 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.java @@ -745,6 +745,7 @@ public class SimpleRegionObserver implements RegionCoprocessor, RegionObserver { options.setMinVersions(TestRegionCoprocessorHost.MIN_VERSIONS); options.setKeepDeletedCells(KeepDeletedCells.TRUE); options.setTTL(TestRegionCoprocessorHost.TTL); + options.setTimeToPurgeDeletes(TestRegionCoprocessorHost.TIME_TO_PURGE_DELETES); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java index b0188d9b7ce..66077619cf4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java @@ -78,6 +78,7 @@ public class TestRegionCoprocessorHost { public static final int MAX_VERSIONS = 3; public static final int MIN_VERSIONS = 2; public static final int TTL = 1000; + public static final int TIME_TO_PURGE_DELETES = 2000; @Before public void setup() throws IOException { @@ -203,6 +204,7 @@ public class TestRegionCoprocessorHost { assertEquals(MAX_VERSIONS, newScanInfo.getMaxVersions()); assertEquals(MIN_VERSIONS, newScanInfo.getMinVersions()); assertEquals(TTL, newScanInfo.getTtl()); + assertEquals(TIME_TO_PURGE_DELETES, newScanInfo.getTimeToPurgeDeletes()); } private ScanInfo getScanInfo() {