You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2016/07/17 15:14:13 UTC

[2/3] accumulo git commit: ACCUMULO-1604: added check for negate option in ColumnAgeOffFilter and new test in FilterTest

ACCUMULO-1604: added check for negate option in ColumnAgeOffFilter and new test in FilterTest

Closes apache/accumulo#122

Signed-off-by: Josh Elser <el...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/a8f804e9
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/a8f804e9
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/a8f804e9

Branch: refs/heads/master
Commit: a8f804e9e8d0bfe1ff93065e4714483a262440de
Parents: 6848a38
Author: Mike Miller <mi...@gmail.com>
Authored: Tue Jul 5 15:11:26 2016 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Sun Jul 17 11:13:30 2016 -0400

----------------------------------------------------------------------
 .../core/iterators/user/ColumnAgeOffFilter.java |  3 +
 .../core/iterators/user/FilterTest.java         | 81 ++++++++++++++++++++
 2 files changed, 84 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8f804e9/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
index c3da5c1..8093e92 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java
@@ -43,6 +43,9 @@ public class ColumnAgeOffFilter extends Filter {
       for (Entry<String,String> entry : objectStrings.entrySet()) {
         String column = entry.getKey();
         String ttl = entry.getValue();
+        // skip the negate option, it will cause an exception to be thrown
+        if (column.equals(NEGATE) && (ttl.equalsIgnoreCase("true") || ttl.equalsIgnoreCase("false")))
+          continue;
         Long l = Long.parseLong(ttl);
 
         Pair<Text,Text> colPair = ColumnSet.decodeColumns(column);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/a8f804e9/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
index 61d98e6..e7e2266 100644
--- a/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
@@ -250,6 +250,87 @@ public class FilterTest {
     assertEquals(size(a), 902);
   }
 
+  /**
+   * Test for fix to ACCUMULO-1604: ColumnAgeOffFilter was throwing an error when using negate
+   */
+  @Test
+  public void test2aNegate() throws IOException {
+    Text colf = new Text("a");
+    Text colq = new Text("b");
+    Value dv = new Value();
+    TreeMap<Key,Value> tm = new TreeMap<Key,Value>();
+    IteratorSetting is = new IteratorSetting(1, ColumnAgeOffFilter.class);
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a"), 901l);
+    ColumnAgeOffFilter.setNegate(is, true);
+    long ts = System.currentTimeMillis();
+
+    for (long i = 0; i < 1000; i++) {
+      Key k = new Key(new Text(String.format("%03d", i)), colf, colq, ts - i);
+      tm.put(k, dv);
+    }
+    assertTrue(tm.size() == 1000);
+
+    ColumnAgeOffFilter a = new ColumnAgeOffFilter();
+    assertTrue(a.validateOptions(is.getOptions()));
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 98);
+
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("a", "b"), 101l);
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 898);
+
+    ColumnAgeOffFilter.removeTTL(is, new IteratorSetting.Column("a", "b"));
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a = (ColumnAgeOffFilter) a.deepCopy(null);
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 98);
+  }
+
+  /**
+   * Test for fix to ACCUMULO-1604: ColumnAgeOffFilter was throwing an error when using negate Test case for when "negate" is an actual column name
+   */
+  @Test
+  public void test2b() throws IOException {
+    Text colf = new Text("negate");
+    Text colq = new Text("b");
+    Value dv = new Value();
+    TreeMap<Key,Value> tm = new TreeMap<Key,Value>();
+    IteratorSetting is = new IteratorSetting(1, ColumnAgeOffFilter.class);
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("negate"), 901l);
+    long ts = System.currentTimeMillis();
+
+    for (long i = 0; i < 1000; i++) {
+      Key k = new Key(new Text(String.format("%03d", i)), colf, colq, ts - i);
+      tm.put(k, dv);
+    }
+    assertTrue(tm.size() == 1000);
+
+    ColumnAgeOffFilter a = new ColumnAgeOffFilter();
+    assertTrue(a.validateOptions(is.getOptions()));
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 902);
+
+    ColumnAgeOffFilter.addTTL(is, new IteratorSetting.Column("negate", "b"), 101l);
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 102);
+
+    ColumnAgeOffFilter.removeTTL(is, new IteratorSetting.Column("negate", "b"));
+    a.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
+    a = (ColumnAgeOffFilter) a.deepCopy(null);
+    a.overrideCurrentTime(ts);
+    a.seek(new Range(), EMPTY_COL_FAMS, false);
+    assertEquals(size(a), 902);
+  }
+
   @Test
   public void test3() throws IOException {
     Value dv = new Value();