pnever 2004/12/13 07:34:02
Modified:
proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer
Tag: TWS421_BRANCH ContentCheck.java
NamespaceConsistencyCheck.java Repair.java
RepairConstants.java RepairHandler.java
UniqueContentIdCheck.java XHttpClient.java
XRepairLogWriter.java XTaminoClient.java
proposals/tamino/src/store/org/apache/slide/store/tamino/common
Tag: TWS421_BRANCH XContent.java
proposals/tamino/src/store/org/apache/slide/store/tamino/datastore
Tag: TWS421_BRANCH XContentAccessor.java
XContentWrapper.java
Log:
Repair tool: more fixes
Revision Changes Path
No revision
No revision
1.1.4.4 +23 -14
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/ContentCheck.java
Index: ContentCheck.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/ContentCheck.java,v
retrieving revision 1.1.4.3
retrieving revision 1.1.4.4
diff -u -r1.1.4.3 -r1.1.4.4
--- ContentCheck.java 7 Dec 2004 10:04:33 -0000 1.1.4.3
+++ ContentCheck.java 13 Dec 2004 15:34:02 -0000 1.1.4.4
@@ -22,10 +22,8 @@
package org.apache.slide.store.tamino.tools.repairer;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
+
import org.apache.slide.content.NodeProperty;
import org.apache.slide.content.NodeRevisionDescriptor;
import org.apache.slide.content.NodeRevisionNumber;
@@ -95,6 +93,7 @@
String inoId;
Map.Entry e;
+ List patchesToApply = new ArrayList();
allUuris =
taminoClient.getDescriptorsAccessor().getUurisMap(XPathFactory.uuris(
taminoCollection )); // inoId -> uuri
iter = allUuris.entrySet().iterator();
while ( iter.hasNext() ) {
@@ -144,20 +143,25 @@
.readDescriptorsByPath(versionUri,
group.getMainStore().useBinding());
String versionContentId =
XDescriptorsUtil.getContentId(versionDesc, versionNumber);
if (versionContentId != null) {
- versionContent =
taminoClient4History.getContentAccessor().readContent(versionContentId);
- versionContent = new
XContent(versionContent.getContent(),
versionDesc.getRevisionDescriptor(versionNumber));
-
versionContent.setContentId(versionContentId);
+ try {
+ versionContent =
taminoClient4History.getContentAccessor().readContent(versionContentId);
+ versionContent = new
XContent(versionContent.getContent(),
versionDesc.getRevisionDescriptor(versionNumber));
+
versionContent.setContentId(versionContentId);
+ }
+ catch (XContentNotFoundException
notFound) {}
}
}
if (versionContent == null) {
msg += "; metadata document will be removed";
- logAndApplyPatch(new RemoveDescriptor(inoId,
msg));
+ patchesToApply.add(new
RemoveDescriptor(inoId, msg));
+ // logAndApplyPatch(new
RemoveDescriptor(inoId, msg));
}
else {
// restore content from history
msg += "; content will be restored from
history";
- logAndApplyPatch(new
RestoreContentFromHistory(group.getMainStore(), desc, nrn, versionContent,
msg));
+ patchesToApply.add(new
RestoreContentFromHistory(group.getMainStore(), desc, nrn, versionContent,
msg));
+ //logAndApplyPatch(new
RestoreContentFromHistory(group.getMainStore(), desc, nrn, versionContent,
msg));
}
}
}
@@ -168,7 +172,12 @@
}
}
}
-
+ }
+ // apply patches
+ Iterator pit = patchesToApply.iterator();
+ while (pit.hasNext()) {
+ Patch p = (Patch)pit.next();
+ logAndApplyPatch(p);
}
}
1.1.4.2 +42 -6
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/NamespaceConsistencyCheck.java
Index: NamespaceConsistencyCheck.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/NamespaceConsistencyCheck.java,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -r1.1.4.1 -r1.1.4.2
--- NamespaceConsistencyCheck.java 3 Dec 2004 17:32:54 -0000 1.1.4.1
+++ NamespaceConsistencyCheck.java 13 Dec 2004 15:34:02 -0000 1.1.4.2
@@ -33,6 +33,7 @@
import org.apache.slide.structure.ObjectNode;
import org.apache.slide.util.XAssertionFailed;
import org.apache.slide.util.XException;
+import org.apache.slide.webdav.util.WebdavUtils;
/**
@@ -44,7 +45,7 @@
protected NamespaceConsistencyCheck(XTaminoClient taminoClient) throws
XException {
super(taminoClient, MSG_START_DIR_INCONSISTENCIES,
MSG_DESCR_DIR_INCONSISTENCIES);
}
-
+
public void check() throws XException {
Map allUuris;
Iterator iter;
@@ -86,8 +87,43 @@
// TODO: what if the binding name is already used
logAndApplyPatch(new AddReference(ref, desc,
binding.getName(), !parent));
} else if (!backSegment.equals(binding.getName())) {
- throw new XAssertionFailed("TODO: segment name mismatch");
+ logAndApplyPatch(new FixNameMismatch(desc,
binding.getName(), ref, backSegment, parent));
+ }
+ }
+ }
+
+ public static class FixNameMismatch extends Patch {
+ XDescriptors desc;
+ String segment;
+ XDescriptors refDesc;
+ String backSegment;
+ boolean parent;
+
+ public FixNameMismatch(XDescriptors desc, String segment,
XDescriptors refDesc, String backSegment, boolean parent) {
+ this.desc = desc;
+ this.segment = segment;
+ this.refDesc = refDesc;
+ this.backSegment = backSegment;
+ this.parent = parent;
+ }
+
+ public void log(XRepairLogWriter logWriter) {
+ logWriter.println(TC_CHECK_DETAILS,
MSG_FOUND_BINDING_NAME_MISSMATCH, new Object[]{desc.getUuri(), segment,
refDesc.getUuri(), backSegment});
+ }
+
+ public void apply(XTaminoClient taminoClient) throws XException {
+ XDescriptorsUtil.removeReference(desc, refDesc.getUuri(),
parent);
+ XDescriptorsUtil.removeReference(refDesc, desc.getUuri(),
!parent);
+ if (parent) {
+ XDescriptorsUtil.addParentBinding(desc, refDesc, segment);
+ XDescriptorsUtil.addChildBinding(refDesc, desc, segment);
+ }
+ else {
+ XDescriptorsUtil.addChildBinding(desc, refDesc, segment);
+ XDescriptorsUtil.addParentBinding(refDesc, desc, segment);
}
+ taminoClient.getDescriptorsAccessor().update(desc);
+ taminoClient.getDescriptorsAccessor().update(refDesc);
}
}
1.1.4.1 +19 -15
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/Repair.java
Index: Repair.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/Repair.java,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- Repair.java 25 Mar 2004 16:18:05 -0000 1.1
+++ Repair.java 13 Dec 2004 15:34:02 -0000 1.1.4.1
@@ -98,7 +98,7 @@
* @version $Revision$
*/
public class Repair extends Tws {
- private static final String CMD_FULL = "full";
+ private static final String CMD_REPAIR = "full";
private static final String CMD_MIGRATE = "migrate";
private static final String CMD_ENABLE = "enable";
@@ -116,14 +116,15 @@
private static final String ARG_URM_DOMAIN = "urmdomain";
public Repair() {
- super(new String[] { CMD_FULL, CMD_MIGRATE, CMD_ENABLE}, "repair",
+ super(new String[] { CMD_REPAIR, CMD_MIGRATE, CMD_ENABLE}, "repair",
"Checks the consistency of the WebDAV meta information " +
"and corrects detected inconsistencies.",
new String[] {
"Checks the consistency of the WebDAV meta information " +
"and corrects detected inconsistencies; WebDAV enable
existing Tamino documents." },
"Commands:\n"+
- " full Repair everything (implies enable and
migrate)\n"+
+ " full Repair everything (includes enabling of
existing Tamino\n"+
+ " documents)\n"+
" enable Only missing meta information (WebDAV
enabling of\n"+
" documents which already exist in
Tamino) will be\n"+
" checked/repaired.\n"+
@@ -150,13 +151,16 @@
" -allStores All configured stores will be
checked/repaired.\n"+
" -checkOnly Checks only and reports errors, no
repairing is\n"+
" performed.\n" +
- " -urmadministrator <name> Name of the urm administrator
to migrate permissions. Default: none\n" +
- " -urmpassword <password> Password of the
administrator. Default: none\n" +
- " -urmdomain <domain> Domain of the administrator.
Default: none\n" +
- " -naming <class> Allows to customize document names
that will be created.\n" +
- " Default is " +
RepairHandler.DEFAULT_NAMING_CLASS + ".\n" +
- " which is fine for most situations.
Please refere to the documentation\n" +
- " for more details. "
+ "Further Options:\n"+
+ " -urmadministrator <name> Name of the URM administrator
to migrate \n"+
+ " permissions. Default: none\n"
+
+ " -urmpassword <password> Password of the URM
administrator. Default: none\n" +
+ " -urmdomain <domain> Domain of the URM
administrator. Default: none\n" +
+ " -naming <class> Allows to customize document
names that will be\n" +
+ " created by the enabler.\n"+
+ " Default is " +
RepairHandler.DEFAULT_NAMING_CLASS + ".\n" +
+ " which is fine for most
situations. Please refer\n" +
+ " to the documentation for more
details. "
// -naming is also available, but it's not documented here
);
}
@@ -219,7 +223,7 @@
repairer.enable(store, checkOnly);
}
};
- } else if (CMD_FULL.equals(cmd)) {
+ } else if (CMD_REPAIR.equals(cmd)) {
return new Command("repair", out) {
public void run() throws Abort {
repairer.repair(store, OnOpenTaToken.DEFAULT, checkOnly);
1.1.4.2 +5 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/RepairConstants.java
Index: RepairConstants.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/RepairConstants.java,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -r1.1.4.1 -r1.1.4.2
--- RepairConstants.java 3 Dec 2004 17:32:54 -0000 1.1.4.1
+++ RepairConstants.java 13 Dec 2004 15:34:02 -0000 1.1.4.2
@@ -52,6 +52,7 @@
String MSG_FOUND_METADATA_WITHOUT_CONTENT = "Found metadata document at
URI {0} - missing content documentat content ID: {1}";
String MSG_FOUND_INVALID_METADATA = "Found invalid metadata document at
UURI {0}.";
String MSG_FOUND_UNREACHABLE_NODE = "Found namespace inconsistency at
URI {0} - node is unreachable";
+ String MSG_FOUND_BINDING_NAME_MISSMATCH = "Found binding name missmatch
at URI {0}, segment {1}, referenced URI {2}, back-segment {3}";
String MSG_FOUND_INVALID_CONTENTSCHEMA = "Found invalid content data
schema {0}";
String MSG_INCONS_FOUND = "bad metadata document(s) found";
String MSG_INCONS_REPAIRED = "metadata document(s) repaired";
1.1.4.4 +15 -14
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/RepairHandler.java
Index: RepairHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/RepairHandler.java,v
retrieving revision 1.1.4.3
retrieving revision 1.1.4.4
diff -u -r1.1.4.3 -r1.1.4.4
--- RepairHandler.java 7 Dec 2004 10:04:33 -0000 1.1.4.3
+++ RepairHandler.java 13 Dec 2004 15:34:02 -0000 1.1.4.4
@@ -121,7 +121,7 @@
private static Logger logger = LoggerFactory.getLogger(LOGNAME);
/** Checks */
- private static final int CHECK = 1;
+ private static final int REPAIR = 1;
private static final int ENABLE = 2;
private static final int MIGRATE = 3;
@@ -229,7 +229,7 @@
//-- main methods
public void repair(String store, OnOpenTaToken onOpenTaToken, boolean
checkOnly ) {
- repair( CHECK, store, onOpenTaToken, checkOnly);
+ repair( REPAIR, store, onOpenTaToken, checkOnly);
}
public void migrate(String store, boolean checkOnly) {
@@ -291,6 +291,7 @@
logWriter.println(TC_TOTAL_RESULT, MSG_SUCCESS);
logWriter.closeLogFile();
+ logWriter.initialize();
}
} catch ( XException e ) {
e.printStackTrace();
@@ -311,6 +312,8 @@
if( logWriter.isLogFileOpen() )
logWriter.closeLogFile();
+
+ logWriter.initialize();
} // end-finally
if( logger.isLoggable(Level.FINE) )
@@ -504,19 +507,17 @@
checks.add(new MetadataVersionCheck(ns, taminoClient,
urmAccessor));
checks.add(new ContentSchemaCheck(taminoClient));
break;
- case CHECK:
+ case REPAIR:
// CAUTION: ordering is important here - earlier checks
check preconditions for later checks
- checks.add(new MetadataVersionCheck(ns, taminoClient,
urmAccessor));
- checks.add(new ContentSchemaCheck(taminoClient));
-
- checks.add(new MissingMetadataCheck(taminoClient, rootUri,
rootUuri, createNaming()));
+// checks.add(new MetadataVersionCheck(ns, taminoClient,
urmAccessor));
+// checks.add(new ContentSchemaCheck(taminoClient));
- checks.add(new ValidDescriptorsCheck(taminoClient));
-// checks.add(new UniqueContentIdCheck(group, taminoClient));
checks.add(new UniqueDescriptorsIdCheck(taminoClient));
+ checks.add(new ValidDescriptorsCheck(taminoClient));
checks.add(new ContentCheck(storeGroup, taminoClient,
taminoClient4History));
checks.add(new UniqueContentIdCheck(storeGroup,
taminoClient));
-// checks.add(new NamespaceConsistencyCheck(taminoClient));
+ checks.add(new MissingMetadataCheck(taminoClient, rootUri,
rootUuri, createNaming()));
+ checks.add(new NamespaceConsistencyCheck(taminoClient));
// checks.add(new GarbageCheck(main, taminoClient));
break;
default:
1.1.4.3 +13 -5
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/UniqueContentIdCheck.java
Index: UniqueContentIdCheck.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/UniqueContentIdCheck.java,v
retrieving revision 1.1.4.2
retrieving revision 1.1.4.3
diff -u -r1.1.4.2 -r1.1.4.3
--- UniqueContentIdCheck.java 6 Dec 2004 11:23:26 -0000 1.1.4.2
+++ UniqueContentIdCheck.java 13 Dec 2004 15:34:02 -0000 1.1.4.3
@@ -72,6 +72,7 @@
String contentId;
List users;
+ List patchesToApply = new ArrayList();
allContentIds =
taminoClient.getDescriptorsAccessor().queryAllContentIds( taminoCollection );
// inoId -> contentId
usageMap = new HashMap(); // contentId -> list(inoId's)
iter = allContentIds.entrySet().iterator();
@@ -88,9 +89,16 @@
users.add(descId);
if (users.size() > 1) {
// try to read the content
- logAndApplyPatch(new CopyContent(group.getMainStore(),
descId, contentId));
+ // logAndApplyPatch(new
CopyContent(group.getMainStore(), descId, contentId));
+ patchesToApply.add(new CopyContent(group.getMainStore(),
descId, contentId));
}
}
+ }
+ // apply patches
+ Iterator pit = patchesToApply.iterator();
+ while (pit.hasNext()) {
+ Patch p = (Patch)pit.next();
+ logAndApplyPatch(p);
}
}
1.1.4.1 +13 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XHttpClient.java
Index: XHttpClient.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XHttpClient.java,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- XHttpClient.java 25 Mar 2004 16:18:05 -0000 1.1
+++ XHttpClient.java 13 Dec 2004 15:34:02 -0000 1.1.4.1
@@ -34,11 +34,13 @@
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.slide.util.XException;
import org.apache.slide.util.XUri;
import org.apache.webdav.lib.BaseProperty;
import org.apache.webdav.lib.WebdavState;
import org.apache.webdav.lib.methods.MkcolMethod;
import org.apache.webdav.lib.methods.PropFindMethod;
+import org.apache.webdav.lib.methods.VersionControlMethod;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -74,6 +76,13 @@
this.pathPrefix = pathPrefix;
}
+ public void versionControl(String path) throws IOException, XException {
+ HttpMethod vc = new VersionControlMethod(pathPrefix+path);
+ int sc = executeMethod(vc);
+ if (sc != 200) {
+ throw new XException("Version control for path="+path+" failed");
+ }
+ }
/**
* Create a new document via the HttpClient. Uses PUT and MKCOL methods.
1.1.4.1 +8 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XRepairLogWriter.java
Index: XRepairLogWriter.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XRepairLogWriter.java,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- XRepairLogWriter.java 25 Mar 2004 16:18:05 -0000 1.1
+++ XRepairLogWriter.java 13 Dec 2004 15:34:02 -0000 1.1.4.1
@@ -132,6 +132,10 @@
this.pwd = pwd;
this.console = console;
this.serverIsRunning = serverIsRunning;
+ initialize();
+ }
+
+ protected void initialize() {
this.logDocument = new Document( new Element( TAG_ROOT ) );
this.rootElm = logDocument.getRootElement();
this.checklistElm = new Element(TAG_CHECKLIST);
1.1.4.2 +4 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XTaminoClient.java
Index: XTaminoClient.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/tools/repairer/XTaminoClient.java,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -r1.1.4.1 -r1.1.4.2
--- XTaminoClient.java 3 Dec 2004 17:32:54 -0000 1.1.4.1
+++ XTaminoClient.java 13 Dec 2004 15:34:02 -0000 1.1.4.2
@@ -344,7 +344,7 @@
String docType = null;
// XContentWrapper contentWrapper =
content.getContentWrapper();
XContentId xcid = new XContentId(content.getContentId());
- XContentWrapper contentWrapper = new
XContentWrapper(content.getContent(), xcid.getSchema());
+ XContentWrapper contentWrapper = new
XContentWrapper(content.getContent(), xcid.getSchema(), content.getIsXml());
if (contentWrapper.isEmptyContent()) {
content.setContentId (new XContentId ().toString());
No revision
No revision
1.1.4.1 +6 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/common/XContent.java
Index: XContent.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/common/XContent.java,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- XContent.java 25 Mar 2004 16:17:59 -0000 1.1
+++ XContent.java 13 Dec 2004 15:34:02 -0000 1.1.4.1
@@ -30,6 +30,7 @@
import java.io.InputStream;
import org.apache.slide.content.NodeRevisionContent;
import org.apache.slide.content.NodeRevisionDescriptor;
+import org.apache.slide.store.tamino.datastore.XContentId;
import org.apache.slide.store.tamino.datastore.XContentWrapper;
import org.apache.slide.util.ClassName;
import org.apache.slide.util.XException;
@@ -271,6 +272,7 @@
logger.entering (CLASSNAME, "setContentId", new Object[] {id});
contentId = id;
+ isXml = new XContentId(id).isXml();
if (logger.isLoggable(Level.FINE))
logger.exiting (CLASSNAME, "setContentId");
No revision
No revision
1.1.4.1 +5 -4
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XContentAccessor.java
Index: XContentAccessor.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XContentAccessor.java,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -r1.1 -r1.1.4.1
--- XContentAccessor.java 25 Mar 2004 16:18:00 -0000 1.1
+++ XContentAccessor.java 13 Dec 2004 15:34:02 -0000 1.1.4.1
@@ -147,6 +147,7 @@
result = new XContent (is);
result.setContentId( id );
+ result.setIsXml(contentId.isXml());
try {
long l = new Long(
is.getHeader().getValue(XGlobals.CONTENT_LENGTH) ).longValue();
result.setLength( l );
1.1.4.2 +9 -5
jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XContentWrapper.java
Index: XContentWrapper.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/tamino/src/store/org/apache/slide/store/tamino/datastore/XContentWrapper.java,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -r1.1.4.1 -r1.1.4.2
--- XContentWrapper.java 3 Dec 2004 17:32:55 -0000 1.1.4.1
+++ XContentWrapper.java 13 Dec 2004 15:34:02 -0000 1.1.4.2
@@ -91,9 +91,13 @@
}
}
- public XContentWrapper (NodeRevisionContent nrc, String docType) throws
XException {
+ /**
+ * For REPAIR TOOL only !!!
+ */
+ public XContentWrapper (NodeRevisionContent nrc, String docType,boolean
isXml) throws XException {
this(nrc);
this.docType = docType;
+ this.isXml = isXml;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]