Author: billie Date: Thu Jan 17 16:05:12 2013 New Revision: 1434751 URL: http://svn.apache.org/viewvc?rev=1434751&view=rev Log: ACCUMULO-846 cleaned up options validation
Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/AggregatingIterator.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/OptionDescriber.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyIterator.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/TypedValueCombiner.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/TimestampFilter.java accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java accumulo/trunk/core/src/test/java/org/apache/accumulo/core/iterators/user/FilterTest.java accumulo/trunk/examples/simple/src/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/AggregatingIterator.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/AggregatingIterator.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/AggregatingIterator.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/AggregatingIterator.java Thu Jan 17 16:05:12 2013 @@ -190,7 +190,7 @@ public class AggregatingIterator impleme for (Entry<String,String> entry : options.entrySet()) { String classname = entry.getValue(); if (classname == null) - return false; + throw new IllegalArgumentException("classname null"); Class<? extends Aggregator> clazz; try { clazz = AccumuloVFSClassLoader.loadClass(classname, Aggregator.class); Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Combiner.java Thu Jan 17 16:05:12 2013 @@ -35,13 +35,13 @@ import org.apache.accumulo.core.iterator import org.apache.log4j.Logger; /** - * A SortedKeyValueIterator that combines the Values for different versions (timestamps) of a Key into a single Value. Combiner will replace one or more versions of a Key - * and their Values with the most recent Key and a Value which is the result of the reduce method. + * A SortedKeyValueIterator that combines the Values for different versions (timestamps) of a Key into a single Value. Combiner will replace one or more + * versions of a Key and their Values with the most recent Key and a Value which is the result of the reduce method. * * Subclasses must implement a reduce method: {@code public Value reduce(Key key, Iterator<Value> iter)}. * - * This reduce method will be passed the most recent Key and an iterator over the Values for all non-deleted versions of that Key. - * A combiner will not combine keys that differ by more than the timestamp. + * This reduce method will be passed the most recent Key and an iterator over the Values for all non-deleted versions of that Key. A combiner will not combine + * keys that differ by more than the timestamp. */ public abstract class Combiner extends WrappingIterator implements OptionDescriber { static final Logger log = Logger.getLogger(Combiner.class); @@ -254,20 +254,24 @@ public abstract class Combiner extends W @Override public boolean validateOptions(Map<String,String> options) { if (options.containsKey(ALL_OPTION)) { - combineAllColumns = Boolean.parseBoolean(options.get(ALL_OPTION)); + try { + combineAllColumns = Boolean.parseBoolean(options.get(ALL_OPTION)); + } catch (Exception e) { + throw new IllegalArgumentException("bad boolean " + ALL_OPTION + ":" + options.get(ALL_OPTION)); + } if (combineAllColumns) return true; } if (!options.containsKey(COLUMNS_OPTION)) - return false; + throw new IllegalArgumentException("options must include " + ALL_OPTION + " or " + COLUMNS_OPTION); String encodedColumns = options.get(COLUMNS_OPTION); if (encodedColumns.length() == 0) - return false; + throw new IllegalArgumentException("empty columns specified in option " + COLUMNS_OPTION); for (String columns : encodedColumns.split(",")) { if (!ColumnSet.isValidEncoding(columns)) - return false; + throw new IllegalArgumentException("invalid column encoding " + encodedColumns); } return true; Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java Thu Jan 17 16:05:12 2013 @@ -101,7 +101,11 @@ public abstract class Filter extends Wra @Override public boolean validateOptions(Map<String,String> options) { if (options.get(NEGATE) != null) { - Boolean.parseBoolean(options.get(NEGATE)); + try { + Boolean.parseBoolean(options.get(NEGATE)); + } catch (Exception e) { + throw new IllegalArgumentException("bad boolean " + NEGATE + ":" + options.get(NEGATE)); + } } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java Thu Jan 17 16:05:12 2013 @@ -92,8 +92,7 @@ public class FirstEntryInRowIterator ext Key nextKey = getSource().getTopKey().followingKey(PartialKey.ROW); if (!latestRange.afterEndKey(nextKey)) getSource().seek(new Range(nextKey, true, latestRange.getEndKey(), latestRange.isEndKeyInclusive()), latestColumnFamilies, latestInclusive); - else - { + else { finished = true; break; } @@ -103,13 +102,12 @@ public class FirstEntryInRowIterator ext } private boolean finished = true; - + @Override - public boolean hasTop() - { + public boolean hasTop() { return !finished && getSource().hasTop(); } - + @Override public void seek(Range range, Collection<ByteSequence> columnFamilies, boolean inclusive) throws IOException { // save parameters for future internal seeks @@ -122,7 +120,7 @@ public class FirstEntryInRowIterator ext Range seekRange = new Range(startKey == null ? null : new Key(startKey.getRow()), true, range.getEndKey(), range.isEndKeyInclusive()); super.seek(seekRange, columnFamilies, inclusive); finished = false; - + if (getSource().hasTop()) { lastRowFound = getSource().getTopKey().getRow(); if (range.beforeStartKey(getSource().getTopKey())) @@ -143,11 +141,12 @@ public class FirstEntryInRowIterator ext public boolean validateOptions(Map<String,String> options) { try { String o = options.get(NUM_SCANS_STRING_NAME); - Integer i = o == null ? 10 : Integer.parseInt(o); - return i != null; + if (o != null) + Integer.parseInt(o); } catch (Exception e) { - return false; + throw new IllegalArgumentException("bad integer " + NUM_SCANS_STRING_NAME + ":" + options.get(NUM_SCANS_STRING_NAME), e); } + return true; } } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/LongCombiner.java Thu Jan 17 16:05:12 2013 @@ -102,8 +102,13 @@ public abstract class LongCombiner exten @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); - setEncoder(options); + if (super.validateOptions(options) == false) + return false; + try { + setEncoder(options); + } catch (Exception e) { + throw new IllegalArgumentException("bad encoder option", e); + } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/OptionDescriber.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/OptionDescriber.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/OptionDescriber.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/OptionDescriber.java Thu Jan 17 16:05:12 2013 @@ -122,7 +122,9 @@ public interface OptionDescriber { * * @param options * a map of option names to option values - * @return true if options are valid, false otherwise + * @return true if options are valid, false otherwise (IllegalArgumentException preferred) + * @exception IllegalArgumentException + * if there are problems with the options */ public boolean validateOptions(Map<String,String> options); } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyIterator.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyIterator.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyIterator.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/SortedKeyIterator.java Thu Jan 17 16:05:12 2013 @@ -47,6 +47,6 @@ public class SortedKeyIterator extends W @Override public boolean validateOptions(Map<String,String> options) { - return options == null || options.isEmpty(); + return true; } } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/TypedValueCombiner.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/TypedValueCombiner.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/TypedValueCombiner.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/TypedValueCombiner.java Thu Jan 17 16:05:12 2013 @@ -211,8 +211,13 @@ public abstract class TypedValueCombiner @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); - setLossyness(options); + if (super.validateOptions(options) == false) + return false; + try { + setLossyness(options); + } catch (Exception e) { + throw new IllegalArgumentException("bad boolean " + LOSSY + ":" + options.get(LOSSY)); + } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/AgeOffFilter.java Thu Jan 17 16:05:12 2013 @@ -91,11 +91,12 @@ public class AgeOffFilter extends Filter @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); + if (super.validateOptions(options) == false) + return false; try { Long.parseLong(options.get(TTL)); - } catch (NumberFormatException e) { - return false; + } catch (Exception e) { + throw new IllegalArgumentException("bad long " + TTL + ":" + options.get(TTL)); } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/ColumnAgeOffFilter.java Thu Jan 17 16:05:12 2013 @@ -99,8 +99,13 @@ public class ColumnAgeOffFilter extends @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); - this.ttls = new TTLSet(options); + if (super.validateOptions(options) == false) + return false; + try { + this.ttls = new TTLSet(options); + } catch (Exception e) { + throw new IllegalArgumentException("bad TTL options", e); + } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/LargeRowFilter.java Thu Jan 17 16:05:12 2013 @@ -257,20 +257,15 @@ public class LargeRowFilter implements S @Override public boolean validateOptions(Map<String,String> options) { if (options == null || options.size() < 1) { - System.out.println("Bad # of options, must supply: " + MAX_COLUMNS + " as value"); - return false; + throw new IllegalArgumentException("Bad # of options, must supply: " + MAX_COLUMNS + " as value"); } - if (options.containsKey(MAX_COLUMNS)) { - try { - maxColumns = Integer.parseInt(options.get(MAX_COLUMNS)); - } catch (NumberFormatException e) { - e.printStackTrace(); - return false; - } - } else { - System.out.println("Need to have " + MAX_COLUMNS); - return false; + if (!options.containsKey(MAX_COLUMNS)) + throw new IllegalArgumentException("Bad # of options, must supply: " + MAX_COLUMNS + " as value"); + try { + maxColumns = Integer.parseInt(options.get(MAX_COLUMNS)); + } catch (Exception e) { + throw new IllegalArgumentException("bad integer " + MAX_COLUMNS + ":" + options.get(MAX_COLUMNS)); } return true; Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/RegExFilter.java Thu Jan 17 16:05:12 2013 @@ -46,8 +46,6 @@ public class RegExFilter extends Filter return result; } - - public static final String ROW_REGEX = "rowRegex"; public static final String COLF_REGEX = "colfRegex"; public static final String COLQ_REGEX = "colqRegex"; @@ -101,18 +99,12 @@ public class RegExFilter extends Filter @Override public boolean accept(Key key, Value value) { if (orFields) - return ( - (matches(rowMatcher, rowMatcher == null ? null : key.getRowData())) || - (matches(colfMatcher, colfMatcher == null ? null : key.getColumnFamilyData())) || - (matches(colqMatcher, colqMatcher == null ? null : key.getColumnQualifierData())) || - (matches(valueMatcher, value.get(), 0, value.get().length)) - ); - return ( - (matches(rowMatcher, rowMatcher == null ? null : key.getRowData())) && - (matches(colfMatcher, colfMatcher == null ? null : key.getColumnFamilyData())) && - (matches(colqMatcher, colqMatcher == null ? null : key.getColumnQualifierData())) && - (matches(valueMatcher, value.get(), 0, value.get().length)) - ); + return ((matches(rowMatcher, rowMatcher == null ? null : key.getRowData())) + || (matches(colfMatcher, colfMatcher == null ? null : key.getColumnFamilyData())) + || (matches(colqMatcher, colqMatcher == null ? null : key.getColumnQualifierData())) || (matches(valueMatcher, value.get(), 0, value.get().length))); + return ((matches(rowMatcher, rowMatcher == null ? null : key.getRowData())) + && (matches(colfMatcher, colfMatcher == null ? null : key.getColumnFamilyData())) + && (matches(colqMatcher, colqMatcher == null ? null : key.getColumnQualifierData())) && (matches(valueMatcher, value.get(), 0, value.get().length))); } @Override @@ -149,9 +141,9 @@ public class RegExFilter extends Filter } if (options.containsKey(MATCH_SUBSTRING)) { - matchSubstring = Boolean.parseBoolean(options.get(MATCH_SUBSTRING)); + matchSubstring = Boolean.parseBoolean(options.get(MATCH_SUBSTRING)); } else { - matchSubstring = false; + matchSubstring = false; } if (options.containsKey(ENCODING)) { @@ -176,29 +168,33 @@ public class RegExFilter extends Filter @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); - if (options.containsKey(ROW_REGEX)) - Pattern.compile(options.get(ROW_REGEX)).matcher(""); - - if (options.containsKey(COLF_REGEX)) - Pattern.compile(options.get(COLF_REGEX)).matcher(""); + if (super.validateOptions(options) == false) + return false; - if (options.containsKey(COLQ_REGEX)) - Pattern.compile(options.get(COLQ_REGEX)).matcher(""); - - if (options.containsKey(VALUE_REGEX)) - Pattern.compile(options.get(VALUE_REGEX)).matcher(""); + try { + if (options.containsKey(ROW_REGEX)) + Pattern.compile(options.get(ROW_REGEX)).matcher(""); + + if (options.containsKey(COLF_REGEX)) + Pattern.compile(options.get(COLF_REGEX)).matcher(""); + + if (options.containsKey(COLQ_REGEX)) + Pattern.compile(options.get(COLQ_REGEX)).matcher(""); + + if (options.containsKey(VALUE_REGEX)) + Pattern.compile(options.get(VALUE_REGEX)).matcher(""); + } catch (Exception e) { + throw new IllegalArgumentException("bad regex", e); + } if (options.containsKey(ENCODING)) { try { this.encoding = options.get(ENCODING); if ("".equals(this.encoding)) encoding = ENCODING_DEFAULT; - @SuppressWarnings("unused") - String test = new String("test".getBytes(), encoding); + new String("test".getBytes(), encoding); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return false; + throw new IllegalArgumentException("invalid encoding " + ENCODING + ":" + this.encoding, e); } } @@ -206,8 +202,7 @@ public class RegExFilter extends Filter } /** - * Encode the terms to match against in the iterator - * Same as calling setRegexs(IteratorSetting si, String rowTerm, String cfTerm, String cqTerm, String valueTerm, boolean orFields, boolean matchSubstring) + * Encode the terms to match against in the iterator. Same as calling {@link #setRegexs(IteratorSetting, String, String, String, String, boolean, boolean)} * with matchSubstring set to false * * @param si @@ -223,7 +218,7 @@ public class RegExFilter extends Filter * @param orFields * if true, any of the non-null terms can match to return the entry */ - public static void setRegexs(IteratorSetting si, String rowTerm, String cfTerm, String cqTerm, String valueTerm, boolean orFields) { + public static void setRegexs(IteratorSetting si, String rowTerm, String cfTerm, String cqTerm, String valueTerm, boolean orFields) { setRegexs(si, rowTerm, cfTerm, cqTerm, valueTerm, orFields, false); } @@ -244,7 +239,7 @@ public class RegExFilter extends Filter * if true then search expressions will match on partial strings */ public static void setRegexs(IteratorSetting si, String rowTerm, String cfTerm, String cqTerm, String valueTerm, boolean orFields, boolean matchSubstring) { - + if (rowTerm != null) si.addOption(RegExFilter.ROW_REGEX, rowTerm); if (cfTerm != null) @@ -254,13 +249,10 @@ public class RegExFilter extends Filter if (valueTerm != null) si.addOption(RegExFilter.VALUE_REGEX, valueTerm); si.addOption(RegExFilter.OR_FIELDS, String.valueOf(orFields)); - si.addOption(RegExFilter.MATCH_SUBSTRING, String.valueOf(matchSubstring)); - + si.addOption(RegExFilter.MATCH_SUBSTRING, String.valueOf(matchSubstring)); + } - - - /** * Set the encoding string to use when interpreting characters * Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/SummingArrayCombiner.java Thu Jan 17 16:05:12 2013 @@ -127,8 +127,13 @@ public class SummingArrayCombiner extend @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); - setEncoder(options); + if (super.validateOptions(options) == false) + return false; + try { + setEncoder(options); + } catch (Exception e) { + throw new IllegalArgumentException("bad encoder option", e); + } return true; } 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=1434751&r1=1434750&r2=1434751&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 Jan 17 16:05:12 2013 @@ -136,7 +136,8 @@ public class TimestampFilter extends Fil @Override public boolean validateOptions(Map<String,String> options) { - super.validateOptions(options); + if (super.validateOptions(options) == false) + return false; boolean hasStart = false; boolean hasEnd = false; try { @@ -157,13 +158,13 @@ public class TimestampFilter extends Fil dateParser.parse(s); } if (!hasStart && !hasEnd) - return false; + throw new IllegalArgumentException(START + " or " + END + " must be specified"); if (options.get(START_INCL) != null) Boolean.parseBoolean(options.get(START_INCL)); if (options.get(END_INCL) != null) Boolean.parseBoolean(options.get(END_INCL)); } catch (Exception e) { - return false; + throw new IllegalArgumentException("invalid options", e); } return true; } Modified: accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java URL: http://svn.apache.org/viewvc/accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java (original) +++ accumulo/trunk/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java Thu Jan 17 16:05:12 2013 @@ -147,7 +147,12 @@ public class VersioningIterator extends @Override public boolean validateOptions(Map<String,String> options) { - int i = Integer.parseInt(options.get(MAXVERSIONS_OPT)); + int i; + try { + i = Integer.parseInt(options.get(MAXVERSIONS_OPT)); + } catch (Exception e) { + throw new IllegalArgumentException("bad integer " + MAXVERSIONS_OPT + ":" + options.get(MAXVERSIONS_OPT)); + } if (i < 1) throw new IllegalArgumentException(MAXVERSIONS_OPT + " for versioning iterator must be >= 1"); return true; 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=1434751&r1=1434750&r2=1434751&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 Jan 17 16:05:12 2013 @@ -17,7 +17,6 @@ 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; @@ -199,7 +198,10 @@ public class FilterTest { AgeOffFilter.setCurrentTime(is, 1001l); AgeOffFilter.setNegate(is, true); assertTrue(((AgeOffFilter) a).validateOptions(is.getOptions())); - assertFalse(((AgeOffFilter) a).validateOptions(EMPTY_OPTS)); + try { + ((AgeOffFilter) a).validateOptions(EMPTY_OPTS); + assertTrue(false); + } catch (IllegalArgumentException e) {} a.init(new SortedMapIterator(tm), is.getOptions(), null); a = a.deepCopy(null); SortedKeyValueIterator<Key,Value> copy = a.deepCopy(null); @@ -467,7 +469,10 @@ public class FilterTest { a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(size(a), 32); - assertFalse(a.validateOptions(EMPTY_OPTS)); + try { + a.validateOptions(EMPTY_OPTS); + assertTrue(false); + } catch (IllegalArgumentException e) {} } @Test Modified: accumulo/trunk/examples/simple/src/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java URL: http://svn.apache.org/viewvc/accumulo/trunk/examples/simple/src/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java?rev=1434751&r1=1434750&r2=1434751&view=diff ============================================================================== --- accumulo/trunk/examples/simple/src/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java (original) +++ accumulo/trunk/examples/simple/src/main/java/org/apache/accumulo/examples/simple/combiner/StatsCombiner.java Thu Jan 17 16:05:12 2013 @@ -92,7 +92,7 @@ public class StatsCombiner extends Combi return false; if (options.containsKey(RADIX_OPTION) && !options.get(RADIX_OPTION).matches("\\d+")) - return false; + throw new IllegalArgumentException("invalid option " + RADIX_OPTION + ":" + options.get(RADIX_OPTION)); return true; }