Return-Path: X-Original-To: apmail-jackrabbit-commits-archive@www.apache.org Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9166218AA0 for ; Mon, 21 Dec 2015 16:15:57 +0000 (UTC) Received: (qmail 2089 invoked by uid 500); 21 Dec 2015 16:15:57 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 2028 invoked by uid 500); 21 Dec 2015 16:15:57 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 2019 invoked by uid 99); 21 Dec 2015 16:15:57 -0000 Received: from Unknown (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 21 Dec 2015 16:15:57 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id ED0DAC06FB for ; Mon, 21 Dec 2015 16:15:56 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.8 X-Spam-Level: * X-Spam-Status: No, score=1.8 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id mHA4b_QGiSKA for ; Mon, 21 Dec 2015 16:15:49 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTP id B883B2050A for ; Mon, 21 Dec 2015 16:15:49 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 122B7E0428 for ; Mon, 21 Dec 2015 16:15:48 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id E0A223A0C1F for ; Mon, 21 Dec 2015 16:15:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1721205 - in /jackrabbit/branches/2.10/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/ main/java/org/apache/jackrabbit/core/persistence/bundle/ main/java/org/apache/jackrabbit/core/persistence/util/ main/java/org/apache/jackrabb... Date: Mon, 21 Dec 2015 16:15:48 -0000 To: commits@jackrabbit.apache.org From: baedke@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20151221161548.E0A223A0C1F@svn01-us-west.apache.org> Author: baedke Date: Mon Dec 21 16:15:48 2015 New Revision: 1721205 URL: http://svn.apache.org/viewvc?rev=1721205&view=rev Log: JCR-2633: Modified externally exception when modifying mixinTypes with single session Persist jcr:mixinTypes to avoid inconsistencies when adding and removing mixin types (patch created by berry@halderen.net). Added: jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LostFromCacheIssueTest.java Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java Mon Dec 21 16:15:48 2015 @@ -381,7 +381,7 @@ public class ItemManager implements Item try { state = sism.getItemState(itemId); } catch (NoSuchItemStateException nsise) { - throw new ItemNotFoundException(itemId.toString()); + throw new ItemNotFoundException(itemId.toString(), nsise); } catch (ItemStateException ise) { String msg = "failed to retrieve item state of item " + itemId; log.error(msg, ise); Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java Mon Dec 21 16:15:48 2015 @@ -642,9 +642,8 @@ public abstract class AbstractBundlePers bundle.update((NodeState) state); } else { PropertyId id = (PropertyId) state.getId(); - // skip redundant primaryType, mixinTypes and uuid properties + // skip redundant primaryType and uuid properties if (id.getName().equals(JCR_PRIMARYTYPE) - || id.getName().equals(JCR_MIXINTYPES) || id.getName().equals(JCR_UUID)) { continue; } @@ -690,9 +689,8 @@ public abstract class AbstractBundlePers for (ItemState state : changeLog.addedStates()) { if (!state.isNode()) { PropertyId id = (PropertyId) state.getId(); - // skip primaryType pr mixinTypes properties + // skip primaryType and uuid properties if (id.getName().equals(JCR_PRIMARYTYPE) - || id.getName().equals(JCR_MIXINTYPES) || id.getName().equals(JCR_UUID)) { continue; } Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java Mon Dec 21 16:15:48 2015 @@ -248,7 +248,6 @@ class BundleReader { NodePropBundle.PropertyEntry pState = readPropertyEntry(pId); // skip redundant primaryType, mixinTypes and uuid properties if (!name.equals(NameConstants.JCR_PRIMARYTYPE) - && !name.equals(NameConstants.JCR_MIXINTYPES) && !name.equals(NameConstants.JCR_UUID)) { bundle.addProperty(pState); } Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java Mon Dec 21 16:15:48 2015 @@ -306,7 +306,6 @@ public class NodePropBundle { */ public void addProperty(PropertyEntry entry) { assert !NameConstants.JCR_PRIMARYTYPE.equals(entry.getName()); - assert !NameConstants.JCR_MIXINTYPES.equals(entry.getName()); assert !NameConstants.JCR_UUID.equals(entry.getName()); properties.put(entry.getName(), entry); } Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Mon Dec 21 16:15:48 2015 @@ -264,6 +264,7 @@ public class SharedItemStateManager } } + Exception ex = null; ISMLocking.ReadLock readLock = acquireReadLock(id); try { // check internal first @@ -273,6 +274,7 @@ public class SharedItemStateManager // exception-for-control-flow performance hit here, as almost // all performance-critical content is non-virtual. With this // catch we can avoid an extra hasNonVirtualItemState() call. + ex = e; } finally { readLock.release(); } @@ -284,7 +286,8 @@ public class SharedItemStateManager } } - throw new NoSuchItemStateException(id.toString()); + String message = id.toString(); + throw ex == null ? new NoSuchItemStateException(message) : new NoSuchItemStateException(message, ex); } /** Added: jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LostFromCacheIssueTest.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LostFromCacheIssueTest.java?rev=1721205&view=auto ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LostFromCacheIssueTest.java (added) +++ jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LostFromCacheIssueTest.java Mon Dec 21 16:15:48 2015 @@ -0,0 +1,84 @@ +package org.apache.jackrabbit.core; + +import javax.jcr.NamespaceException; +import javax.jcr.NamespaceRegistry; +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.Session; +import javax.jcr.Workspace; +import javax.jcr.nodetype.NodeTypeManager; + +import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl; +import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry; +import org.apache.jackrabbit.spi.Name; +import org.apache.jackrabbit.spi.QNodeDefinition; +import org.apache.jackrabbit.spi.QNodeTypeDefinition; +import org.apache.jackrabbit.spi.QPropertyDefinition; +import org.apache.jackrabbit.spi.commons.QNodeTypeDefinitionImpl; +import org.apache.jackrabbit.test.AbstractJCRTest; + +public class LostFromCacheIssueTest extends AbstractJCRTest { + + public Property mixinTypes; + + + public void setUp() throws Exception { + + super.setUp(); + Session session = superuser; + + System.err.println("Registering namespace and node types..."); + Workspace workspace = session.getWorkspace(); + NamespaceRegistry namespaceRegistry = workspace.getNamespaceRegistry(); + NodeTypeManager ntmgr = workspace.getNodeTypeManager(); + NodeTypeRegistry nodetypeRegistry = ((NodeTypeManagerImpl)ntmgr).getNodeTypeRegistry(); + try { + namespaceRegistry.registerNamespace("lfcit", "data:lfcit"); + } catch (NamespaceException ignore) { /* mapping may already be present */ } + QNodeTypeDefinition nodeTypeDefinition = new QNodeTypeDefinitionImpl( + ((SessionImpl)session).getQName("lfcit:mixin"), + Name.EMPTY_ARRAY, + Name.EMPTY_ARRAY, + true, + false, + true, + false, + null, + QPropertyDefinition.EMPTY_ARRAY, + QNodeDefinition.EMPTY_ARRAY + ); + nodetypeRegistry.registerNodeType(nodeTypeDefinition); + nodeTypeDefinition = new QNodeTypeDefinitionImpl( + ((SessionImpl)session).getQName("lfcit:mxn"), + Name.EMPTY_ARRAY, + Name.EMPTY_ARRAY, + true, + false, + true, + false, + null, + QPropertyDefinition.EMPTY_ARRAY, + QNodeDefinition.EMPTY_ARRAY + ); + nodetypeRegistry.registerNodeType(nodeTypeDefinition); + + session.getRootNode().addNode("test").addNode("node"); + session.save(); + } + + public void testIssue() throws Exception { + String path = "/test/node"; + Session session = superuser; + Node node = session.getRootNode().getNode(path.substring(1)); + node.addMixin("lfcit:mxn"); + mixinTypes = node.getProperty("jcr:mixinTypes"); + session.save(); + node.addMixin("lfcit:mixin"); + session.save(); + node.removeMixin("lfcit:mxn"); + node.removeMixin("lfcit:mixin"); + session.save(); + node.addMixin("lfcit:mixin"); + session.save(); + } +} Modified: jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java?rev=1721205&r1=1721204&r2=1721205&view=diff ============================================================================== --- jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java (original) +++ jackrabbit/branches/2.10/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java Mon Dec 21 16:15:48 2015 @@ -58,6 +58,8 @@ public class TestAll extends TestCase { suite.addTestSuite(ConcurrentReorderTest.class); suite.addTestSuite(ConcurrentAddRemoveNodeTest.class); + suite.addTestSuite(LostFromCacheIssueTest.class); + // TODO: These tests pass, but they cause some instability in other // parts of the test suite, most likely due to uncleaned test data if (Boolean.getBoolean("org.apache.jackrabbit.test.integration")) {