Author: reschke
Date: Wed May 30 13:11:22 2018
New Revision: 1832541
URL: http://svn.apache.org/viewvc?rev=1832541&view=rev
Log:
OAK-7471: add a config switch to disable locking
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockDeprecation.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/JcrDescriptorsImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImporterImpl.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/NodeDelegate.java
Wed May 30 13:11:22 2018
@@ -75,6 +75,8 @@ import javax.jcr.security.AccessControlE
import com.google.common.base.Function;
import com.google.common.base.Predicate;
+
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
@@ -82,6 +84,7 @@ import org.apache.jackrabbit.oak.api.Tre
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.jcr.lock.LockDeprecation;
import org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
@@ -378,6 +381,9 @@ public class NodeDelegate extends ItemDe
}
public boolean canAddMixin(String typeName) throws RepositoryException {
+ if (!LockDeprecation.isLockingSupported() &&
JcrConstants.MIX_LOCKABLE.equals(typeName)) {
+ return false;
+ }
Tree type =
sessionDelegate.getRoot().getTree(NODE_TYPES_PATH).getChild(typeName);
if (type.exists()) {
return !TreeUtil.getBoolean(type, JCR_IS_ABSTRACT)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockDeprecation.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockDeprecation.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockDeprecation.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockDeprecation.java
Wed May 30 13:11:22 2018
@@ -21,6 +21,8 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.jcr.UnsupportedRepositoryOperationException;
+
import org.apache.jackrabbit.oak.jcr.session.NodeImpl;
import org.apache.jackrabbit.oak.jcr.session.SessionImpl;
import org.slf4j.Logger;
@@ -33,6 +35,9 @@ public class LockDeprecation {
private static final Logger LOG =
LoggerFactory.getLogger(LockDeprecation.class);
+ private static final String LOCKSUPPORT =
System.getProperty("oak.locksupport", "deprecated");
+ private static final boolean ISLOCKINGSUPPORTED =
!("disabled".equals(LOCKSUPPORT));
+
private LockDeprecation() {
}
@@ -44,18 +49,27 @@ public class LockDeprecation {
new String[] { Thread.class.getName(),
java.lang.reflect.Method.class.getName(), LockDeprecation.class.getName(),
LockManagerImpl.class.getName(), NodeImpl.class.getName(),
SessionImpl.class.getName() }));
- public static void logCall(String operation) {
-
- boolean firstInvocation = NOTWARNEDYET.getAndSet(false);
+ public static void logCall(String operation) throws
UnsupportedRepositoryOperationException {
- if (firstInvocation) {
- String explanation = "Support for JCR Locking is deprecated and
will be disabled in a future version of Jackrabbit Oak (see OAK-6421 for
further information)";
- LOG.warn(explanation + " - " + createLogMessage(operation));
- } else if (LOG.isTraceEnabled()) {
- LOG.trace(createLogMessage(operation));
+ if (!ISLOCKINGSUPPORTED) {
+ throw new UnsupportedRepositoryOperationException(
+ "Support for JCR Locking is disabled (see OAK-6421 for
further information)");
+ } else {
+ boolean firstInvocation = NOTWARNEDYET.getAndSet(false);
+
+ if (firstInvocation) {
+ String explanation = "Support for JCR Locking is deprecated
and will be disabled in a future version of Jackrabbit Oak (see OAK-6421 for
further information)";
+ LOG.warn(explanation + " - " + createLogMessage(operation));
+ } else if (LOG.isTraceEnabled()) {
+ LOG.trace(createLogMessage(operation));
+ }
}
}
+ public final static boolean isLockingSupported() {
+ return ISLOCKINGSUPPORTED;
+ }
+
private static String createLogMessage(String operation) {
StackTraceElement elements[] = Thread.currentThread().getStackTrace();
StringBuilder b = new StringBuilder();
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/JcrDescriptorsImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/JcrDescriptorsImpl.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/JcrDescriptorsImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/JcrDescriptorsImpl.java
Wed May 30 13:11:22 2018
@@ -20,6 +20,7 @@ import javax.jcr.Value;
import javax.jcr.ValueFactory;
import org.apache.jackrabbit.oak.api.Descriptors;
+import org.apache.jackrabbit.oak.jcr.lock.LockDeprecation;
import org.apache.jackrabbit.oak.spi.descriptors.GenericDescriptors;
import static javax.jcr.Repository.OPTION_LOCKING_SUPPORTED;
@@ -37,7 +38,7 @@ public class JcrDescriptorsImpl extends
// add the descriptors of the features that are provided by the JCR
layer
final Value trueValue = valueFactory.createValue(true);
- put(OPTION_LOCKING_SUPPORTED, trueValue, true, true);
+ put(OPTION_LOCKING_SUPPORTED,
valueFactory.createValue(LockDeprecation.isLockingSupported()), true, true);
put(OPTION_XML_EXPORT_SUPPORTED, trueValue, true, true);
put(OPTION_XML_IMPORT_SUPPORTED, trueValue, true, true);
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
Wed May 30 13:11:22 2018
@@ -1208,6 +1208,9 @@ public class NodeImpl<T extends NodeDele
@Override
public boolean isLocked() throws RepositoryException {
+ if (!LockDeprecation.isLockingSupported()) {
+ return false;
+ }
return getLockManager().isLocked(getPath());
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
Wed May 30 13:11:22 2018
@@ -657,7 +657,8 @@ public class SessionImpl implements Jack
if (!parent.isCheckedOut()) {
return false;
}
- if (parent.isLocked()) {
+ boolean hasLocking =
sessionContext.getRepository().getDescriptorValue(Repository.OPTION_LOCKING_SUPPORTED).getBoolean();
+ if (hasLocking && parent.isLocked()) {
return false;
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
Wed May 30 13:11:22 2018
@@ -44,6 +44,7 @@ import org.apache.jackrabbit.oak.api.Roo
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
import org.apache.jackrabbit.oak.jcr.delegate.WorkspaceDelegate;
+import org.apache.jackrabbit.oak.jcr.lock.LockDeprecation;
import org.apache.jackrabbit.oak.jcr.lock.LockManagerImpl;
import org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl;
import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
@@ -197,7 +198,8 @@ public class WorkspaceImpl implements Ja
}
@Override
- public LockManagerImpl getLockManager() {
+ public LockManagerImpl getLockManager() throws
UnsupportedRepositoryOperationException {
+ LockDeprecation.logCall("get LockManager");
return new LockManagerImpl(sessionContext);
}
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=1832541&r1=1832540&r2=1832541&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
Wed May 30 13:11:22 2018
@@ -49,6 +49,7 @@ import org.apache.jackrabbit.oak.jcr.del
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.lock.LockDeprecation;
import org.apache.jackrabbit.oak.jcr.lock.LockManagerImpl;
import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
@@ -389,12 +390,15 @@ public class VersionManagerImpl implemen
}
private void checkNotLocked(String absPath) throws RepositoryException {
+ if (!LockDeprecation.isLockingSupported()) {
+ return;
+ }
// TODO: avoid nested calls
LockManagerImpl lockManager =
sessionContext.getWorkspace().getLockManager();
if (lockManager.isLocked(absPath)) {
NodeDelegate node =
sessionContext.getSessionDelegate().getNode(absPath);
if (!lockManager.canUnlock(node)) {
- throw new LockException("Node at " + absPath + " is locked");
+ throw new LockException("Node at " + absPath + " is locked");
}
}
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImporterImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImporterImpl.java?rev=1832541&r1=1832540&r2=1832541&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImporterImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImporterImpl.java
Wed May 30 13:11:22 2018
@@ -31,6 +31,7 @@ import javax.jcr.ImportUUIDBehavior;
import javax.jcr.ItemExistsException;
import javax.jcr.PathNotFoundException;
import javax.jcr.PropertyType;
+import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
@@ -147,7 +148,8 @@ public class ImporterImpl implements Imp
if (!vMgr.isCheckedOut(absPath)) {
throw new VersionException("Target node is checked in.");
}
- if (importTargetTree.getStatus() != Tree.Status.NEW &&
wsp.getLockManager().isLocked(absPath)) {
+ boolean hasLocking =
sessionContext.getRepository().getDescriptorValue(Repository.OPTION_LOCKING_SUPPORTED).getBoolean();
+ if (importTargetTree.getStatus() != Tree.Status.NEW && hasLocking &&
wsp.getLockManager().isLocked(absPath)) {
throw new LockException("Target node is locked.");
}
effectiveNodeTypeProvider = wsp.getNodeTypeManager();