Author: mduerig Date: Thu Feb 20 16:08:46 2014 New Revision: 1570251 URL: http://svn.apache.org/r1570251 Log: OAK-1370: Guard against concurrent read access through the same session Wrap iterators into synchronized wrappers where necessary
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/ReadWriteNodeTypeManager.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java Thu Feb 20 16:08:46 2014 @@ -16,6 +16,32 @@ */ package org.apache.jackrabbit.oak.plugins.nodetype; +import static com.google.common.base.Preconditions.checkState; +import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Maps.newTreeMap; +import static java.util.Collections.emptyList; +import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION; +import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES; +import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN; +import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES; +import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME; +import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME; +import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; +import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION; +import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES; +import static org.apache.jackrabbit.JcrConstants.JCR_UUID; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_DECLARING_NODE_TYPE; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_MIXIN_TYPES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_CHILD_NODE_DEFINITIONS; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_PROPERTY_DEFINITIONS; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_PRIMARY_TYPE; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_RESIDUAL_CHILD_NODE_DEFINITIONS; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_RESIDUAL_PROPERTY_DEFINITIONS; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_UUID; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.RESIDUAL_NAME; + import java.io.IOException; import java.io.StringWriter; import java.net.URI; @@ -42,6 +68,9 @@ import javax.jcr.nodetype.NodeTypeDefini import javax.jcr.nodetype.NodeTypeIterator; import javax.jcr.nodetype.PropertyDefinition; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefWriter; import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter; import org.apache.jackrabbit.oak.api.PropertyState; @@ -56,36 +85,6 @@ import org.apache.jackrabbit.oak.util.Tr import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - -import static com.google.common.base.Preconditions.checkState; -import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Maps.newTreeMap; -import static java.util.Collections.emptyList; -import static org.apache.jackrabbit.JcrConstants.JCR_CHILDNODEDEFINITION; -import static org.apache.jackrabbit.JcrConstants.JCR_HASORDERABLECHILDNODES; -import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN; -import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES; -import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME; -import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYITEMNAME; -import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; -import static org.apache.jackrabbit.JcrConstants.JCR_PROPERTYDEFINITION; -import static org.apache.jackrabbit.JcrConstants.JCR_SUPERTYPES; -import static org.apache.jackrabbit.JcrConstants.JCR_UUID; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_ABSTRACT; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_IS_QUERYABLE; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_DECLARING_NODE_TYPE; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_MIXIN_TYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_CHILD_NODE_DEFINITIONS; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_PROPERTY_DEFINITIONS; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_PRIMARY_TYPE; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_RESIDUAL_CHILD_NODE_DEFINITIONS; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_RESIDUAL_PROPERTY_DEFINITIONS; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_UUID; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.RESIDUAL_NAME; - /** * <pre> * [nt:nodeType] Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java Thu Feb 20 16:08:46 2014 @@ -16,7 +16,17 @@ */ package org.apache.jackrabbit.oak.plugins.nodetype; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.Iterables.contains; +import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES; +import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; +import static org.apache.jackrabbit.oak.api.Type.STRING; +import static org.apache.jackrabbit.oak.commons.PathUtils.dropIndexFromName; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_SUPERTYPES; + import java.util.List; + import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import javax.jcr.Node; @@ -45,15 +55,6 @@ import org.apache.jackrabbit.oak.namepat import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.contains; -import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES; -import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; -import static org.apache.jackrabbit.oak.api.Type.STRING; -import static org.apache.jackrabbit.oak.commons.PathUtils.dropIndexFromName; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_SUPERTYPES; - /** * Base implementation of a {@link NodeTypeManager} with support for reading * node types from the {@link Tree} returned by {@link #getTypes()}. Methods Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/ReadWriteNodeTypeManager.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/ReadWriteNodeTypeManager.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/ReadWriteNodeTypeManager.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/write/ReadWriteNodeTypeManager.java Thu Feb 20 16:08:46 2014 @@ -16,8 +16,13 @@ */ package org.apache.jackrabbit.oak.plugins.nodetype.write; +import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH; + import java.util.ArrayList; import java.util.List; + import javax.annotation.Nonnull; import javax.jcr.RepositoryException; import javax.jcr.nodetype.ConstraintViolationException; @@ -35,10 +40,6 @@ import org.apache.jackrabbit.oak.api.Roo import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH; - /** * {@code ReadWriteNodeTypeManager} extends the {@link ReadOnlyNodeTypeManager} * with support for operations that modify node types. Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlManagerImpl.java Thu Feb 20 16:08:46 2014 @@ -16,6 +16,8 @@ */ package org.apache.jackrabbit.oak.security.authorization.accesscontrol; +import static com.google.common.base.Preconditions.checkNotNull; + import java.security.Principal; import java.text.ParseException; import java.util.ArrayList; @@ -26,6 +28,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; + import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -84,8 +87,6 @@ import org.apache.jackrabbit.util.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Default implementation of the {@code JackrabbitAccessControlManager} interface. * This implementation covers both editing access control content by path and Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryResultImpl.java Thu Feb 20 16:08:46 2014 @@ -135,7 +135,7 @@ public class QueryResultImpl implements }; final PrefetchIterator<RowImpl> prefIt = new PrefetchIterator<RowImpl>( - rowIterator, + sessionDelegate.sync(rowIterator), PREFETCH_MIN, PREFETCH_TIMEOUT, PREFETCH_MAX, result.getSize()); return new RowIteratorAdapter(prefIt) { @@ -216,8 +216,8 @@ public class QueryResultImpl implements }; final PrefetchIterator<NodeImpl<? extends NodeDelegate>> prefIt = new PrefetchIterator<NodeImpl<? extends NodeDelegate>>( - nodeIterator, - PREFETCH_MIN, PREFETCH_TIMEOUT, PREFETCH_MAX, + sessionDelegate.sync(nodeIterator), + PREFETCH_MIN, PREFETCH_TIMEOUT, PREFETCH_MAX, result.getSize()); return new NodeIteratorAdapter(prefIt) { @Override Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java Thu Feb 20 16:08:46 2014 @@ -16,8 +16,11 @@ */ package org.apache.jackrabbit.oak.jcr.version; +import static com.google.common.collect.Iterators.transform; + import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import javax.jcr.AccessDeniedException; @@ -32,14 +35,12 @@ import javax.jcr.version.VersionHistory; import javax.jcr.version.VersionIterator; import com.google.common.base.Function; -import com.google.common.collect.Iterators; - import org.apache.jackrabbit.commons.iterator.FrozenNodeIteratorAdapter; import org.apache.jackrabbit.commons.iterator.VersionIteratorAdapter; -import org.apache.jackrabbit.oak.jcr.session.NodeImpl; -import org.apache.jackrabbit.oak.jcr.session.SessionContext; import org.apache.jackrabbit.oak.jcr.delegate.VersionDelegate; import org.apache.jackrabbit.oak.jcr.delegate.VersionHistoryDelegate; +import org.apache.jackrabbit.oak.jcr.session.NodeImpl; +import org.apache.jackrabbit.oak.jcr.session.SessionContext; import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation; import org.apache.jackrabbit.oak.util.TODO; @@ -83,13 +84,14 @@ public class VersionHistoryImpl extends return perform(new SessionOperation<VersionIterator>() { @Override public VersionIterator perform() throws RepositoryException { - return new VersionIteratorAdapter(Iterators.transform( - dlg.getAllLinearVersions(), new Function<VersionDelegate, Version>() { - @Override - public Version apply(VersionDelegate input) { - return new VersionImpl(input, sessionContext); - } - })); + Iterator<Version> versions = transform(dlg.getAllLinearVersions(), + new Function<VersionDelegate, Version>() { + @Override + public Version apply(VersionDelegate input) { + return new VersionImpl(input, sessionContext); + } + }); + return new VersionIteratorAdapter(sessionDelegate.sync(versions)); } }); } @@ -99,13 +101,14 @@ public class VersionHistoryImpl extends return perform(new SessionOperation<VersionIterator>() { @Override public VersionIterator perform() throws RepositoryException { - return new VersionIteratorAdapter(Iterators.transform( - dlg.getAllVersions(), new Function<VersionDelegate, Version>() { + Iterator<Version> versions = transform(dlg.getAllVersions(), + new Function<VersionDelegate, Version>() { @Override public Version apply(VersionDelegate input) { return new VersionImpl(input, sessionContext); } - })); + }); + return new VersionIteratorAdapter(sessionDelegate.sync(versions)); } }); } Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java?rev=1570251&r1=1570250&r2=1570251&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java (original) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java Thu Feb 20 16:08:46 2014 @@ -16,6 +16,8 @@ */ package org.apache.jackrabbit.oak.jcr.version; +import static com.google.common.base.Preconditions.checkNotNull; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -40,16 +42,14 @@ import javax.jcr.version.VersionManager; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.commons.PathUtils; -import org.apache.jackrabbit.oak.jcr.session.SessionContext; import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate; import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate; import org.apache.jackrabbit.oak.jcr.delegate.VersionDelegate; import org.apache.jackrabbit.oak.jcr.delegate.VersionHistoryDelegate; import org.apache.jackrabbit.oak.jcr.delegate.VersionManagerDelegate; +import org.apache.jackrabbit.oak.jcr.session.SessionContext; import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation; -import static com.google.common.base.Preconditions.checkNotNull; - public class VersionManagerImpl implements VersionManager { private final SessionContext sessionContext; @@ -226,6 +226,7 @@ public class VersionManagerImpl implemen String absPath, String srcWorkspace, boolean bestEffort, boolean isShallow) throws RepositoryException { + // TODO mind OAK-1370 when implementing this throw new UnsupportedRepositoryOperationException("OAK-1402: Merge not implemented."); } @@ -233,11 +234,13 @@ public class VersionManagerImpl implemen public NodeIterator merge( String absPath, String srcWorkspace, boolean bestEffort) throws RepositoryException { + // TODO mind OAK-1370 when implementing this throw new UnsupportedRepositoryOperationException("OAK-1402: Merge not implemented."); } @Override public NodeIterator merge(Node activityNode) throws RepositoryException { + // TODO mind OAK-1370 when implementing this throw new UnsupportedRepositoryOperationException("OAK-1402: Merge not implemented."); }