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 2023/07/28 11:46:09 UTC
[jackrabbit-oak] 21/22: OAK-10199 : refactored RDBVersionGCSupport code
This is an automated email from the ASF dual-hosted git repository.
daim pushed a commit to branch OAK-10199
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit d3afe3155c82e16fffc84642dfb84e45e09c5f22
Author: Rishabh Kumar <di...@adobe.com>
AuthorDate: Wed Jul 19 22:41:23 2023 +0530
OAK-10199 : refactored RDBVersionGCSupport code
---
.../plugins/document/rdb/RDBVersionGCSupport.java | 54 ++++++++++++----------
1 file changed, 30 insertions(+), 24 deletions(-)
diff --git a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
index 1b35a30f07..5e66bd974d 100644
--- a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
+++ b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
@@ -44,6 +44,7 @@ import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
import java.util.stream.Stream;
import org.apache.jackrabbit.oak.commons.properties.SystemPropertySupplier;
@@ -133,32 +134,37 @@ public class RDBVersionGCSupport extends VersionGCSupport {
new QueryCondition(MODIFIED_IN_SECS, ">", getModifiedInSecs(fromModified)));
if (MODE == 1) {
- final Iterable<NodeDocument> itr1 = getIterator(EMPTY_KEY_PATTERN, c1);
- if (size(itr1) >= limit) {
- return itr1;
- }
- final Iterable<NodeDocument> itr2 = getIterator(EMPTY_KEY_PATTERN, c2);
-
- final Stream<NodeDocument> s1 = stream(itr1.spliterator(), false);
- final Stream<NodeDocument> s2 = stream(itr2.spliterator(), false);
- return wrap(concat(s1, s2).sorted((o1, o2) -> comparing(NodeDocument::getModified).thenComparing(Document::getId).compare(o1, o2)).limit(limit).collect(toList()), () -> {
- closeIfCloseable(itr1);
- closeIfCloseable(itr2);
- });
+ return getNodeDocuments(() -> getIterator(EMPTY_KEY_PATTERN, c1), () -> getIterator(EMPTY_KEY_PATTERN, c2), limit);
} else {
- final Iterable<NodeDocument> itr1 = store.queryAsIterable(NODES, null, null, EMPTY_KEY_PATTERN, c1, limit, of(MODIFIED_IN_SECS, ID));
- if (size(itr1) >= limit) {
- return itr1;
- }
- final Iterable<NodeDocument> itr2 = store.queryAsIterable(NODES, null, null, EMPTY_KEY_PATTERN, c2, limit, of(MODIFIED_IN_SECS, ID));
-
- final Stream<NodeDocument> s1 = stream(itr1.spliterator(), false);
- final Stream<NodeDocument> s2 = stream(itr2.spliterator(), false);
- return wrap(concat(s1, s2).sorted((o1, o2) -> comparing(NodeDocument::getModified).thenComparing(Document::getId).compare(o1, o2)).limit(limit).collect(toList()), () -> {
- closeIfCloseable(itr1);
- closeIfCloseable(itr2);
- });
+ return getNodeDocuments(() -> store.queryAsIterable(NODES, null, null, EMPTY_KEY_PATTERN, c1, limit, of(MODIFIED_IN_SECS, ID)),
+ () -> store.queryAsIterable(NODES, null, null, EMPTY_KEY_PATTERN, c2, limit, of(MODIFIED_IN_SECS, ID)),
+ limit);
+ }
+ }
+
+ /**
+ * To fetch {@link NodeDocument} from database
+ *
+ * @param supplier1 document supplier on basis of 1st Condition
+ * @param supplier2 document supplier on basis of 2nd Condition
+ * @param limit no. of documents to fetch from db
+ * @return sorted documents supplied by supplier1 & supplier2
+ */
+ private Iterable<NodeDocument> getNodeDocuments(final Supplier<Iterable<NodeDocument>> supplier1, final Supplier<Iterable<NodeDocument>> supplier2, final int limit) {
+
+ final Iterable<NodeDocument> itr1 = supplier1.get();
+ if (size(itr1) >= limit) {
+ return itr1;
}
+
+ final Iterable<NodeDocument> itr2 = supplier2.get();
+
+ final Stream<NodeDocument> s1 = stream(itr1.spliterator(), false);
+ final Stream<NodeDocument> s2 = stream(itr2.spliterator(), false);
+ return wrap(concat(s1, s2).sorted((o1, o2) -> comparing(NodeDocument::getModified).thenComparing(Document::getId).compare(o1, o2)).limit(limit).collect(toList()), () -> {
+ closeIfCloseable(itr1);
+ closeIfCloseable(itr2);
+ });
}
@Override