ACCUMULO-3079 Only add qualifier filter if needed ACCUMULO-3079 Optimize vis filtering when auths empty ACCUMULO-3079 Avoid WrapinIter.getSource() in loops
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/f81a8ec7 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/f81a8ec7 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/f81a8ec7 Branch: refs/heads/master Commit: f81a8ec7410e789d11941351d5899b8894c6a322 Parents: b56a334 Author: Keith Turner <[email protected]> Authored: Mon Apr 10 13:42:33 2017 -0400 Committer: Mike Miller <[email protected]> Committed: Thu Apr 27 16:54:56 2017 -0400 ---------------------------------------------------------------------- .../core/client/mock/MockScannerBase.java | 4 +- .../apache/accumulo/core/iterators/Filter.java | 5 +- .../core/iterators/FirstEntryInRowIterator.java | 11 ++-- .../accumulo/core/iterators/IteratorUtil.java | 4 +- .../iterators/system/ColumnQualifierFilter.java | 32 ++++++----- .../core/iterators/system/VisibilityFilter.java | 27 +++++++++- .../core/iterators/user/VersioningIterator.java | 5 +- .../core/iterators/system/ColumnFilterTest.java | 57 ++++++++++++++------ .../iterators/system/VisibilityFilterTest.java | 20 ++++++- .../core/iterators/user/FilterTest.java | 12 ++--- .../user/TransformingIteratorTest.java | 2 +- .../performance/scan/CollectTabletStats.java | 4 +- 12 files changed, 132 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/client/mock/MockScannerBase.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/client/mock/MockScannerBase.java b/core/src/main/java/org/apache/accumulo/core/client/mock/MockScannerBase.java index 8684697..6dd5737 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockScannerBase.java +++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockScannerBase.java @@ -133,8 +133,8 @@ public class MockScannerBase extends ScannerOptions implements ScannerBase { public SortedKeyValueIterator<Key,Value> createFilter(SortedKeyValueIterator<Key,Value> inner) throws IOException { byte[] defaultLabels = {}; inner = new ColumnFamilySkippingIterator(new DeletingIterator(inner, false)); - ColumnQualifierFilter cqf = new ColumnQualifierFilter(inner, new HashSet<>(fetchedColumns)); - VisibilityFilter vf = new VisibilityFilter(cqf, auths, defaultLabels); + SortedKeyValueIterator<Key,Value> cqf = ColumnQualifierFilter.wrap(inner, new HashSet<>(fetchedColumns)); + SortedKeyValueIterator<Key,Value> vf = VisibilityFilter.wrap(cqf, auths, defaultLabels); AccumuloConfiguration conf = new MockConfiguration(table.settings); MockIteratorEnvironment iterEnv = new MockIteratorEnvironment(auths); SortedKeyValueIterator<Key,Value> result = iterEnv.getTopLevelIterator(IteratorUtil.loadIterators(IteratorScope.scan, vf, null, conf, http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java b/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java index 8b135c7..e2d13d6 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/Filter.java @@ -69,9 +69,10 @@ public abstract class Filter extends WrappingIterator implements OptionDescriber * Iterates over the source until an acceptable key/value pair is found. */ protected void findTop() { - while (getSource().hasTop() && !getSource().getTopKey().isDeleted() && (negate == accept(getSource().getTopKey(), getSource().getTopValue()))) { + SortedKeyValueIterator<Key,Value> source = getSource(); + while (source.hasTop() && !source.getTopKey().isDeleted() && (negate == accept(source.getTopKey(), source.getTopValue()))) { try { - getSource().next(); + source.next(); } catch (IOException e) { throw new RuntimeException(e); } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java b/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java index 17b8f43..e43b4f7 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/FirstEntryInRowIterator.java @@ -79,27 +79,28 @@ public class FirstEntryInRowIterator extends SkippingIterator implements OptionD if (finished || lastRowFound == null) return; int count = 0; - while (getSource().hasTop() && lastRowFound.equals(getSource().getTopKey().getRow())) { + SortedKeyValueIterator<Key,Value> source = getSource(); + while (source.hasTop() && lastRowFound.equals(source.getTopKey().getRow())) { // try to efficiently jump to the next matching key if (count < numscans) { ++count; - getSource().next(); // scan + source.next(); // scan } else { // too many scans, just seek count = 0; // determine where to seek to, but don't go beyond the user-specified range - Key nextKey = getSource().getTopKey().followingKey(PartialKey.ROW); + Key nextKey = source.getTopKey().followingKey(PartialKey.ROW); if (!latestRange.afterEndKey(nextKey)) - getSource().seek(new Range(nextKey, true, latestRange.getEndKey(), latestRange.isEndKeyInclusive()), latestColumnFamilies, latestInclusive); + source.seek(new Range(nextKey, true, latestRange.getEndKey(), latestRange.isEndKeyInclusive()), latestColumnFamilies, latestInclusive); else { finished = true; break; } } } - lastRowFound = getSource().hasTop() ? getSource().getTopKey().getRow(lastRowFound) : null; + lastRowFound = source.hasTop() ? source.getTopKey().getRow(lastRowFound) : null; } private boolean finished = true; http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java b/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java index 338da90..2e09782 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java @@ -395,7 +395,7 @@ public class IteratorUtil { byte[] defaultVisibility) throws IOException { DeletingIterator delIter = new DeletingIterator(source, false); ColumnFamilySkippingIterator cfsi = new ColumnFamilySkippingIterator(delIter); - ColumnQualifierFilter colFilter = new ColumnQualifierFilter(cfsi, cols); - return new VisibilityFilter(colFilter, auths, defaultVisibility); + SortedKeyValueIterator<Key,Value> colFilter = ColumnQualifierFilter.wrap(cfsi, cols); + return VisibilityFilter.wrap(colFilter, auths, defaultVisibility); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java b/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java index dbd9171..86fc2c8 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/system/ColumnQualifierFilter.java @@ -30,11 +30,10 @@ import org.apache.accumulo.core.iterators.ServerFilter; import org.apache.accumulo.core.iterators.SortedKeyValueIterator; public class ColumnQualifierFilter extends ServerFilter { - private final boolean scanColumns; private HashSet<ByteSequence> columnFamilies; private HashMap<ByteSequence,HashSet<ByteSequence>> columnsQualifiers; - public ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, Set<Column> columns) { + private ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, Set<Column> columns) { super(iterator); this.columnFamilies = new HashSet<>(); this.columnsQualifiers = new HashMap<>(); @@ -54,24 +53,17 @@ public class ColumnQualifierFilter extends ServerFilter { columnFamilies.add(new ArrayByteSequence(col.columnFamily)); } } - - // only take action when column qualifies are present - scanColumns = this.columnsQualifiers.size() > 0; } - public ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, HashSet<ByteSequence> columnFamilies, - HashMap<ByteSequence,HashSet<ByteSequence>> columnsQualifiers, boolean scanColumns) { + private ColumnQualifierFilter(SortedKeyValueIterator<Key,Value> iterator, HashSet<ByteSequence> columnFamilies, + HashMap<ByteSequence,HashSet<ByteSequence>> columnsQualifiers) { super(iterator); this.columnFamilies = columnFamilies; this.columnsQualifiers = columnsQualifiers; - this.scanColumns = scanColumns; } @Override public boolean accept(Key key, Value v) { - if (!scanColumns) - return true; - if (columnFamilies.contains(key.getColumnFamilyData())) return true; @@ -84,6 +76,22 @@ public class ColumnQualifierFilter extends ServerFilter { @Override public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) { - return new ColumnQualifierFilter(source.deepCopy(env), columnFamilies, columnsQualifiers, scanColumns); + return new ColumnQualifierFilter(source.deepCopy(env), columnFamilies, columnsQualifiers); + } + + public static SortedKeyValueIterator<Key,Value> wrap(SortedKeyValueIterator<Key,Value> source, Set<Column> cols) { + boolean sawNonNullQual = false; + for (Column col : cols) { + if (col.getColumnQualifier() != null) { + sawNonNullQual = true; + break; + } + } + + if (sawNonNullQual) { + return new ColumnQualifierFilter(source, cols); + } else { + return source; + } } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java b/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java index b260bc4..6037233 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/system/VisibilityFilter.java @@ -46,7 +46,7 @@ public class VisibilityFilter extends SynchronizedServerFilter { private static final Logger log = LoggerFactory.getLogger(VisibilityFilter.class); - public VisibilityFilter(SortedKeyValueIterator<Key,Value> iterator, Authorizations authorizations, byte[] defaultVisibility) { + private VisibilityFilter(SortedKeyValueIterator<Key,Value> iterator, Authorizations authorizations, byte[] defaultVisibility) { super(iterator); this.ve = new VisibilityEvaluator(authorizations); this.authorizations = authorizations; @@ -84,4 +84,29 @@ public class VisibilityFilter extends SynchronizedServerFilter { return false; } } + + private static class EmptyAuthsVisibilityFilter extends SynchronizedServerFilter { + + public EmptyAuthsVisibilityFilter(SortedKeyValueIterator<Key,Value> source) { + super(source); + } + + @Override + public synchronized SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) { + return new EmptyAuthsVisibilityFilter(source.deepCopy(env)); + } + + @Override + protected boolean accept(Key k, Value v) { + return k.getColumnVisibilityData().length() == 0; + } + } + + public static SortedKeyValueIterator<Key,Value> wrap(SortedKeyValueIterator<Key,Value> source, Authorizations authorizations, byte[] defaultVisibility) { + if (authorizations.isEmpty() && defaultVisibility.length == 0) { + return new EmptyAuthsVisibilityFilter(source); + } else { + return new VisibilityFilter(source, authorizations, defaultVisibility); + } + } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java b/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java index 88ba20d..3334d9f 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/user/VersioningIterator.java @@ -97,11 +97,12 @@ public class VersioningIterator extends WrappingIterator implements OptionDescri super.next(); int count = 0; - while (getSource().hasTop() && getSource().getTopKey().equals(keyToSkip, PartialKey.ROW_COLFAM_COLQUAL_COLVIS)) { + SortedKeyValueIterator<Key,Value> source = getSource(); + while (source.hasTop() && source.getTopKey().equals(keyToSkip, PartialKey.ROW_COLFAM_COLQUAL_COLVIS)) { if (count < maxCount) { // it is quicker to call next if we are close, but we never know if we are close // so give next a try a few times - getSource().next(); + source.next(); count++; } else { reseek(keyToSkip.followingKey(PartialKey.ROW_COLFAM_COLQUAL_COLVIS)); http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java index 6158476..4d9d3ab 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/system/ColumnFilterTest.java @@ -16,14 +16,20 @@ */ package org.apache.accumulo.core.iterators.system; +import java.util.Collections; import java.util.HashSet; +import java.util.TreeMap; import junit.framework.TestCase; import org.apache.accumulo.core.data.Column; import org.apache.accumulo.core.data.Key; +import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.iterators.SortedKeyValueIterator; +import org.apache.accumulo.core.iterators.SortedMapIterator; import org.apache.hadoop.io.Text; +import org.junit.Assert; public class ColumnFilterTest extends TestCase { @@ -40,39 +46,60 @@ public class ColumnFilterTest extends TestCase { } public void test1() { - HashSet<Column> columns = new HashSet<>(); + TreeMap<Key,Value> data = new TreeMap<Key,Value>(); + data.put(newKey("r1", "cf1", "cq1"), new Value("")); + data.put(newKey("r1", "cf2", "cq1"), new Value("")); + HashSet<Column> columns = new HashSet<>(); columns.add(newColumn("cf1")); - ColumnQualifierFilter cf = new ColumnQualifierFilter(null, columns); - - assertTrue(cf.accept(newKey("r1", "cf1", "cq1"), new Value(new byte[0]))); - assertTrue(cf.accept(newKey("r1", "cf2", "cq1"), new Value(new byte[0]))); + SortedMapIterator smi = new SortedMapIterator(data); + SortedKeyValueIterator<Key,Value> cf = ColumnQualifierFilter.wrap(smi, columns); + Assert.assertSame(smi, cf); } - public void test2() { + public void test2() throws Exception { + + TreeMap<Key,Value> data = new TreeMap<Key,Value>(); + data.put(newKey("r1", "cf1", "cq1"), new Value("")); + data.put(newKey("r1", "cf2", "cq1"), new Value("")); + data.put(newKey("r1", "cf2", "cq2"), new Value("")); + HashSet<Column> columns = new HashSet<>(); columns.add(newColumn("cf1")); columns.add(newColumn("cf2", "cq1")); - ColumnQualifierFilter cf = new ColumnQualifierFilter(null, columns); + SortedKeyValueIterator<Key,Value> cf = ColumnQualifierFilter.wrap(new SortedMapIterator(data), columns); + cf.seek(new Range(), Collections.emptySet(), false); - assertTrue(cf.accept(newKey("r1", "cf1", "cq1"), new Value(new byte[0]))); - assertTrue(cf.accept(newKey("r1", "cf2", "cq1"), new Value(new byte[0]))); - assertFalse(cf.accept(newKey("r1", "cf2", "cq2"), new Value(new byte[0]))); + Assert.assertTrue(cf.hasTop()); + Assert.assertEquals(newKey("r1", "cf1", "cq1"), cf.getTopKey()); + cf.next(); + Assert.assertTrue(cf.hasTop()); + Assert.assertEquals(newKey("r1", "cf2", "cq1"), cf.getTopKey()); + cf.next(); + Assert.assertFalse(cf.hasTop()); } - public void test3() { + public void test3() throws Exception { + + TreeMap<Key,Value> data = new TreeMap<Key,Value>(); + data.put(newKey("r1", "cf1", "cq1"), new Value("")); + data.put(newKey("r1", "cf2", "cq1"), new Value("")); + data.put(newKey("r1", "cf2", "cq2"), new Value("")); + HashSet<Column> columns = new HashSet<>(); columns.add(newColumn("cf2", "cq1")); - ColumnQualifierFilter cf = new ColumnQualifierFilter(null, columns); + SortedKeyValueIterator<Key,Value> cf = ColumnQualifierFilter.wrap(new SortedMapIterator(data), columns); + cf.seek(new Range(), Collections.emptySet(), false); - assertFalse(cf.accept(newKey("r1", "cf1", "cq1"), new Value(new byte[0]))); - assertTrue(cf.accept(newKey("r1", "cf2", "cq1"), new Value(new byte[0]))); - assertFalse(cf.accept(newKey("r1", "cf2", "cq2"), new Value(new byte[0]))); + Assert.assertTrue(cf.hasTop()); + Assert.assertEquals(newKey("r1", "cf2", "cq1"), cf.getTopKey()); + cf.next(); + Assert.assertFalse(cf.hasTop()); } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java index 68323c6..2e5ca04 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/system/VisibilityFilterTest.java @@ -26,6 +26,7 @@ import org.apache.accumulo.core.data.ByteSequence; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.data.Value; +import org.apache.accumulo.core.iterators.SortedKeyValueIterator; import org.apache.accumulo.core.iterators.SortedMapIterator; import org.apache.accumulo.core.security.Authorizations; import org.apache.log4j.Level; @@ -37,7 +38,7 @@ public class VisibilityFilterTest extends TestCase { TreeMap<Key,Value> tm = new TreeMap<>(); tm.put(new Key("r1", "cf1", "cq1", "A&"), new Value(new byte[0])); - VisibilityFilter filter = new VisibilityFilter(new SortedMapIterator(tm), new Authorizations("A"), "".getBytes()); + SortedKeyValueIterator<Key,Value> filter = VisibilityFilter.wrap(new SortedMapIterator(tm), new Authorizations("A"), "".getBytes()); // suppress logging Level prevLevel = Logger.getLogger(VisibilityFilter.class).getLevel(); @@ -49,4 +50,21 @@ public class VisibilityFilterTest extends TestCase { Logger.getLogger(VisibilityFilter.class).setLevel(prevLevel); } + public void testEmptyAuths() throws IOException { + TreeMap<Key,Value> tm = new TreeMap<>(); + + tm.put(new Key("r1", "cf1", "cq1", ""), new Value(new byte[0])); + tm.put(new Key("r1", "cf1", "cq2", "C"), new Value(new byte[0])); + tm.put(new Key("r1", "cf1", "cq3", ""), new Value(new byte[0])); + SortedKeyValueIterator<Key,Value> filter = VisibilityFilter.wrap(new SortedMapIterator(tm), Authorizations.EMPTY, "".getBytes()); + + filter.seek(new Range(), new HashSet<ByteSequence>(), false); + assertTrue(filter.hasTop()); + assertEquals(new Key("r1", "cf1", "cq1", ""), filter.getTopKey()); + filter.next(); + assertTrue(filter.hasTop()); + assertEquals(new Key("r1", "cf1", "cq3", ""), filter.getTopKey()); + filter.next(); + assertFalse(filter.hasTop()); + } } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/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 b26c218..244699a 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 @@ -358,19 +358,19 @@ public class FilterTest { } assertEquals(1000, tm.size()); - ColumnQualifierFilter a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); + SortedKeyValueIterator<Key,Value> a = ColumnQualifierFilter.wrap(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); assertEquals(1000, size(a)); hsc = new HashSet<>(); hsc.add(new Column("a".getBytes(), "b".getBytes(), null)); - a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); + a = ColumnQualifierFilter.wrap(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(a); assertEquals(500, size); hsc = new HashSet<>(); - a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); + a = ColumnQualifierFilter.wrap(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); size = size(a); assertEquals(1000, size); @@ -394,20 +394,20 @@ public class FilterTest { } assertEquals(1000, tm.size()); - VisibilityFilter a = new VisibilityFilter(new SortedMapIterator(tm), auths, le2.getExpression()); + SortedKeyValueIterator<Key,Value> a = VisibilityFilter.wrap(new SortedMapIterator(tm), auths, le2.getExpression()); a.seek(new Range(), EMPTY_COL_FAMS, false); int size = size(a); assertEquals(750, size); } - private ColumnQualifierFilter ncqf(TreeMap<Key,Value> tm, Column... columns) throws IOException { + private SortedKeyValueIterator<Key,Value> ncqf(TreeMap<Key,Value> tm, Column... columns) throws IOException { HashSet<Column> hsc = new HashSet<>(); for (Column column : columns) { hsc.add(column); } - ColumnQualifierFilter a = new ColumnQualifierFilter(new SortedMapIterator(tm), hsc); + SortedKeyValueIterator<Key,Value> a = ColumnQualifierFilter.wrap(new SortedMapIterator(tm), hsc); a.seek(new Range(), EMPTY_COL_FAMS, false); return a; } http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/core/src/test/java/org/apache/accumulo/core/iterators/user/TransformingIteratorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/TransformingIteratorTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/TransformingIteratorTest.java index d02b7f2..7ff08ec 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/TransformingIteratorTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/TransformingIteratorTest.java @@ -81,7 +81,7 @@ public class TransformingIteratorTest { private void setUpTransformIterator(Class<? extends TransformingIterator> clazz, boolean setupAuths) throws IOException { SortedMapIterator source = new SortedMapIterator(data); ColumnFamilySkippingIterator cfsi = new ColumnFamilySkippingIterator(source); - VisibilityFilter visFilter = new VisibilityFilter(cfsi, authorizations, new byte[0]); + SortedKeyValueIterator<Key,Value> visFilter = VisibilityFilter.wrap(cfsi, authorizations, new byte[0]); ReuseIterator reuserIter = new ReuseIterator(); reuserIter.init(visFilter, EMPTY_OPTS, null); try { http://git-wip-us.apache.org/repos/asf/accumulo/blob/f81a8ec7/test/src/main/java/org/apache/accumulo/test/performance/scan/CollectTabletStats.java ---------------------------------------------------------------------- diff --git a/test/src/main/java/org/apache/accumulo/test/performance/scan/CollectTabletStats.java b/test/src/main/java/org/apache/accumulo/test/performance/scan/CollectTabletStats.java index d299aa0..f4c9078 100644 --- a/test/src/main/java/org/apache/accumulo/test/performance/scan/CollectTabletStats.java +++ b/test/src/main/java/org/apache/accumulo/test/performance/scan/CollectTabletStats.java @@ -431,8 +431,8 @@ public class CollectTabletStats { MultiIterator multiIter = new MultiIterator(iters, ke); DeletingIterator delIter = new DeletingIterator(multiIter, false); ColumnFamilySkippingIterator cfsi = new ColumnFamilySkippingIterator(delIter); - ColumnQualifierFilter colFilter = new ColumnQualifierFilter(cfsi, columnSet); - VisibilityFilter visFilter = new VisibilityFilter(colFilter, authorizations, defaultLabels); + SortedKeyValueIterator<Key,Value> colFilter = ColumnQualifierFilter.wrap(cfsi, columnSet); + SortedKeyValueIterator<Key,Value> visFilter = VisibilityFilter.wrap(colFilter, authorizations, defaultLabels); if (useTableIterators) return IteratorUtil.loadIterators(IteratorScope.scan, visFilter, ke, conf, ssiList, ssio, null);
