diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/user/VisibilityFilter.java b/core/src/main/java/org/apache/accumulo/core/iterators/user/VisibilityFilter.java index c91009bb6fc..e0a214c389a 100644 --- a/core/src/main/java/org/apache/accumulo/core/iterators/user/VisibilityFilter.java +++ b/core/src/main/java/org/apache/accumulo/core/iterators/user/VisibilityFilter.java @@ -71,6 +71,15 @@ public void init(SortedKeyValueIterator source, Map op this.cache = new LRUMap<>(1000); } + @Override + public SortedKeyValueIterator deepCopy(IteratorEnvironment env) { + VisibilityFilter result = (VisibilityFilter) super.deepCopy(env); + result.filterInvalid = this.filterInvalid; + result.accessEvaluator = this.accessEvaluator; + result.cache = this.cache; + return result; + } + @Override public boolean accept(Key k, Value v) { ByteSequence testVis = k.getColumnVisibilityData(); diff --git a/core/src/test/java/org/apache/accumulo/core/iterators/user/VisibilityFilterTest.java b/core/src/test/java/org/apache/accumulo/core/iterators/user/VisibilityFilterTest.java index 06140fd9f67..075e2bef330 100644 --- a/core/src/test/java/org/apache/accumulo/core/iterators/user/VisibilityFilterTest.java +++ b/core/src/test/java/org/apache/accumulo/core/iterators/user/VisibilityFilterTest.java @@ -19,6 +19,7 @@ package org.apache.accumulo.core.iterators.user; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.util.ArrayList; @@ -242,4 +243,17 @@ public void testStaticConfigurators() { assertEquals(new Authorizations("abc", "def").serialize(), opts.get("auths")); } + @Test + public void testDeepCopyAfterInit() throws IOException { + IteratorSetting is = new IteratorSetting(1, VisibilityFilter.class); + VisibilityFilter.setAuthorizations(is, new Authorizations("abc")); + Map opts = is.getOptions(); + Filter filter = new VisibilityFilter(); + TreeMap source = new TreeMap<>(); + filter.init(new SortedMapIterator(source), opts, null); + Filter copyFilter = (Filter) filter.deepCopy(null); + Key k = new Key("row", "cf", "cq", "abc"); + assertTrue(copyFilter.accept(k, new Value())); + } + }