You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2005/01/07 17:56:12 UTC

svn commit: r124539 - incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence

Author: tripod
Date: Fri Jan  7 08:56:10 2005
New Revision: 124539

URL: http://svn.apache.org/viewcvs?view=rev&rev=124539
Log:
- fixing some versioning persistence problems
Modified:
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java
   incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java?view=diff&rev=124539&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java&r1=124538&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java&r2=124539
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalFrozenNodeImpl.java	Fri Jan  7 08:56:10 2005
@@ -304,7 +304,6 @@
                 }
             }
         }
-        parent.store();
         return node;
     }
 

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java?view=diff&rev=124539&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java&r1=124538&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java&r2=124539
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionHistoryImpl.java	Fri Jan  7 08:56:10 2005
@@ -239,6 +239,7 @@
         try {
             // remove from persistance state
             node.removeNode(versionName);
+            node.store();
 
             // unregister from labels
             String[] labels = v.internalGetLabels();
@@ -253,7 +254,6 @@
 
             // and remove from history
             versionCache.remove(v.getId());
-            store();
         } catch (RepositoryException e) {
             throw new VersionException("error while storing modifications", e);
         }
@@ -354,7 +354,7 @@
         InternalFrozenNodeImpl.checkin(vNode, VersionManager.NODENAME_FROZEN, src, false, false);
 
         // and store
-        store();
+        node.store();
 
         // update version graph
         InternalVersionImpl version = new InternalVersionImpl(this, vNode);
@@ -364,26 +364,6 @@
         versionCache.put(version.getId(), version);
 
         return version;
-    }
-
-
-    /**
-     * Stores the changes made to this version history
-     *
-     * @throws RepositoryException
-     */
-    protected void store() throws RepositoryException {
-        node.store();
-    }
-
-    /**
-     * discards the changes made to this version history
-     *
-     * @throws RepositoryException
-     */
-    protected void reload() throws RepositoryException {
-        node.reload();
-        init();
     }
 
     /**

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java?view=diff&rev=124539&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java&r1=124538&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java&r2=124539
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/InternalVersionImpl.java	Fri Jan  7 08:56:10 2005
@@ -19,6 +19,7 @@
 import org.apache.jackrabbit.core.version.*;
 import org.apache.jackrabbit.core.QName;
 import org.apache.jackrabbit.core.InternalValue;
+import org.apache.jackrabbit.core.state.NodeState;
 import org.apache.jackrabbit.core.util.uuid.UUID;
 
 import javax.jcr.RepositoryException;
@@ -140,13 +141,14 @@
     public InternalFrozenNode getFrozenNode() {
         // get frozen node
         try {
-            // assuming only child
-            PersistentNode[] nodes = node.getChildNodes();
-            return nodes.length==0 ? null : (InternalFrozenNode) getVersionManager().getItemByInternal(nodes[0].getUUID());
+            NodeState.ChildNodeEntry entry = node.getState().getChildNodeEntry(VersionManager.NODENAME_FROZEN, 1);
+            if (entry==null) {
+                throw new IllegalStateException("version has no frozen node: " + getId());
+            }
+            return (InternalFrozenNode) getVersionManager().getItemByInternal(entry.getUUID());
         } catch (RepositoryException e) {
-            // ignore
+            throw new IllegalStateException("unable to retrieve frozen node: " + e);
         }
-        return null;
     }
 
     /**

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java?view=diff&rev=124539&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java&r1=124538&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java&r2=124539
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/NativePVM.java	Fri Jan  7 08:56:10 2005
@@ -188,7 +188,7 @@
             initVirtualIds(historyRoot.getState());
             log.info("loaded " + idsByExternal.size() + " virtual ids.");
         } catch (ItemStateException e) {
-            throw new RepositoryException("Unable to initialize PersistentVersionManager: " + e.toString());
+            throw new RepositoryException("Unable to initialize PersistentVersionManager: " + e.toString(), e);
         }
     }
 
@@ -274,6 +274,12 @@
     public InternalVersionHistory createVersionHistory(NodeImpl node)
             throws RepositoryException {
 
+        // check if version history for that node already exists
+        InternalVersionHistoryImpl hist = (InternalVersionHistoryImpl) getVersionHistory(node.internalGetUUID());
+        if (hist!=null) {
+            return hist;
+        }
+
         // create deep path
         String uuid = UUID.randomUUID().toString();
         PersistentNode root = historyRoot;
@@ -288,7 +294,7 @@
         QName historyNodeName = new QName(NamespaceRegistryImpl.NS_DEFAULT_URI, uuid);
 
         // create new history node in the persistent state
-        InternalVersionHistoryImpl hist = InternalVersionHistoryImpl.create(this, root, uuid, historyNodeName, node);
+        hist = InternalVersionHistoryImpl.create(this, root, uuid, historyNodeName, node);
         try {
             initVirtualIds(hist.getId(), hist.getNode().getState());
         } catch (ItemStateException e) {

Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java
Url: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java?view=diff&rev=124539&p1=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java&r1=124538&p2=incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java&r2=124539
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java	(original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/version/persistence/PersistentNode.java	Fri Jan  7 08:56:10 2005
@@ -228,6 +228,10 @@
                 PersistentPropertyState propState = (PersistentPropertyState) stateMgr.getItemState(propId);
                 // someone calling this method will always alter the property state, so set status to modified
                 propState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+                // although this is not quite correct, we mark node as modified aswell
+                if (nodeState.getStatus()==ItemState.STATUS_EXISTING) {
+                    nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+                }
                 return propState;
             } catch (ItemStateException e) {
                 throw new RepositoryException("Unable to create property: " + e.toString());
@@ -242,7 +246,9 @@
 
                 // need to store nodestate
                 nodeState.addPropertyEntry(name);
-                nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+                if (nodeState.getStatus()==ItemState.STATUS_EXISTING) {
+                    nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+                }
                 return propState;
             } catch (ItemStateException e) {
                 throw new RepositoryException("Unable to store property: " + e.toString());
@@ -333,7 +339,9 @@
      */
     protected boolean removeNode(QName name, int index) throws RepositoryException {
         if (nodeState.removeChildNodeEntry(name, index)) {
-            nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+            if (nodeState.getStatus()==ItemState.STATUS_EXISTING) {
+                nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+            }
             return true;
         } else {
             return false;
@@ -441,7 +449,9 @@
         PersistentNode node = new PersistentNode(stateMgr, ntMgr, state);
         // add new child node entry
         nodeState.addChildNodeEntry(name, state.getUUID());
-        nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+        if (nodeState.getStatus()==ItemState.STATUS_EXISTING) {
+            nodeState.setStatus(ItemState.STATUS_EXISTING_MODIFIED);
+        }
 
         // add 'auto-create' properties defined in node type
         PropertyDef[] pda = nodeType.getAutoCreatePropertyDefs();