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 mr...@apache.org on 2020/09/22 14:13:45 UTC
svn commit: r1881932 - in /jackrabbit/oak/branches/1.8: ./
oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/
oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/
Author: mreutegg
Date: Tue Sep 22 14:13:45 2020
New Revision: 1881932
URL: http://svn.apache.org/viewvc?rev=1881932&view=rev
Log:
OAK-7553: Extract interface from CommitValueResolver
Merge revision 1833787 from trunk
Added:
jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java
- copied, changed from r1833787, jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java
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/CommitValueResolver.java
jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolverTest.java
Propchange: jackrabbit/oak/branches/1.8/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1833787
Copied: jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java (from r1833787, jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java?p2=jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java&p1=jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java&r1=1833787&r2=1881932&rev=1881932&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CachingCommitValueResolver.java Tue Sep 22 14:13:45 2020
@@ -18,13 +18,12 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
import com.google.common.base.Supplier;
import com.google.common.cache.Cache;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import static com.google.common.cache.CacheBuilder.newBuilder;
import static com.google.common.collect.ImmutableList.of;
@@ -47,8 +46,8 @@ final class CachingCommitValueResolver i
}
@Override
- public String resolve(@Nonnull Revision changeRevision,
- @Nonnull NodeDocument doc) {
+ public String resolve(@NotNull Revision changeRevision,
+ @NotNull NodeDocument doc) {
// check cache first
String value = commitValueCache.getIfPresent(changeRevision);
if (value != null) {
@@ -126,9 +125,9 @@ final class CachingCommitValueResolver i
* @return the document with the change or {@code null} if there is no
* document with such a change.
*/
- @CheckForNull
- private NodeDocument resolveDocument(@Nonnull NodeDocument doc,
- @Nonnull Revision changeRevision) {
+ @Nullable
+ private NodeDocument resolveDocument(@NotNull NodeDocument doc,
+ @NotNull Revision changeRevision) {
// check if the document contains the change or we need to
// look up previous documents for the actual change
if (doc.getLocalCommitRoot().containsKey(changeRevision)
Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolver.java?rev=1881932&r1=1881931&r2=1881932&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolver.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolver.java Tue Sep 22 14:13:45 2020
@@ -16,136 +16,20 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
-import java.util.List;
-
-import com.google.common.base.Supplier;
-import com.google.common.cache.Cache;
-
-import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static com.google.common.cache.CacheBuilder.newBuilder;
-import static com.google.common.collect.ImmutableList.of;
/**
* Resolves the commit value for a given change revision on a document.
*/
-final class CommitValueResolver {
-
- private static final List<String> COMMIT_ROOT_OR_REVISIONS
- = of(NodeDocument.COMMIT_ROOT, NodeDocument.REVISIONS);
-
- private final Cache<Revision, String> commitValueCache;
-
- private final Supplier<RevisionVector> sweepRevisions;
-
- CommitValueResolver(int cacheSize, Supplier<RevisionVector> sweepRevisions) {
- this.commitValueCache = newBuilder().maximumSize(cacheSize).build();
- this.sweepRevisions = sweepRevisions;
- }
-
- String resolve(@NotNull Revision changeRevision,
- @NotNull NodeDocument doc) {
- // check cache first
- String value = commitValueCache.getIfPresent(changeRevision);
- if (value != null) {
- return value;
- }
- // need to determine the commit value
- doc = resolveDocument(doc, changeRevision);
- if (doc == null) {
- // the document including its history does not contain a change
- // for the given revision
- return null;
- }
- // at this point 'doc' is guaranteed to have a local entry
- // for the given change revision
- if (sweepRevisions.get().isRevisionNewer(changeRevision)) {
- // change revision is newer than sweep revision
- // resolve the commit value without any short cuts
- value = doc.resolveCommitValue(changeRevision);
- } else {
- // change revision is equal or older than sweep revision
- // there are different cases:
- // - doc is a main document and we have a guarantee that a
- // potential branch commit is marked accordingly
- // - doc is a split document and the revision is guaranteed
- // to be committed. the remaining question is whether the
- // revision is from a branch commit
- NodeDocument.SplitDocType sdt = doc.getSplitDocType();
- if (sdt == NodeDocument.SplitDocType.NONE) {
- // sweeper ensures that all changes on main document
- // before the sweep revision are properly marked with
- // branch commit entry if applicable
- if (doc.getLocalBranchCommits().contains(changeRevision)) {
- // resolve the commit value the classic way
- value = doc.resolveCommitValue(changeRevision);
- } else {
- value = "c";
- }
- } else if (sdt == NodeDocument.SplitDocType.DEFAULT_NO_BRANCH) {
- // split document without branch commits, we don't have
- // to check the commit root, the commit value is always 'c'
- value = "c";
- } else {
- // some other split document type introduced
- // before Oak 1.8 and we don't know if this is a branch
- // commit. first try to resolve
- value = doc.resolveCommitValue(changeRevision);
- if (value == null) {
- // then it must be a non-branch commit and the
- // split document with the commit value was
- // already garbage collected
- value = "c";
- }
- }
- }
- if (Utils.isCommitted(value)) {
- // only cache committed states
- // e.g. branch commits may be merged later and
- // the commit value will change
- commitValueCache.put(changeRevision, value);
- }
- return value;
- }
+public interface CommitValueResolver {
/**
- * Resolves to the document that contains the change with the given
- * revision. If the given document contains a local change for the given
- * revision, then the passed document is returned. Otherwise this method
- * looks up previous documents and returns one with a change for the given
- * revision. This method returns {@code null} if neither the passed document
- * nor any of its previous documents contains a change for the given
- * revision.
+ * Resolve a change revision on the given document and return the commit
+ * value for the change revision.
*
- * @param doc the document to resolve for the given change revision.
- * @param changeRevision the revision of a change.
- * @return the document with the change or {@code null} if there is no
- * document with such a change.
+ * @param changeRevision the revision for a change.
+ * @param doc the document with the change.
+ * @return the commit value of the revision.
*/
- @Nullable
- private NodeDocument resolveDocument(@NotNull NodeDocument doc,
- @NotNull Revision changeRevision) {
- // check if the document contains the change or we need to
- // look up previous documents for the actual change
- if (doc.getLocalCommitRoot().containsKey(changeRevision)
- || doc.getLocalRevisions().containsKey(changeRevision)) {
- return doc;
- }
- // find the previous document with this change
- // first check if there is a commit root entry for this revision
- NodeDocument d = null;
- for (String p : COMMIT_ROOT_OR_REVISIONS) {
- for (NodeDocument prev : doc.getPreviousDocs(p, changeRevision)) {
- d = prev;
- break;
- }
- if (d != null) {
- break;
- }
- }
- return d;
- }
-
+ String resolve(@NotNull Revision changeRevision, @NotNull NodeDocument doc);
}
Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1881932&r1=1881931&r2=1881932&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java Tue Sep 22 14:13:45 2020
@@ -526,13 +526,8 @@ public final class DocumentNodeStore
public DocumentNodeStore(DocumentNodeStoreBuilder<?> builder) {
this.nodeCachePredicate = builder.getNodeCachePredicate();
this.updateLimit = builder.getUpdateLimit();
- this.commitValueResolver = new CommitValueResolver(builder.getCommitValueCacheSize(),
- new Supplier<RevisionVector>() {
- @Override
- public RevisionVector get() {
- return getSweepRevisions();
- }
- });
+ this.commitValueResolver = new CachingCommitValueResolver(
+ builder.getCommitValueCacheSize(), this::getSweepRevisions);
this.blobStore = builder.getBlobStore();
this.nodeStoreStatsCollector = builder.getNodeStoreStatsCollector();
if (builder.isUseSimpleRevision()) {
Modified: jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolverTest.java?rev=1881932&r1=1881931&r2=1881932&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolverTest.java (original)
+++ jackrabbit/oak/branches/1.8/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitValueResolverTest.java Tue Sep 22 14:13:45 2020
@@ -45,7 +45,7 @@ public class CommitValueResolverTest {
@Before
public void setup() {
ns = builderProvider.newBuilder().setUpdateLimit(20).setAsyncDelay(0).getNodeStore();
- resolver = new CommitValueResolver(0, new Supplier<RevisionVector>() {
+ resolver = new CachingCommitValueResolver(0, new Supplier<RevisionVector>() {
@Override
public RevisionVector get() {
return ns.getSweepRevisions();