You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by da...@apache.org on 2025/04/24 10:54:51 UTC

(jackrabbit-oak) branch OAK-11663 created (now d66adcb1ac)

This is an automated email from the ASF dual-hosted git repository.

daim pushed a change to branch OAK-11663
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


      at d66adcb1ac OAK-11663 : removed usage of Guava's Iterators.filter with oak-commons

This branch includes the following new commits:

     new d66adcb1ac OAK-11663 : removed usage of Guava's Iterators.filter with oak-commons

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(jackrabbit-oak) 01/01: OAK-11663 : removed usage of Guava's Iterators.filter with oak-commons

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

daim pushed a commit to branch OAK-11663
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit d66adcb1aca2aa3cb6d0ea1ce2b7c18baa5ba6e0
Author: Rishabh Kumar <di...@adobe.com>
AuthorDate: Thu Apr 24 16:24:40 2025 +0530

    OAK-11663 : removed usage of Guava's Iterators.filter with oak-commons
---
 .../external/impl/jmx/Delegatee.java               |  2 +-
 .../impl/principal/CachedGroupPrincipal.java       |  2 +-
 .../principal/ExternalGroupPrincipalProvider.java  |  6 +++---
 .../external/AbstractExternalAuthTest.java         |  3 ++-
 .../plugins/blob/datastore/DataStoreBlobStore.java |  4 ++--
 .../oak/plugins/identifier/IdentifierManager.java  |  3 +--
 .../plugins/index/aggregate/AggregationCursor.java |  2 +-
 .../oak/plugins/index/cursor/AncestorCursor.java   |  3 ++-
 .../oak/plugins/index/cursor/PathCursor.java       |  3 ++-
 .../oak/security/principal/EveryoneFilter.java     |  2 +-
 .../security/principal/PrincipalProviderImpl.java  |  3 ++-
 .../oak/security/user/AbstractGroupPrincipal.java  |  2 +-
 .../oak/security/user/AuthorizableIterator.java    |  4 ++--
 .../security/user/DeclaredMembershipPredicate.java |  3 ++-
 .../security/user/EveryoneMembershipProvider.java  |  5 +++--
 .../oak/security/user/UserPrincipalProvider.java   |  3 ++-
 .../oak/security/user/query/UserQueryManager.java  |  7 ++++---
 .../security/user/UserPrincipalProviderTest.java   |  2 +-
 .../oak/jcr/delegate/AuthorizableDelegator.java    |  5 +++--
 .../jackrabbit/oak/jcr/delegate/NodeDelegate.java  |  4 ++--
 .../jackrabbit/oak/jcr/session/NodeImpl.java       |  6 +++---
 .../oak/jcr/security/user/UserQueryTest.java       | 23 +++++++++++-----------
 .../document/flatfile/CountingIterable.java        |  3 ++-
 .../plugins/document/VersionGarbageCollector.java  |  3 ++-
 24 files changed, 57 insertions(+), 46 deletions(-)

diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java
index d4f33cd9e1..ff240b4199 100644
--- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java
+++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java
@@ -357,7 +357,7 @@ final class Delegatee {
     private Iterator<String> internalListOrphanedIdentities() {
         try {
             Iterator<SyncedIdentity> it = handler.listIdentities(userMgr);
-            return Iterators.filter(Iterators.transform(it, syncedIdentity -> {
+            return IteratorUtils.filter(Iterators.transform(it, syncedIdentity -> {
                 if (syncedIdentity != null && isMyIDP(syncedIdentity)) {
                     try {
                         // nonNull-ExternalIdRef has already been asserted by 'isMyIDP'
diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/CachedGroupPrincipal.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/CachedGroupPrincipal.java
index 2e510ad0d0..88937c0f8b 100644
--- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/CachedGroupPrincipal.java
+++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/CachedGroupPrincipal.java
@@ -94,7 +94,7 @@ final class CachedGroupPrincipal extends PrincipalImpl implements GroupPrincipal
                 throw new IllegalStateException(msg, e);
             }
         });
-        return IteratorUtils.asEnumeration(Iterators.filter(principals, Objects::nonNull));
+        return IteratorUtils.asEnumeration(IteratorUtils.filter(principals, Objects::nonNull));
     }
 
     private Group getGroup() throws RepositoryException {
diff --git a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
index f9d694b650..348cd8ce2a 100644
--- a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
+++ b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
@@ -237,7 +237,7 @@ class ExternalGroupPrincipalProvider implements PrincipalProvider, ExternalIdent
         // search for external group principals that have not been synchronzied into the repository
         Result result = findPrincipals(Objects.toString(nameHint, ""), false);
         if (result != null) {
-            return Iterators.filter(new GroupPrincipalIterator(nameHint, result), Objects::nonNull);
+            return IteratorUtils.filter(new GroupPrincipalIterator(nameHint, result), Objects::nonNull);
         } else {
             return Collections.emptyIterator();
         }
@@ -329,7 +329,7 @@ class ExternalGroupPrincipalProvider implements PrincipalProvider, ExternalIdent
             }
 
             Set<Value> valueSet = Collections.unmodifiableSet(SetUtils.toLinkedSet(vs));
-            Iterator<Group> declared = Iterators.filter(Iterators.transform(valueSet.iterator(), value -> {
+            Iterator<Group> declared = IteratorUtils.filter(Iterators.transform(valueSet.iterator(), value -> {
                 try {
                     String groupPrincipalName = value.getString();
                     Authorizable gr = userManager.getAuthorizable(new PrincipalImpl(groupPrincipalName));
@@ -669,7 +669,7 @@ class ExternalGroupPrincipalProvider implements PrincipalProvider, ExternalIdent
             if (!propValues.hasNext()) {
                 if (rows.hasNext()) {
                     ResultRow row = rows.next();
-                    propValues = Iterators.filter(row.getValue(REP_EXTERNAL_PRINCIPAL_NAMES).getValue(Type.STRINGS).iterator(), Objects::nonNull);
+                    propValues = IteratorUtils.filter(row.getValue(REP_EXTERNAL_PRINCIPAL_NAMES).getValue(Type.STRINGS).iterator(), Objects::nonNull);
                     idpName = getIdpName(row);
                 } else {
                     propValues = Collections.emptyIterator();
diff --git a/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java b/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
index bd64532715..b4e1b00308 100644
--- a/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
+++ b/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
@@ -27,6 +27,7 @@ import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.commons.jdkcompat.Java23Subject;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
@@ -135,7 +136,7 @@ public abstract class AbstractExternalAuthTest extends AbstractSecurityTest {
     @NotNull
     private static Iterator<String> getAllAuthorizableIds(@NotNull UserManager userManager) throws Exception {
         Iterator<Authorizable> iter = userManager.findAuthorizables("jcr:primaryType", null);
-        return Iterators.filter(Iterators.transform(iter, input -> {
+        return IteratorUtils.filter(Iterators.transform(iter, input -> {
             try {
                 if (input != null) {
                     return input.getID();
diff --git a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
index 8a7f820f29..855917e700 100644
--- a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
+++ b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
@@ -19,7 +19,6 @@
 package org.apache.jackrabbit.oak.plugins.blob.datastore;
 
 import static java.util.Objects.requireNonNull;
-import static org.apache.jackrabbit.guava.common.collect.Iterators.filter;
 import static org.apache.jackrabbit.guava.common.collect.Iterators.transform;
 import static org.apache.commons.io.IOUtils.closeQuietly;
 
@@ -59,6 +58,7 @@ import org.apache.jackrabbit.oak.api.blob.BlobUploadOptions;
 import org.apache.jackrabbit.oak.cache.CacheLIRS;
 import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.apache.jackrabbit.oak.commons.StringUtils;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob;
 import org.apache.jackrabbit.oak.plugins.blob.BlobTrackingStore;
 import org.apache.jackrabbit.oak.plugins.blob.ExtendedBlobStatsCollector;
@@ -495,7 +495,7 @@ public class DataStoreBlobStore
 
     @Override
     public Iterator<String> getAllChunkIds(final long maxLastModifiedTime) throws Exception {
-        return transform(filter(getAllRecords(), input -> {
+        return transform(IteratorUtils.filter(getAllRecords(), input -> {
                 if (input != null && (maxLastModifiedTime <= 0
                         || input.getLastModified() < maxLastModifiedTime)) {
                     return true;
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
index 4383594219..040dfceb92 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
@@ -52,7 +52,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.jackrabbit.oak.commons.conditions.Validate.checkArgument;
-import static org.apache.jackrabbit.guava.common.collect.Iterators.filter;
 import static org.apache.jackrabbit.guava.common.collect.Iterators.transform;
 import static org.apache.jackrabbit.oak.api.QueryEngine.NO_MAPPINGS;
 
@@ -270,7 +269,7 @@ public class IdentifierManager {
                     // skip references from the version storage (OAK-1196)
                     if (!rowPath.startsWith(VersionConstants.VERSION_STORE_PATH)) {
                             if (propertyName == null) {
-                                return filter(
+                                return IteratorUtils.filter(
                                         transform(root.getTree(rowPath).getProperties().iterator(), new PropertyToPath()::apply),
                                         x -> x != null);
                             } else {
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/aggregate/AggregationCursor.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/aggregate/AggregationCursor.java
index 2f50f995f2..53cfac6953 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/aggregate/AggregationCursor.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/aggregate/AggregationCursor.java
@@ -91,7 +91,7 @@ class AggregationCursor extends AbstractCursor {
             currentRow = cursor.next();
             if (!currentRow.isVirtualRow()) {
                 String path = currentRow.getPath();
-                aggregates = Iterators.filter(IteratorUtils.chainedIterator(
+                aggregates = IteratorUtils.filter(IteratorUtils.chainedIterator(
                         Collections.singleton(path).iterator(),
                         aggregator.getParents(rootState, path)),
                         x -> !seenPaths.contains(x));
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/AncestorCursor.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/AncestorCursor.java
index 250958ca1c..8d61bfea02 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/AncestorCursor.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/AncestorCursor.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
 import java.util.function.Predicate;
 
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.QueryLimits;
 import org.jetbrains.annotations.Nullable;
@@ -38,7 +39,7 @@ class AncestorCursor extends PathCursor {
     private static Iterator<String> transform(Cursor cursor, final int level) {
         Iterator<String> unfiltered = Iterators.transform(cursor,
                 input -> input != null ? input.getPath() : null);
-        Iterator<String> filtered = Iterators.filter(unfiltered,
+        Iterator<String> filtered = IteratorUtils.filter(unfiltered,
                 new Predicate<String>() {
             @Override
             public boolean test(@Nullable String input) {
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PathCursor.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PathCursor.java
index 9abfbb21c7..94c6c7ef0f 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PathCursor.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/cursor/PathCursor.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.function.Predicate;
 
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.query.FilterIterators;
 import org.apache.jackrabbit.oak.query.index.IndexRowImpl;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
@@ -42,7 +43,7 @@ public class PathCursor extends AbstractCursor {
     public PathCursor(Iterator<String> paths, boolean distinct, final QueryLimits settings) {
         Iterator<String> it = paths;
         if (distinct) {
-            it = Iterators.filter(it, new Predicate<String>() {
+            it = IteratorUtils.filter(it, new Predicate<String>() {
 
                 private final HashSet<String> known = new HashSet<String>();
 
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/EveryoneFilter.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/EveryoneFilter.java
index b59b5c9531..877bac5100 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/EveryoneFilter.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/EveryoneFilter.java
@@ -50,7 +50,7 @@ public final class EveryoneFilter {
         boolean noRange = offset == 0 && limit == Long.MAX_VALUE;
         if (noRange && matchesEveryone(nameHint, searchType)) {
             Iterator<Principal> principals = IteratorUtils.chainedIterator(resultPrincipals, Collections.singleton(EveryonePrincipal.getInstance()).iterator());
-            return Iterators.filter(principals, new EveryonePredicate()::test);
+            return IteratorUtils.filter(principals, new EveryonePredicate()::test);
         } else {
             return resultPrincipals;
         }
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
index 0fd19da1cd..2f52559609 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/principal/PrincipalProviderImpl.java
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.api.security.user.QueryBuilder;
 import org.apache.jackrabbit.api.security.user.QueryBuilder.Direction;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
@@ -144,7 +145,7 @@ class PrincipalProviderImpl implements PrincipalProvider {
         }
         try {
             Iterator<Authorizable> authorizables = findAuthorizables(nameHint, searchType, offset, limit);
-            Iterator<Principal> principals = Iterators.filter(Iterators.transform(authorizables, new AuthorizableToPrincipal()::apply), Objects::nonNull);
+            Iterator<Principal> principals = IteratorUtils.filter(Iterators.transform(authorizables, new AuthorizableToPrincipal()::apply), Objects::nonNull);
             return EveryoneFilter.filter(principals, nameHint, searchType, offset, limit);
         } catch (RepositoryException e) {
             log.debug(e.getMessage());
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
index 23463a0aa5..2931437197 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AbstractGroupPrincipal.java
@@ -105,6 +105,6 @@ abstract class AbstractGroupPrincipal extends TreeBasedPrincipal implements Grou
                 throw new IllegalStateException(msg, e);
             }
         });
-        return IteratorUtils.asEnumeration(Iterators.filter(principals, x -> x != null));
+        return IteratorUtils.asEnumeration(IteratorUtils.filter(principals, x -> x != null));
     }
 }
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableIterator.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableIterator.java
index 66b742f32a..2153304ae1 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableIterator.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/AuthorizableIterator.java
@@ -81,7 +81,7 @@ final class AuthorizableIterator implements Iterator<Authorizable> {
     private AuthorizableIterator(Iterator<? extends Authorizable> authorizables, long size, boolean filterDuplicates) {
         if (filterDuplicates)  {
             this.servedIds = new HashSet<>();
-            this.authorizables = Iterators.filter(authorizables, authorizable -> {
+            this.authorizables = IteratorUtils.filter(authorizables, authorizable -> {
                 if (authorizable == null) {
                     return false;
                 }
@@ -90,7 +90,7 @@ final class AuthorizableIterator implements Iterator<Authorizable> {
             });
         } else {
             this.servedIds = null;
-            this.authorizables = Iterators.filter(authorizables, Objects::nonNull);
+            this.authorizables = IteratorUtils.filter(authorizables, Objects::nonNull);
         }
         this.size = size;
     }
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/DeclaredMembershipPredicate.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/DeclaredMembershipPredicate.java
index 7ea33c0b31..77addb79c7 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/DeclaredMembershipPredicate.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/DeclaredMembershipPredicate.java
@@ -27,6 +27,7 @@ import javax.jcr.RepositoryException;
 import org.apache.jackrabbit.guava.common.collect.Iterators;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
@@ -49,7 +50,7 @@ public class DeclaredMembershipPredicate implements Predicate<Authorizable> {
         if (groupTree == null) {
             contentIdIterator = Collections.emptyIterator();
         } else {
-            contentIdIterator = Iterators.filter(membershipProvider.getDeclaredMemberContentIDs(groupTree), x -> x != null);
+            contentIdIterator = IteratorUtils.filter(membershipProvider.getDeclaredMemberContentIDs(groupTree), x -> x != null);
         }
     }
 
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/EveryoneMembershipProvider.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/EveryoneMembershipProvider.java
index 99f4acab52..b1ce4f5b30 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/EveryoneMembershipProvider.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/EveryoneMembershipProvider.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.commons.iterator.RangeIteratorAdapter;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.user.DynamicMembershipProvider;
@@ -50,8 +51,8 @@ class EveryoneMembershipProvider implements DynamicMembershipProvider {
     @Override
     public @NotNull Iterator<Authorizable> getMembers(@NotNull Group group, boolean includeInherited) throws RepositoryException {
         if (Utils.isEveryone(group)) {
-            Iterator<Authorizable> result = Iterators.filter(userManager.findAuthorizables(repPrincipalName, null, UserManager.SEARCH_TYPE_AUTHORIZABLE), x -> x != null);
-            return Iterators.filter(result, authorizable -> !Utils.isEveryone(authorizable));
+            Iterator<Authorizable> result = IteratorUtils.filter(userManager.findAuthorizables(repPrincipalName, null, UserManager.SEARCH_TYPE_AUTHORIZABLE), x -> x != null);
+            return IteratorUtils.filter(result, authorizable -> !Utils.isEveryone(authorizable));
         } else {
             return RangeIteratorAdapter.EMPTY;
         }
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
index a6665983cc..3ed5cf057f 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProvider.java
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.security.principal.EveryoneFilter;
 import org.apache.jackrabbit.oak.spi.security.user.cache.CachedMembershipReader;
@@ -185,7 +186,7 @@ class UserPrincipalProvider implements PrincipalProvider {
                     statement.toString(), javax.jcr.query.Query.XPATH,
                     limit, offset, NO_BINDINGS, namePathMapper.getSessionLocalMappings());
 
-            Iterator<Principal> principals = Iterators.filter(
+            Iterator<Principal> principals = IteratorUtils.filter(
                     Iterators.transform(result.getRows().iterator(), new ResultRowToPrincipal()::apply),
                     Objects::nonNull);
 
diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
index 5c544eb0fb..c7dc7f3837 100644
--- a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
+++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.StringUtils;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.security.user.DeclaredMembershipPredicate;
 import org.apache.jackrabbit.oak.security.user.UserManagerImpl;
@@ -99,7 +100,7 @@ public class UserQueryManager {
             if (groupId == null) {
                 return result;
             } else {
-                return Iterators.filter(result, authorizable -> !groupId.equals(getID(authorizable)));
+                return IteratorUtils.filter(result, authorizable -> !groupId.equals(getID(authorizable)));
             }
         } else {
             // filtering by group name included in query -> enforce offset and limit on the result set.
@@ -111,7 +112,7 @@ public class UserQueryManager {
                 filter = new GroupPredicate(userManager, groupId, false);
 
             }
-            return ResultIterator.create(builder.getOffset(), builder.getMaxCount(), Iterators.filter(result, filter::test));
+            return ResultIterator.create(builder.getOffset(), builder.getMaxCount(), IteratorUtils.filter(result, filter::test));
         }
     }
 
@@ -276,7 +277,7 @@ public class UserQueryManager {
             Iterable<? extends ResultRow> resultRows = query.getRows();
             Iterator<Authorizable> authorizables = Iterators.transform(resultRows.iterator(),
                     new ResultRowToAuthorizable(userManager, root, type, query.getSelectorNames())::apply);
-            return Iterators.filter(authorizables, new UniqueResultPredicate()::test);
+            return IteratorUtils.filter(authorizables, new UniqueResultPredicate()::test);
         } catch (ParseException e) {
             throw new RepositoryException("Invalid user query "+statement, e);
         }
diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
index cecd59c352..7dd0daa7da 100644
--- a/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
+++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserPrincipalProviderTest.java
@@ -280,7 +280,7 @@ public class UserPrincipalProviderTest extends AbstractPrincipalProviderTest {
             root.commit();
 
             Iterator<? extends Principal> principals = principalProvider.findPrincipals(null, SEARCH_TYPE_GROUP);
-            Iterator filtered = Iterators.filter(principals, principal -> EveryonePrincipal.NAME.equals(principal.getName()));
+            Iterator filtered = IteratorUtils.filter(principals, principal -> EveryonePrincipal.NAME.equals(principal.getName()));
             assertEquals(1, IteratorUtils.size(filtered));
         } finally {
             if (everyoneGroup != null) {
diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
index 4eece2dc3c..cfa6cb1b4b 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.guava.common.collect.Iterators;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -116,7 +117,7 @@ abstract class AuthorizableDelegator implements Authorizable {
             @Override
             public Iterator<Group> perform() throws RepositoryException {
                 Iterator<Group> groups = delegate.declaredMemberOf();
-                return Iterators.transform(Iterators.filter(groups, Objects::nonNull), group -> GroupDelegator.wrap(sessionDelegate, group));
+                return Iterators.transform(IteratorUtils.filter(groups, Objects::nonNull), group -> GroupDelegator.wrap(sessionDelegate, group));
             }
         });
     }
@@ -129,7 +130,7 @@ abstract class AuthorizableDelegator implements Authorizable {
             @Override
             public Iterator<Group> perform() throws RepositoryException {
                 Iterator<Group> groups = delegate.memberOf();
-                return Iterators.transform(Iterators.filter(groups, Objects::nonNull), group -> GroupDelegator.wrap(sessionDelegate, group));
+                return Iterators.transform(IteratorUtils.filter(groups, Objects::nonNull), group -> GroupDelegator.wrap(sessionDelegate, group));
             }
         });
     }
diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
index 35a51ad212..0fd9572649 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.oak.jcr.delegate;
 
-import static org.apache.jackrabbit.guava.common.collect.Iterators.filter;
 import static org.apache.jackrabbit.guava.common.collect.Iterators.transform;
 import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN;
 import static org.apache.jackrabbit.JcrConstants.JCR_LOCKISDEEP;
@@ -78,6 +77,7 @@ import org.apache.jackrabbit.oak.api.Tree.Status;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.jcr.lock.LockDeprecation;
 import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
@@ -341,7 +341,7 @@ public class NodeDelegate extends ItemDelegate {
     public Iterator<NodeDelegate> getChildren() throws InvalidItemStateException {
         Iterator<Tree> iterator = getTree().getChildren().iterator();
         return transform(
-                filter(iterator, tree -> tree.exists()),
+                IteratorUtils.filter(iterator, tree -> tree.exists()),
                 tree -> new NodeDelegate(sessionDelegate, tree));
     }
 
diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
index bb88878b30..adf679766a 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
@@ -615,7 +615,7 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Jac
             @NotNull
             @Override
             public NodeIterator perform() throws RepositoryException {
-                Iterator<NodeDelegate> children = Iterators.filter(
+                Iterator<NodeDelegate> children = IteratorUtils.filter(
                         node.getChildren(),
                         // TODO: use Oak names
                         state -> ItemNameMatcher.matches(toJcrPath(state.getName()), namePattern));
@@ -635,7 +635,7 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Jac
             @NotNull
             @Override
             public NodeIterator perform() throws RepositoryException {
-                Iterator<NodeDelegate> children = Iterators.filter(
+                Iterator<NodeDelegate> children = IteratorUtils.filter(
                         node.getChildren(),
                         // TODO: use Oak names
                         state -> ItemNameMatcher.matches(toJcrPath(state.getName()), nameGlobs));
@@ -1724,7 +1724,7 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Jac
         }
 
         public Iterator<PropertyDelegate> iterator() throws InvalidItemStateException {
-            return Iterators.filter(node.getProperties(), predicate::test);
+            return IteratorUtils.filter(node.getProperties(), predicate::test);
         }
 
         public long getSize() {
diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
index da82c39dcf..052e0dd381 100644
--- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
+++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
@@ -35,6 +35,7 @@ import org.apache.jackrabbit.api.security.user.QueryBuilder;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.commons.jackrabbit.user.AuthorizableQueryManager;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
@@ -275,7 +276,7 @@ public class UserQueryTest extends AbstractUserTest {
             });
 
             Iterator<Authorizable> members = g.getMembers();
-            Iterator<Authorizable> users = Iterators.filter(members, 
+            Iterator<Authorizable> users = IteratorUtils.filter(members,
                     authorizable -> !authorizable.isGroup());
             assertSameElements(result, users);
         }
@@ -297,7 +298,7 @@ public class UserQueryTest extends AbstractUserTest {
             });
 
             Iterator<Authorizable> members = g.getDeclaredMembers();
-            Iterator<Authorizable> users = Iterators.filter(members,
+            Iterator<Authorizable> users = IteratorUtils.filter(members,
                 authorizable -> authorizable.isGroup());
             assertSameElements(result, users);
         }
@@ -338,7 +339,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<Authorizable> expected = Iterators.filter(authorizables.iterator(), authorizable -> {
+        Iterator<Authorizable> expected = IteratorUtils.filter(authorizables.iterator(), authorizable -> {
                 try {
                     String name = authorizable.getID();
                     Principal principal = authorizable.getPrincipal();
@@ -413,7 +414,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] canFly = user.getProperty("canFly");
                     return canFly != null && canFly.length == 1 && canFly[0].getBoolean();
@@ -436,7 +437,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] weight = user.getProperty("profile/weight");
                     return weight != null && weight.length == 1 && weight[0].getDouble() > 2000.0;
@@ -459,7 +460,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] numberOfLegs = user.getProperty("numberOfLegs");
                     return numberOfLegs != null && numberOfLegs.length == 1 && numberOfLegs[0].getLong() == 8;
@@ -482,7 +483,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] poisonous = user.getProperty("poisonous");
                     return poisonous != null && poisonous.length == 1;
@@ -505,7 +506,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] food = user.getProperty("profile/food");
                     if (food == null || food.length != 1) {
@@ -591,7 +592,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] cute = user.getProperty("profile/cute");
                     Value[] black = user.getProperty("color");
@@ -618,7 +619,7 @@ public class UserQueryTest extends AbstractUserTest {
             }
         });
 
-        Iterator<User> expected = Iterators.filter(users.iterator(), user -> {
+        Iterator<User> expected = IteratorUtils.filter(users.iterator(), user -> {
                 try {
                     Value[] food = user.getProperty("profile/food");
                     return food != null && food.length == 1 &&
@@ -852,7 +853,7 @@ public class UserQueryTest extends AbstractUserTest {
                 }
             });
 
-            Iterator<User> expected = Iterators.filter(sortedUsers.iterator(), user -> {
+            Iterator<User> expected = IteratorUtils.filter(sortedUsers.iterator(), user -> {
                     try {
                         Value[] cute = user.getProperty("profile/cute");
                         Value[] weight = user.getProperty("profile/weight");
diff --git a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/CountingIterable.java b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/CountingIterable.java
index 93b9f63ca5..b8d5170855 100644
--- a/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/CountingIterable.java
+++ b/oak-run-commons/src/test/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/CountingIterable.java
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.index.indexer.document.flatfile;
 import java.util.Iterator;
 
 import org.apache.jackrabbit.guava.common.collect.Iterators;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 
 class CountingIterable<T> implements Iterable<T> {
     private final Iterable<T> delegate;
@@ -33,7 +34,7 @@ class CountingIterable<T> implements Iterable<T> {
 
     @Override
     public Iterator<T> iterator() {
-        return Iterators.filter(delegate.iterator(), (e) -> {
+        return IteratorUtils.filter(delegate.iterator(), (e) -> {
             count++;
             return true;
         });
diff --git a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
index 5ba70f150a..bf096e53eb 100644
--- a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
+++ b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
@@ -44,6 +44,7 @@ import java.util.stream.StreamSupport;
 
 import org.apache.jackrabbit.guava.common.collect.Iterators;
 import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.IteratorUtils;
 import org.apache.jackrabbit.oak.commons.sort.StringSort;
 import org.apache.jackrabbit.oak.commons.time.Stopwatch;
 import org.apache.jackrabbit.oak.plugins.document.UpdateOp.Key;
@@ -2397,7 +2398,7 @@ public class VersionGarbageCollector {
 
         private Iterator<String> getPrevDocIdsToDelete() throws IOException {
             ensureSorted();
-            return Iterators.filter(prevDocIdsToDelete.getIds(),
+            return IteratorUtils.filter(prevDocIdsToDelete.getIds(),
                     input -> !exclude.contains(input));
         }