You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by bi...@apache.org on 2012/11/08 17:39:27 UTC
svn commit: r1407162 - in /accumulo/trunk: ./ assemble/ core/
core/src/main/java/org/apache/accumulo/core/iterators/user/
core/src/test/java/org/apache/accumulo/core/iterators/user/
fate/src/main/java/org/apache/accumulo/fate/ fate/src/main/java/org/ap...
Author: billie
Date: Thu Nov 8 16:39:26 2012
New Revision: 1407162
URL: http://svn.apache.org/viewvc?rev=1407162&view=rev
Log:
ACCUMULO-776 made timestamp filter support longs greater than max date - merged to trunk
Modified:
accumulo/trunk/ (props changed)
accumulo/trunk/assemble/ (props changed)
accumulo/trunk/core/ (props changed)
accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java
accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java (props changed)
accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java (props changed)
accumulo/trunk/server/ (props changed)
accumulo/trunk/src/ (props changed)
Propchange: accumulo/trunk/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src:r1407157
Propchange: accumulo/trunk/assemble/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/assemble:r1407157
Propchange: accumulo/trunk/core/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/core:r1407157
Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java?rev=1407162&r1=1407161&r2=1407162&view=diff
==============================================================================
--- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java (original)
+++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java Thu Nov 8 16:39:26 2012
@@ -17,8 +17,8 @@
package org.apache.accumulo.core.iterators.user;
import java.io.IOException;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Date;
import java.util.Map;
import java.util.TimeZone;
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.iterator
* A Filter that matches entries whose timestamps fall within a range.
*/
public class TimestampFilter extends Filter {
+ private static final String LONG_PREFIX = "LONG";
private final SimpleDateFormat dateParser = initDateParser();
private static SimpleDateFormat initDateParser() {
@@ -86,10 +87,20 @@ public class TimestampFilter extends Fil
throw new IllegalArgumentException("must have either start or end for " + TimestampFilter.class.getName());
try {
- if (hasStart)
- start = dateParser.parse(options.get(START)).getTime();
- if (hasEnd)
- end = dateParser.parse(options.get(END)).getTime();
+ if (hasStart) {
+ String s = options.get(START);
+ if (s.startsWith(LONG_PREFIX))
+ start = Long.valueOf(s.substring(LONG_PREFIX.length()));
+ else
+ start = dateParser.parse(s).getTime();
+ }
+ if (hasEnd) {
+ String s = options.get(END);
+ if (s.startsWith(LONG_PREFIX))
+ end = Long.valueOf(s.substring(LONG_PREFIX.length()));
+ else
+ end = dateParser.parse(s).getTime();
+ }
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
@@ -116,8 +127,8 @@ public class TimestampFilter extends Fil
IteratorOptions io = super.describeOptions();
io.setName("tsfilter");
io.setDescription("TimestampFilter displays entries with timestamps between specified values");
- io.addNamedOption("start", "start timestamp (yyyyMMddHHmmssz)");
- io.addNamedOption("end", "end timestamp (yyyyMMddHHmmssz)");
+ io.addNamedOption("start", "start timestamp (yyyyMMddHHmmssz or LONG<longstring>)");
+ io.addNamedOption("end", "end timestamp (yyyyMMddHHmmssz or LONG<longstring>)");
io.addNamedOption("startInclusive", "true or false");
io.addNamedOption("endInclusive", "true or false");
return io;
@@ -126,11 +137,27 @@ public class TimestampFilter extends Fil
@Override
public boolean validateOptions(Map<String,String> options) {
super.validateOptions(options);
+ boolean hasStart = false;
+ boolean hasEnd = false;
try {
- if (options.containsKey(START))
- dateParser.parse(options.get(START));
- if (options.containsKey(END))
- dateParser.parse(options.get(END));
+ if (options.containsKey(START)) {
+ hasStart = true;
+ String s = options.get(START);
+ if (s.startsWith(LONG_PREFIX))
+ Long.valueOf(s.substring(LONG_PREFIX.length()));
+ else
+ dateParser.parse(s);
+ }
+ if (options.containsKey(END)) {
+ hasEnd = true;
+ String s = options.get(END);
+ if (s.startsWith(LONG_PREFIX))
+ Long.valueOf(s.substring(LONG_PREFIX.length()));
+ else
+ dateParser.parse(s);
+ }
+ if (!hasStart && !hasEnd)
+ return false;
if (options.get(START_INCL) != null)
Boolean.parseBoolean(options.get(START_INCL));
if (options.get(END_INCL) != null)
@@ -185,8 +212,13 @@ public class TimestampFilter extends Fil
* boolean indicating whether the start is inclusive
*/
public static void setStart(IteratorSetting is, String start, boolean startInclusive) {
- is.addOption(START, start);
- is.addOption(START_INCL, Boolean.toString(startInclusive));
+ SimpleDateFormat dateParser = initDateParser();
+ try {
+ long startTS = dateParser.parse(start).getTime();
+ setStart(is, startTS, startInclusive);
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("couldn't parse " + start);
+ }
}
/**
@@ -200,8 +232,13 @@ public class TimestampFilter extends Fil
* boolean indicating whether the end is inclusive
*/
public static void setEnd(IteratorSetting is, String end, boolean endInclusive) {
- is.addOption(END, end);
- is.addOption(END_INCL, Boolean.toString(endInclusive));
+ SimpleDateFormat dateParser = initDateParser();
+ try {
+ long endTS = dateParser.parse(end).getTime();
+ setEnd(is, endTS, endInclusive);
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("couldn't parse " + end);
+ }
}
/**
@@ -248,8 +285,7 @@ public class TimestampFilter extends Fil
* boolean indicating whether the start is inclusive
*/
public static void setStart(IteratorSetting is, long start, boolean startInclusive) {
- SimpleDateFormat dateParser = initDateParser();
- is.addOption(START, dateParser.format(new Date(start)));
+ is.addOption(START, LONG_PREFIX + Long.toString(start));
is.addOption(START_INCL, Boolean.toString(startInclusive));
}
@@ -264,8 +300,7 @@ public class TimestampFilter extends Fil
* boolean indicating whether the end is inclusive
*/
public static void setEnd(IteratorSetting is, long end, boolean endInclusive) {
- SimpleDateFormat dateParser = initDateParser();
- is.addOption(END, dateParser.format(new Date(end)));
+ is.addOption(END, LONG_PREFIX + Long.toString(end));
is.addOption(END_INCL, Boolean.toString(endInclusive));
}
}
Modified: accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java?rev=1407162&r1=1407161&r2=1407162&view=diff
==============================================================================
--- accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java (original)
+++ accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java Thu Nov 8 16:39:26 2012
@@ -17,6 +17,7 @@
package org.apache.accumulo.core.iterators.user;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
@@ -197,6 +198,8 @@ public class FilterTest {
AgeOffFilter.setTTL(is, 101l);
AgeOffFilter.setCurrentTime(is, 1001l);
AgeOffFilter.setNegate(is, true);
+ assertTrue(((AgeOffFilter) a).validateOptions(is.getOptions()));
+ assertFalse(((AgeOffFilter) a).validateOptions(EMPTY_OPTS));
a.init(new SortedMapIterator(tm), is.getOptions(), null);
a = a.deepCopy(null);
SortedKeyValueIterator<Key,Value> copy = a.deepCopy(null);
@@ -223,6 +226,7 @@ public class FilterTest {
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);
@@ -429,6 +433,7 @@ public class FilterTest {
assertEquals(size(a), 89);
TimestampFilter.setStart(is, "19990101000011GMT", false);
+ assertTrue(a.validateOptions(is.getOptions()));
a.init(new SortedMapIterator(tm), is.getOptions(), null);
a.seek(new Range(), EMPTY_COL_FAMS, false);
assertEquals(size(a), 88);
@@ -440,9 +445,29 @@ public class FilterTest {
assertEquals(size(a), 32);
TimestampFilter.setEnd(is, "19990101000031GMT", false);
+ assertTrue(a.validateOptions(is.getOptions()));
a.init(new SortedMapIterator(tm), is.getOptions(), null);
a.seek(new Range(), EMPTY_COL_FAMS, false);
assertEquals(size(a), 31);
+
+ TimestampFilter.setEnd(is, 253402300800001l, true);
+ a.init(new SortedMapIterator(tm), is.getOptions(), null);
+
+ is.clearOptions();
+ is.addOption(TimestampFilter.START, "19990101000011GMT");
+ assertTrue(a.validateOptions(is.getOptions()));
+ a.init(new SortedMapIterator(tm), is.getOptions(), null);
+ a.seek(new Range(), EMPTY_COL_FAMS, false);
+ assertEquals(size(a), 89);
+
+ is.clearOptions();
+ is.addOption(TimestampFilter.END, "19990101000031GMT");
+ assertTrue(a.validateOptions(is.getOptions()));
+ a.init(new SortedMapIterator(tm), is.getOptions(), null);
+ a.seek(new Range(), EMPTY_COL_FAMS, false);
+ assertEquals(size(a), 32);
+
+ assertFalse(a.validateOptions(EMPTY_OPTS));
}
@Test
Modified: accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java
URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java?rev=1407162&r1=1407161&r2=1407162&view=diff
==============================================================================
--- accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java (original)
+++ accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/RegExFilterTest.java Thu Nov 8 16:39:26 2012
@@ -59,7 +59,7 @@ public class RegExFilterTest extends Tes
IteratorSetting is = new IteratorSetting(1, RegExFilter.class);
RegExFilter.setRegexs(is, ".*2", null, null, null, false);
- rei.validateOptions(is.getOptions());
+ assertTrue(rei.validateOptions(is.getOptions()));
rei.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
rei.seek(new Range(), EMPTY_COL_FAMS, false);
@@ -87,7 +87,7 @@ public class RegExFilterTest extends Tes
is.clearOptions();
RegExFilter.setRegexs(is, null, "ya.*", null, null, false);
- rei.validateOptions(is.getOptions());
+ assertTrue(rei.validateOptions(is.getOptions()));
rei.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
rei.seek(new Range(), EMPTY_COL_FAMS, false);
@@ -100,7 +100,7 @@ public class RegExFilterTest extends Tes
is.clearOptions();
RegExFilter.setRegexs(is, null, null, ".*01", null, false);
- rei.validateOptions(is.getOptions());
+ assertTrue(rei.validateOptions(is.getOptions()));
rei.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
rei.seek(new Range(), EMPTY_COL_FAMS, false);
@@ -113,7 +113,7 @@ public class RegExFilterTest extends Tes
is.clearOptions();
RegExFilter.setRegexs(is, null, null, null, ".*at", false);
- rei.validateOptions(is.getOptions());
+ assertTrue(rei.validateOptions(is.getOptions()));
rei.init(new SortedMapIterator(tm), is.getOptions(), new DefaultIteratorEnvironment());
rei.seek(new Range(), EMPTY_COL_FAMS, false);
Propchange: accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/fate/src/main/java/org/apache/accumulo/fate/ZooStore.java:r1407157
Propchange: accumulo/trunk/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/fate/src/main/java/org/apache/accumulo/fate/zookeeper/ZooSession.java:r1407157
Propchange: accumulo/trunk/server/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/server:r1407157
Propchange: accumulo/trunk/src/
------------------------------------------------------------------------------
Merged /accumulo/branches/1.4/src/src:r1407157