Author: kwright
Date: Fri Jul 25 12:55:00 2014
New Revision: 1613423
URL: http://svn.apache.org/r1613423
Log:
Put in sanity checks for connector document disposition.
Modified:
manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
manifoldcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/WorkerThread.java
Modified:
manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java?rev=1613423&r1=1613422&r2=1613423&view=diff
==============================================================================
---
manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
(original)
+++
manifoldcf/trunk/framework/agents/src/main/java/org/apache/manifoldcf/agents/incrementalingest/IncrementalIngester.java
Fri Jul 25 12:55:00 2014
@@ -3767,6 +3767,8 @@ public class IncrementalIngester extends
public int sendDocument(String documentURI, RepositoryDocument document)
throws ManifoldCFException, ServiceInterruption, IOException
{
+ if (documentProcessed)
+ throw new IllegalStateException("Document cannot have multiple
dispositions");
int rval = activities.sendDocument(documentURI,document);
documentProcessed = true;
return rval;
@@ -3779,6 +3781,8 @@ public class IncrementalIngester extends
public void noDocument()
throws ManifoldCFException, ServiceInterruption
{
+ if (documentProcessed)
+ throw new IllegalStateException("Document cannot have multiple
dispositions");
activities.noDocument();
documentProcessed = true;
}
Modified:
manifoldcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/WorkerThread.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/WorkerThread.java?rev=1613423&r1=1613422&r2=1613423&view=diff
==============================================================================
---
manifoldcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/WorkerThread.java
(original)
+++
manifoldcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/WorkerThread.java
Fri Jul 25 12:55:00 2014
@@ -1159,6 +1159,8 @@ public class WorkerThread extends Thread
// Whether a component was touched or not, keyed by document identifier.
// This does not include primary document. The set is keyed by component
id hash.
protected final Map<String,Set<String>> touchedComponentSet = new
HashMap<String,Set<String>>();
+ // This represents primary documents.
+ protected final Set<String> touchedPrimarySet = new HashSet<String>();
/** Constructor.
*@param jobManager is the job manager
@@ -1501,6 +1503,7 @@ public class WorkerThread extends Thread
{
String documentIdentifierHash = ManifoldCF.hash(documentIdentifier);
String componentIdentifierHash =
computeComponentIDHash(componentIdentifier);
+
checkMultipleDispositions(documentIdentifier,componentIdentifier,componentIdentifierHash);
ingester.documentRecord(
pipelineSpecification.getBasicPipelineSpecification(),
connectionName,documentIdentifierHash,componentIdentifierHash,
@@ -1573,6 +1576,7 @@ public class WorkerThread extends Thread
String documentIdentifierHash = ManifoldCF.hash(documentIdentifier);
String componentIdentifierHash =
computeComponentIDHash(componentIdentifier);
+
checkMultipleDispositions(documentIdentifier,componentIdentifier,componentIdentifierHash);
if (data != null)
{
@@ -1634,6 +1638,7 @@ public class WorkerThread extends Thread
// (by ignoring it and allowing it to be deleted later)
String documentIdentifierHash = ManifoldCF.hash(documentIdentifier);
String componentIdentifierHash =
computeComponentIDHash(componentIdentifier);
+
checkMultipleDispositions(documentIdentifier,componentIdentifier,componentIdentifierHash);
ingester.documentNoData(
computePipelineSpecification(documentIdentifierHash,componentIdentifierHash),
@@ -1657,6 +1662,8 @@ public class WorkerThread extends Thread
public void removeDocument(String documentIdentifier)
throws ManifoldCFException, ServiceInterruption
{
+ checkMultipleDispositions(documentIdentifier,null,null);
+
String documentIdentifierHash = ManifoldCF.hash(documentIdentifier);
ingester.documentRemove(
pipelineSpecification.getBasicPipelineSpecification(),
@@ -1665,6 +1672,7 @@ public class WorkerThread extends Thread
// Note that we touched it, so it won't get checked
touchedSet.add(documentIdentifier);
+ touchComponentSet(documentIdentifier,null);
}
/** Retain existing document component. Use this method to signal that an
already-existing
@@ -1678,10 +1686,11 @@ public class WorkerThread extends Thread
String componentIdentifier)
throws ManifoldCFException
{
-
touchComponentSet(documentIdentifier,computeComponentIDHash(componentIdentifier));
+ String componentIdentifierHash =
computeComponentIDHash(componentIdentifier);
+
checkMultipleDispositions(documentIdentifier,componentIdentifier,componentIdentifierHash);
+ touchComponentSet(documentIdentifier,componentIdentifierHash);
}
-
/** Delete the current document from the search engine index, while
keeping track of the version information
* for it (to reduce churn).
* Use noDocument() above instead.
@@ -2096,10 +2105,33 @@ public class WorkerThread extends Thread
return ManifoldCF.createJobSpecificString(jobID,simpleString);
}
+ protected void checkMultipleDispositions(String documentIdentifier, String
componentIdentifier, String componentIdentifierHash)
+ {
+ if (abortSet.contains(documentIdentifier))
+ throw new IllegalStateException("Multiple document dispositions not
allowed: Abort cannot be combiend with component disposition; document
'"+documentIdentifier+"'");
+ if (documentDeletedSet.contains(documentIdentifier))
+ throw new IllegalStateException("Multiple document dispositions not
allowed: Document delete cannot be combined with component disposition;
document '"+documentIdentifier+"'");
+ if (componentIdentifierHash == null)
+ {
+ // Primary
+ if (touchedPrimarySet.contains(documentIdentifier))
+ throw new IllegalStateException("Multiple document primary component
dispositions not allowed: document '"+documentIdentifier+"'");
+ }
+ else
+ {
+ Set<String> components = touchedComponentSet.get(documentIdentifier);
+ if (components.contains(componentIdentifierHash))
+ throw new IllegalStateException("Multiple document component
dispositions not allowed: document '"+documentIdentifier+"', component
'"+componentIdentifier+"'");
+ }
+ }
+
protected void touchComponentSet(String documentIdentifier, String
componentIdentifierHash)
{
if (componentIdentifierHash == null)
+ {
+ touchedPrimarySet.add(documentIdentifier);
return;
+ }
Set<String> components = touchedComponentSet.get(documentIdentifier);
if (components == null)
{