You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ck...@apache.org on 2011/02/22 11:12:57 UTC
svn commit: r1073280 -
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java
Author: ckoell
Date: Tue Feb 22 10:12:57 2011
New Revision: 1073280
URL: http://svn.apache.org/viewvc?rev=1073280&view=rev
Log:
JCR-2877 Extend the consistency check in BundleDbPersistenceManager's to fix child-parent relations
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java?rev=1073280&r1=1073279&r2=1073280&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java Tue Feb 22 10:12:57 2011
@@ -22,13 +22,14 @@ import java.io.File;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.sql.Blob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
+import java.util.Random;
import javax.jcr.RepositoryException;
import javax.sql.DataSource;
@@ -58,6 +59,7 @@ import org.apache.jackrabbit.core.util.d
import org.apache.jackrabbit.core.util.db.DatabaseAware;
import org.apache.jackrabbit.core.util.db.DbUtility;
import org.apache.jackrabbit.core.util.db.StreamWrapper;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -751,6 +753,26 @@ public class BundleDbPersistenceManager
if (loadBundle(parentId) == null) {
log.error("NodeState '" + id + "' references inexistent parent uuid '" + parentId + "'");
}
+ NodePropBundle parentBundle = loadBundle(parentId);
+ Iterator<NodePropBundle.ChildNodeEntry> childNodeIter = parentBundle.getChildNodeEntries().iterator();
+ boolean found = false;
+ while (childNodeIter.hasNext()) {
+ NodePropBundle.ChildNodeEntry entry = childNodeIter.next();
+ if (entry.getId().equals(id)){
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ log.error("NodeState '" + id + "' is not referenced by its parent node '" + parentId + "'");
+ int l = (int) System.currentTimeMillis();
+ int r = new Random().nextInt();
+ int n = l + r;
+ String nodeName = Integer.toHexString(n);
+ parentBundle.addChildNodeEntry(NameFactoryImpl.getInstance().create("{}" + nodeName), id);
+ log.info("NodeState '" + id + "' adds itself to its parent node '" + parentId + "' with a new name '" + nodeName+ "'");
+ modifications.add(parentBundle);
+ }
}
} catch (ItemStateException e) {
log.error("Error reading node '" + parentId + "' (parent of '" + id + "'): " + e);