This is an automated email from the ASF dual-hosted git repository.

apurtell 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 050caf4  HBASE-21475 Put mutation (having TTL set) added via 
co-processor is retrieved even after TTL expires
050caf4 is described below

commit 050caf425e2957e6aea93c5d7460480a78c5f75f
Author: Nihal Jain <[email protected]>
AuthorDate: Tue Nov 13 23:25:13 2018 +0530

    HBASE-21475 Put mutation (having TTL set) added via co-processor is 
retrieved even after TTL expires
    
    Signed-off-by: Andrew Purtell <[email protected]>
---
 .../apache/hadoop/hbase/regionserver/HRegion.java  |  1 +
 ...ObserverForAddingMutationsFromCoprocessors.java | 33 ++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index b04f548..94df018 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -3822,6 +3822,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
           // Returned mutations from coprocessor correspond to the Mutation at 
index i. We can
           // directly add the cells from those mutations to the familyMaps of 
this mutation.
           Map<byte[], List<Cell>> cpFamilyMap = cpMutation.getFamilyCellMap();
+          region.rewriteCellTags(cpFamilyMap, mutation);
           // will get added to the memStore later
           mergeFamilyMaps(familyCellMaps[i], cpFamilyMap);
 
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.java
index 73e0674..21435d9 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.java
@@ -200,6 +200,39 @@ public class 
TestRegionObserverForAddingMutationsFromCoprocessors {
     }
   }
 
+  @Test
+  public void testPutWithTTL() throws Exception {
+    createTable(TestPutWithTTLCoprocessor.class.getName());
+
+    try (Table t = util.getConnection().getTable(tableName)) {
+      t.put(new Put(row1).addColumn(test, dummy, dummy).setTTL(3000));
+      assertRowCount(t, 2);
+      // wait long enough for the TTL to expire
+      Thread.sleep(5000);
+      assertRowCount(t, 0);
+    }
+  }
+
+  public static class TestPutWithTTLCoprocessor implements RegionCoprocessor, 
RegionObserver {
+    @Override
+    public Optional<RegionObserver> getRegionObserver() {
+      return Optional.of(this);
+    }
+
+    @Override
+    public void preBatchMutate(ObserverContext<RegionCoprocessorEnvironment> c,
+        MiniBatchOperationInProgress<Mutation> miniBatchOp) throws IOException 
{
+      Mutation mut = miniBatchOp.getOperation(0);
+      List<Cell> cells = mut.getFamilyCellMap().get(test);
+      Put[] puts = new Put[] {
+          new Put(Bytes.toBytes("cpPut")).addColumn(test, dummy, 
cells.get(0).getTimestamp(),
+            Bytes.toBytes("cpdummy")).setTTL(mut.getTTL())
+          };
+      LOG.info("Putting:" + Arrays.toString(puts));
+      miniBatchOp.addOperationsFromCP(0, puts);
+    }
+  }
+
   public static class TestMultiMutationCoprocessor implements 
RegionCoprocessor, RegionObserver {
     @Override
     public Optional<RegionObserver> getRegionObserver() {

Reply via email to