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 re...@apache.org on 2018/03/07 08:07:47 UTC
svn commit: r1826082 - in /jackrabbit/oak/branches/1.8: ./
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
Author: reschke
Date: Wed Mar 7 08:07:47 2018
New Revision: 1826082
URL: http://svn.apache.org/viewvc?rev=1826082&view=rev
Log:
OAK-7313: RDB*Store: add DEBUG level logging for filters in RDBVersionGCSupport (ported to 1.8)
Modified:
jackrabbit/oak/branches/1.8/ (props changed)
jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 7 08:07:47 2018
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822121,1822201,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1824962,1825362,1825381,1825442,1825448,1825466,1825470,1825475,1825523,1825525,1825619-1825621,1825651,1825992
+/jackrabbit/oak/trunk:1820660-1820661,1820729,1820734,1820859,1820861,1820878,1820888,1820947,1821130,1821140-1821141,1821240,1821249,1821258,1821325,1821358,1821361-1821362,1821370,1821375,1821393,1821477,1821487,1821516,1821665,1821668,1821681,1822121,1822201,1822723,1822808,1822850,1822934,1823135,1823163,1823169,1824962,1825362,1825381,1825442,1825448,1825466,1825470,1825475,1825523,1825525,1825619-1825621,1825651,1825992,1826079
/jackrabbit/trunk:1345480
Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java?rev=1826082&r1=1826081&r2=1826082&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBVersionGCSupport.java Wed Mar 7 08:07:47 2018
@@ -72,6 +72,7 @@ public class RDBVersionGCSupport extends
final long oldestRevTimeStamp) {
Iterable<NodeDocument> it1;
Iterable<NodeDocument> it2;
+ String name1, name2;
// for schema 0 or 1 rows, we'll have to constrain the path
List<String> excludeKeyPatterns = Arrays.asList("_:/%", "__:/%", "___:/%");
@@ -85,6 +86,7 @@ public class RDBVersionGCSupport extends
List<QueryCondition> conditions1 = new ArrayList<QueryCondition>();
conditions1.add(new QueryCondition(NodeDocument.SD_TYPE, "in", gcTypeCodes));
conditions1.add(new QueryCondition(RDBDocumentStore.VERSIONPROP, ">=", 2));
+ name1 = "version 2 query";
it1 = store.queryAsIterable(Collection.NODES, null, null, Collections.emptyList(), conditions1,
Integer.MAX_VALUE, null);
@@ -92,6 +94,7 @@ public class RDBVersionGCSupport extends
conditions2.add(new QueryCondition(RDBDocumentStore.VERSIONPROP, "null or <", 2));
it2 = store.queryAsIterable(Collection.NODES, null, null, excludeKeyPatterns, conditions2,
Integer.MAX_VALUE, null);
+ name2 = "version <2 fallback on " + excludeKeyPatterns;
} catch (UnsupportedIndexedPropertyException ex) {
// this will happen if we query a table that doesn't have the SD*
// columns - create a new query without the constraint, and let the
@@ -99,26 +102,74 @@ public class RDBVersionGCSupport extends
it1 = store.queryAsIterable(Collection.NODES, null, null, excludeKeyPatterns, Collections.emptyList(),
Integer.MAX_VALUE, null);
it2 = Collections.emptySet();
+ name1 = "version <2 fallback on " + excludeKeyPatterns;
+ name2 = "";
}
final Iterable<NodeDocument> fit1 = it1;
final Iterable<NodeDocument> fit2 = it2;
- return CloseableIterable.wrap(Iterables.filter(Iterables.concat(fit1, fit2), new Predicate<NodeDocument>() {
+ Predicate<NodeDocument> pred = new Predicate<NodeDocument>() {
@Override
public boolean apply(NodeDocument doc) {
return gcTypes.contains(doc.getSplitDocType()) && doc.hasAllRevisionLessThan(oldestRevTimeStamp)
&& !isDefaultNoBranchSplitNewerThan(doc, sweepRevs);
}
- }), new Closeable() {
+ };
+
+ final CountingPredicate<NodeDocument> cp1 = new CountingPredicate<NodeDocument>(name1, pred);
+ final CountingPredicate<NodeDocument> cp2 = new CountingPredicate<NodeDocument>(name2, pred);
+
+ return CloseableIterable.wrap(Iterables.concat(Iterables.filter(fit1, cp1), Iterables.filter(fit2, cp2)), new Closeable() {
@Override
public void close() throws IOException {
Utils.closeIfCloseable(fit1);
Utils.closeIfCloseable(fit2);
+ if (LOG.isDebugEnabled()) {
+ String stats1 = cp1.getStats();
+ String stats2 = cp2.getStats();
+ String message = "";
+ if (!stats1.isEmpty()) {
+ message = stats1;
+ }
+ if (!stats2.isEmpty()) {
+ if (!message.isEmpty()) {
+ message += ", ";
+ }
+ message += stats2;
+ }
+ if (!message.isEmpty()) {
+ LOG.debug(message);
+ }
+ }
}
});
}
+ private static class CountingPredicate<T> implements Predicate<T> {
+
+ private final String name;
+ private final Predicate<T> predicate;
+ private int count, matches;
+
+ public CountingPredicate(String name, Predicate<T> predicate) {
+ this.name = name;
+ this.predicate = predicate;
+ }
+
+ public String getStats() {
+ return count == 0 ? "" : ("Predicate statistics for '" + name + "': " + matches + "/" + count);
+ }
+
+ @Override
+ public boolean apply(T doc) {
+ count += 1;
+ boolean match = predicate.apply(doc);
+ matches += (match ? 1 : 0);
+ return match;
+ }
+ }
+
@Override
public long getOldestDeletedOnceTimestamp(Clock clock, long precisionMs) {
long modifiedMs = Long.MIN_VALUE;