You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2011/10/28 17:27:46 UTC

svn commit: r1190399 - in /incubator/lcf/trunk: ./ framework/core/src/main/java/org/apache/manifoldcf/core/database/ framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler...

Author: kwright
Date: Fri Oct 28 15:27:46 2011
New Revision: 1190399

URL: http://svn.apache.org/viewvc?rev=1190399&view=rev
Log:
General changes to improve index usage and matching between indexes and queries.

Modified:
    incubator/lcf/trunk/   (props changed)
    incubator/lcf/trunk/build.xml
    incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Carrydown.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/DocumentDeleteStufferThread.java
    incubator/lcf/trunk/lib/hsqldb.jar
    incubator/lcf/trunk/mvn-bootstrap.bat
    incubator/lcf/trunk/mvn-bootstrap.sh
    incubator/lcf/trunk/pom.xml

Propchange: incubator/lcf/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Oct 28 15:27:46 2011
@@ -9,5 +9,5 @@
 /incubator/lcf/branches/CONNECTORS-240:1163953-1166425
 /incubator/lcf/branches/CONNECTORS-256:1172846-1182809
 /incubator/lcf/branches/CONNECTORS-277:1185949-1187036
-/incubator/lcf/branches/CONNECTORS-284:1190271
+/incubator/lcf/branches/CONNECTORS-284:1189305-1190398
 /incubator/lcf/branches/CONNECTORS-32:1092556-1094216

Modified: incubator/lcf/trunk/build.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/build.xml?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/build.xml (original)
+++ incubator/lcf/trunk/build.xml Fri Oct 28 15:27:46 2011
@@ -2861,7 +2861,7 @@
 
     <target name="run-filesystem-loadtests-HSQLDB" depends="compile-filesystem-loadtests,calculate-filesystem-tests-condition" if="filesystem-tests.include">
         <mkdir dir="test-HSQLDB-output/filesystem"/>
-        <junit fork="true" maxmemory="256m" dir="test-HSQLDB-output/filesystem" outputtoformatters="true" showoutput="true" haltonfailure="true">
+        <junit fork="true" maxmemory="384m" dir="test-HSQLDB-output/filesystem" outputtoformatters="true" showoutput="true" haltonfailure="true">
             <classpath>
                 <fileset dir="framework/lib">
                     <include name="*.jar"/>

Modified: incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java (original)
+++ incubator/lcf/trunk/framework/core/src/main/java/org/apache/manifoldcf/core/database/DBInterfaceHSQLDB.java Fri Oct 28 15:27:46 2011
@@ -1184,7 +1184,24 @@ public class DBInterfaceHSQLDB extends D
     else
       throw new ManifoldCFException("Transaction nesting error!");
   }
-  
+
+  /** Abstract method for explaining a query */
+  protected void explainQuery(String query, List params)
+    throws ManifoldCFException
+  {
+    IResultSet x = executeUncachedQuery("EXPLAIN PLAN FOR "+query,null,true,
+      -1,null,null);
+    int k = 0;
+    while (k < x.getRowCount())
+    {
+      IResultRow row = x.getRow(k++);
+      Iterator<String> iter = row.getColumns();
+      String colName = (String)iter.next();
+      Logging.db.warn(" Plan: "+row.getValue(colName).toString());
+    }
+    Logging.db.warn("");
+  }
+
   /** Abstract method for mapping a column name from resultset */
   protected String mapColumnName(String rawColumnName)
   {

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Carrydown.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Carrydown.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Carrydown.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Carrydown.java Fri Oct 28 15:27:46 2011
@@ -118,9 +118,8 @@ public class Carrydown extends org.apach
       // Now do index management
 
       IndexDescription uniqueIndex = new IndexDescription(true,new String[]{jobIDField,parentIDHashField,childIDHashField,dataNameField,dataValueHashField});
-      IndexDescription jobParentIndex = new IndexDescription(false,new String[]{jobIDField,parentIDHashField});
       IndexDescription jobChildDataIndex = new IndexDescription(false,new String[]{jobIDField,childIDHashField,dataNameField});
-      IndexDescription jobChildNewIndex = new IndexDescription(false,new String[]{jobIDField,childIDHashField,newField});
+      IndexDescription newIndex = new IndexDescription(false,new String[]{newField});
 
       Map indexes = getTableIndexes(null,null);
       Iterator iter = indexes.keySet().iterator();
@@ -131,12 +130,10 @@ public class Carrydown extends org.apach
 
         if (uniqueIndex != null && id.equals(uniqueIndex))
           uniqueIndex = null;
-        else if (jobParentIndex != null && id.equals(jobParentIndex))
-          jobParentIndex = null;
         else if (jobChildDataIndex != null && id.equals(jobChildDataIndex))
           jobChildDataIndex = null;
-        else if (jobChildNewIndex != null && id.equals(jobChildNewIndex))
-          jobChildNewIndex = null;
+        else if (newIndex != null && id.equals(newIndex))
+          newIndex = null;
         else if (indexName.indexOf("_pkey") == -1)
           // This index shouldn't be here; drop it
           performRemoveIndex(indexName);
@@ -144,14 +141,11 @@ public class Carrydown extends org.apach
 
       // Create the indexes we are missing
 
-      if (jobParentIndex != null)
-        performAddIndex(null,jobParentIndex);
-
       if (jobChildDataIndex != null)
         performAddIndex(null,jobChildDataIndex);
 
-      if (jobChildNewIndex != null)
-        performAddIndex(null,jobChildNewIndex);
+      if (newIndex != null)
+        performAddIndex(null,newIndex);
 
       // This index is the constraint.  Only one row per job,dataname,datavalue,parent,and child.
       if (uniqueIndex != null)
@@ -294,13 +288,14 @@ public class Carrydown extends org.apach
             if (i > 0)
               sb.append(" OR");
             sb.append("(").append(jobIDField).append("=? AND ")
-              .append(dataNameField).append("=? AND ")
-              .append(parentIDHashField).append("=? AND ").append(childIDHashField).append("=? AND ");
+              .append(parentIDHashField).append("=? AND ")
+              .append(childIDHashField).append("=? AND ")
+              .append(dataNameField).append("=? AND ");
 
             list.add(jobID);
-            list.add(documentDataName);
             list.add(parentDocumentIDHash);
             list.add(childDocumentIDHash);
+            list.add(documentDataName);
 
             if (documentDataValueHash == null)
             {
@@ -361,14 +356,15 @@ public class Carrydown extends org.apach
       {
         sb = new StringBuilder();
         sb.append("WHERE ").append(jobIDField).append("=? AND ")
-          .append(dataNameField).append("=? AND ")
-          .append(parentIDHashField).append("=? AND ").append(childIDHashField).append("=? AND ");
+          .append(parentIDHashField).append("=? AND ")
+          .append(childIDHashField).append("=? AND ")
+          .append(dataNameField).append("=? AND ");
 
         ArrayList updateList = new ArrayList();
         updateList.add(jobID);
-        updateList.add(dataName);
         updateList.add(parentDocumentIDHash);
         updateList.add(childDocumentIDHash);
+        updateList.add(dataName);
         if (dataValueHash != null)
         {
           sb.append(dataValueHashField).append("=?");
@@ -425,7 +421,7 @@ public class Carrydown extends org.apach
     beginTransaction();
     try
     {
-      int maxClause = getMaxOrClause();
+      int maxClause = getMaxInClause();
       StringBuilder sb = new StringBuilder();
       ArrayList list = new ArrayList();
       int i = 0;
@@ -434,23 +430,21 @@ public class Carrydown extends org.apach
       {
         if (k == maxClause)
         {
-          performRestoreRecords(sb.toString(),list);
+          performRestoreRecords(sb.toString(),jobID,list);
           sb.setLength(0);
           list.clear();
           k = 0;
         }
         if (k > 0)
-          sb.append(" OR");
-        sb.append("(").append(jobIDField).append("=? AND ")
-          .append(parentIDHashField).append("=?)");
+          sb.append(",");
+        sb.append("?");
         String parentDocumentIDHash = parentDocumentIDHashes[i++];
-        list.add(jobID);
         list.add(parentDocumentIDHash);
         k++;
       }
 
       if (k > 0)
-        performRestoreRecords(sb.toString(),list);
+        performRestoreRecords(sb.toString(),jobID,list);
     }
     catch (ManifoldCFException e)
     {
@@ -468,24 +462,38 @@ public class Carrydown extends org.apach
     }
   }
 
-  protected void performRestoreRecords(String query, ArrayList list)
+  protected void performRestoreRecords(String query, Long jobID, ArrayList list)
     throws ManifoldCFException
   {
     // Delete
-    StringBuilder sb = new StringBuilder("WHERE (");
-    sb.append(query).append(") AND (").append(newField).append("=?)");
-    ArrayList newList = (ArrayList)list.clone();
+    StringBuilder sb = new StringBuilder("WHERE ");
+    ArrayList newList = new ArrayList();
+    
+    sb.append(jobIDField).append("=? AND ").append(parentIDHashField).append(" IN (")
+      .append(query).append(") AND ");
+    newList.add(jobID);
+    newList.addAll(list);
+    sb.append(newField).append("=?");
     newList.add(statusToString(ISNEW_BASE));
     performDelete(sb.toString(),newList,null);
 
     // Restore new values
-    sb = new StringBuilder("WHERE (");
-    sb.append(query).append(") AND (").append(newField).append("=? OR ").append(newField).append("=?)");
-    list.add(statusToString(ISNEW_EXISTING));
-    list.add(statusToString(ISNEW_NEW));
+    sb = new StringBuilder("WHERE ");
+    newList.clear();
+
+    sb.append(jobIDField).append("=? AND ").append(parentIDHashField).append(" IN (")
+      .append(query).append(") AND ");
+    newList.add(jobID);
+    newList.addAll(list);
+
+    sb.append(newField).append(" IN (?,?)");
+    newList.add(statusToString(ISNEW_EXISTING));
+    newList.add(statusToString(ISNEW_NEW));
+    
     HashMap map = new HashMap();
     map.put(newField,statusToString(ISNEW_BASE));
-    performUpdate(map,sb.toString(),list,null);
+    performUpdate(map,sb.toString(),newList,null);
+    
     noteModifications(0,list.size(),0);
   }
 
@@ -497,45 +505,34 @@ public class Carrydown extends org.apach
     beginTransaction();
     try
     {
-      int maxClause = getMaxOrClause();
+      int maxClause = getMaxInClause();
       StringBuilder sb = new StringBuilder();
-      StringBuilder sb2 = new StringBuilder();
       ArrayList list = new ArrayList();
-      ArrayList list2 = new ArrayList();
       int i = 0;
       int k = 0;
       while (i < documentIDHashes.length)
       {
         if (k == maxClause)
         {
-          performDeleteRecords(sb.toString(),sb2.toString(),list,list2);
+          performDeleteRecords(sb.toString(),jobID,list);
           sb.setLength(0);
-          sb2.setLength(0);
           list.clear();
-          list2.clear();
           k = 0;
         }
         if (k > 0)
         {
-          sb.append(" OR");
-          sb2.append(" OR");
+          sb.append(",");
         }
 
-        sb.append("(").append(jobIDField).append("=? AND ")
-          .append(childIDHashField).append("=?)");
-        sb2.append("(").append(jobIDField).append("=? AND ")
-          .append(parentIDHashField).append("=?)");
+        sb.append("?");
 
         String documentIDHash = documentIDHashes[i++];
-        list.add(jobID);
         list.add(documentIDHash);
-        list2.add(jobID);
-        list2.add(documentIDHash);
         k++;
       }
 
       if (k > 0)
-        performDeleteRecords(sb.toString(),sb2.toString(),list,list2);
+        performDeleteRecords(sb.toString(),jobID,list);
 
 
     }
@@ -556,12 +553,28 @@ public class Carrydown extends org.apach
 
   }
 
-  protected void performDeleteRecords(String query, String query2, ArrayList list, ArrayList list2)
+  protected void performDeleteRecords(String query, Long jobID, ArrayList list)
     throws ManifoldCFException
   {
-    performDelete("WHERE "+query,list,null);
-    performDelete("WHERE "+query2,list2,null);
-    noteModifications(0,0,list.size()+list2.size());
+    StringBuilder sb = new StringBuilder("WHERE ");
+    ArrayList newList = new ArrayList();
+    
+    sb.append(jobIDField).append("=? AND ").append(childIDHashField).append(" IN (")
+      .append(query).append(")");
+    newList.add(jobID);
+    newList.addAll(list);
+    performDelete(sb.toString(),newList,null);
+    
+    sb = new StringBuilder("WHERE ");
+    newList.clear();
+    
+    sb.append(jobIDField).append("=? AND ").append(parentIDHashField).append(" IN (")
+      .append(query).append(")");
+    newList.add(jobID);
+    newList.addAll(list);
+    performDelete(sb.toString(),newList,null);
+
+    noteModifications(0,0,list.size()*2);
   }
 
   /** Get unique values given a document identifier, data name, an job identifier */
@@ -570,11 +583,11 @@ public class Carrydown extends org.apach
   {
     ArrayList list = new ArrayList();
     list.add(jobID);
-    list.add(dataName);
     list.add(documentIdentifierHash);
+    list.add(dataName);
 
     IResultSet set = getDBInterface().performQuery("SELECT "+dataValueHashField+","+dataValueField+" FROM "+getTableName()+" WHERE "+
-      jobIDField+"=? AND "+dataNameField+"=? AND "+childIDHashField+"=? ORDER BY 1 ASC",list,null,null,-1,null,new ResultDuplicateEliminator());
+      jobIDField+"=? AND "+childIDHashField+"=? AND "+dataNameField+"=? ORDER BY 1 ASC",list,null,null,-1,null,new ResultDuplicateEliminator());
 
     String[] rval = new String[set.getRowCount()];
     int i = 0;
@@ -595,13 +608,13 @@ public class Carrydown extends org.apach
   {
     ArrayList list = new ArrayList();
     list.add(jobID);
-    list.add(dataName);
     list.add(documentIdentifierHash);
+    list.add(dataName);
 
     ResultSpecification rs = new ResultSpecification();
     rs.setForm(dataValueField,ResultSpecification.FORM_STREAM);
     IResultSet set = getDBInterface().performQuery("SELECT "+dataValueHashField+","+dataValueField+" FROM "+getTableName()+" WHERE "+
-      jobIDField+"=? AND "+dataNameField+"=? AND "+childIDHashField+"=? ORDER BY 1 ASC",list,null,null,-1,rs,new ResultDuplicateEliminator());
+      jobIDField+"=? AND "+childIDHashField+"=? AND "+dataNameField+"=? ORDER BY 1 ASC",list,null,null,-1,rs,new ResultDuplicateEliminator());
 
     CharacterInput[] rval = new CharacterInput[set.getRowCount()];
     int i = 0;

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/IntrinsicLink.java Fri Oct 28 15:27:46 2011
@@ -187,7 +187,7 @@ public class IntrinsicLink extends org.a
     map.put(newField,statusToString(LINKSTATUS_BASE));
     list.add(statusToString(LINKSTATUS_NEW));
     list.add(statusToString(LINKSTATUS_EXISTING));
-    performUpdate(map,"WHERE "+newField+"=? OR "+newField+"=?",list,null);
+    performUpdate(map,"WHERE "+newField+" IN (?,?)",list,null);
   }
 
   /** Record a references from source to targets.  These references will be marked as either "new" or "existing".
@@ -463,7 +463,7 @@ public class IntrinsicLink extends org.a
     throws ManifoldCFException
   {
     StringBuilder sb = new StringBuilder("WHERE (");
-    sb.append(query).append(") AND (").append(newField).append("=? OR ").append(newField).append("=?)");
+    sb.append(query).append(") AND ").append(newField).append(" IN (?,?)");
     list.add(statusToString(LINKSTATUS_EXISTING));
     list.add(statusToString(LINKSTATUS_NEW));
     HashMap map = new HashMap();

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java Fri Oct 28 15:27:46 2011
@@ -865,9 +865,11 @@ public class JobManager implements IJobM
           " AND (t0."+jobQueue.checkTimeField+" IS NULL OR t0."+jobQueue.checkTimeField+"<=?) "+
           " AND EXISTS(SELECT 'x' FROM "+jobs.getTableName()+" t1 WHERE t0."+jobQueue.jobIDField+"=t1."+jobs.idField+
           " AND t1."+jobs.statusField+"=?"+
-          ") AND NOT EXISTS(SELECT 'x' FROM "+jobQueue.getTableName()+" t2 WHERE t0."+jobQueue.docHashField+"=t2."+
-          jobQueue.docHashField+" AND t0."+jobQueue.jobIDField+"!=t2."+jobQueue.jobIDField+
-          " AND t2."+jobQueue.statusField+" IN (?,?,?,?,?,?)) "+database.constructOffsetLimitClause(0,maxCount),
+          ") AND NOT EXISTS(SELECT 'x' FROM "+jobQueue.getTableName()+" t2 WHERE "+
+          "t2."+jobQueue.docHashField+"=t0."+jobQueue.docHashField+" AND "+
+          "t2."+jobQueue.statusField+" IN (?,?,?,?,?,?)"+" AND "+
+          "t2."+jobQueue.jobIDField+"!=t0."+jobQueue.jobIDField+
+          ") "+database.constructOffsetLimitClause(0,maxCount),
           list,null,null,maxCount,null);
 
         if (Logging.perf.isDebugEnabled())
@@ -1097,9 +1099,11 @@ public class JobManager implements IJobM
           " AND t0."+jobQueue.checkTimeField+"<=? "+
           " AND EXISTS(SELECT 'x' FROM "+jobs.getTableName()+" t1 WHERE t0."+jobQueue.jobIDField+"=t1."+jobs.idField+
           " AND t1."+jobs.statusField+"=?"+
-          ") AND NOT EXISTS(SELECT 'x' FROM "+jobQueue.getTableName()+" t2 WHERE t0."+jobQueue.docHashField+"=t2."+
-          jobQueue.docHashField+" AND t0."+jobQueue.jobIDField+"!=t2."+jobQueue.jobIDField+
-          " AND t2."+jobQueue.statusField+" IN (?,?,?,?,?,?)) "+database.constructOffsetLimitClause(0,maxCount),
+          ") AND NOT EXISTS(SELECT 'x' FROM "+jobQueue.getTableName()+" t2 WHERE "+
+          "t2."+jobQueue.docHashField+"=t0."+jobQueue.docHashField+" AND "+
+          "t2."+jobQueue.statusField+" IN (?,?,?,?,?,?)"+" AND "+
+          "t2."+jobQueue.jobIDField+"!=t0."+jobQueue.jobIDField+
+          ") "+database.constructOffsetLimitClause(0,maxCount),
           list,null,null,maxCount,null);
 
         if (Logging.perf.isDebugEnabled())
@@ -1465,10 +1469,9 @@ public class JobManager implements IJobM
       .append(" FROM ").append(jobQueue.getTableName()).append(" t0 WHERE EXISTS(SELECT 'x' FROM ").append(jobs.getTableName())
       .append(" t1 WHERE t0.").append(jobQueue.jobIDField).append("=t1.").append(jobs.idField).append(" AND t1.")
       .append(jobs.statusField).append(" IN(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)) AND ")
-      .append(jobQueue.prioritySetField).append("<? AND ").append(jobQueue.statusField).append(" IN(?,?) AND (")
-      .append(jobQueue.checkActionField).append(" IS NULL OR ")
-      .append(jobQueue.checkActionField).append("=?")
-      .append(") ").append(database.constructOffsetLimitClause(0,n));
+      .append(jobQueue.prioritySetField).append("<? AND ").append(jobQueue.statusField).append(" IN(?,?) AND ")
+      .append(jobQueue.checkActionField).append("=? ")
+      .append(database.constructOffsetLimitClause(0,n));
 
     // Analyze jobqueue tables unconditionally, since it's become much more sensitive in 8.3 than it used to be.
     jobQueue.unconditionallyAnalyzeTables();
@@ -1599,11 +1602,10 @@ public class JobManager implements IJobM
     // If FOR UPDATE was included, deadlock conditions would be common because of the complexity of this query.
 
     ArrayList list = new ArrayList();
-    list.add(new Long(currentTime));
-    list.add(jobQueue.actionToString(JobQueue.ACTION_REMOVE));
-
     list.add(jobQueue.statusToString(JobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(JobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(JobQueue.ACTION_REMOVE));
+    list.add(new Long(currentTime));
 
     list.add(jobs.statusToString(jobs.STATUS_ACTIVE));
     list.add(jobs.statusToString(jobs.STATUS_ACTIVESEEDING));
@@ -1623,16 +1625,17 @@ public class JobManager implements IJobM
     sb.append(jobQueue.statusField).append(",t0.");
     sb.append(jobQueue.failTimeField).append(",t0.");
     sb.append(jobQueue.failCountField).append(" FROM ").append(jobQueue.getTableName()).append(" t0,")
-      .append(jobs.getTableName()).append(" t1 WHERE t0.");
-    sb.append(jobQueue.checkTimeField).append("<=? AND t0.");
-    sb.append(jobQueue.checkActionField).append("=? AND ");
-    sb.append("t0.").append(jobQueue.statusField).append(" IN(?,?) AND t0.").append(jobQueue.jobIDField).append("=t1.").append(jobs.idField).append(" AND t1.")
+      .append(jobs.getTableName()).append(" t1 WHERE ")
+      .append("t0.").append(jobQueue.statusField).append(" IN(?,?) AND ")
+      .append("t0.").append(jobQueue.checkActionField).append("=? AND ")
+      .append("t0.").append(jobQueue.checkTimeField).append("<=? AND ")
+      .append("t0.").append(jobQueue.jobIDField).append("=t1.").append(jobs.idField).append(" AND t1.")
       .append(jobs.statusField).append(" IN (?,?) AND ");
-    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.getTableName()).append(" t2 WHERE t0.")
-      .append(jobQueue.docHashField).append("=t2.").append(jobQueue.docHashField).append(" AND t0.")
-      .append(jobQueue.jobIDField).append("!=t2.").append(jobQueue.jobIDField).append(" AND t2.")
-      .append(jobQueue.statusField).append(" IN (?,?,?,?,?,?))");
-    sb.append(" ").append(database.constructOffsetLimitClause(0,n));
+    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.getTableName()).append(" t2 WHERE ")
+      .append("t2.").append(jobQueue.docHashField).append("=t0.").append(jobQueue.docHashField).append(" AND ")
+      .append("t2.").append(jobQueue.statusField).append(" IN (?,?,?,?,?,?)").append(" AND ")
+      .append("t2.").append(jobQueue.jobIDField).append("!=t0.").append(jobQueue.jobIDField);
+    sb.append(") ").append(database.constructOffsetLimitClause(0,n));
 
     // Analyze jobqueue tables unconditionally, since it's become much more sensitive in 8.3 than it used to be.
     jobQueue.unconditionallyAnalyzeTables();
@@ -2061,23 +2064,21 @@ public class JobManager implements IJobM
     list.add(Jobs.statusToString(jobs.STATUS_ACTIVE));
     list.add(Jobs.statusToString(jobs.STATUS_ACTIVESEEDING));
     
-    list.add(currentTimeValue);
-    
-    list.add(jobQueue.actionToString(JobQueue.ACTION_RESCAN));
-    
     list.add(jobQueue.statusToString(JobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(JobQueue.STATUS_PENDINGPURGATORY));
     
+    list.add(jobQueue.actionToString(JobQueue.ACTION_RESCAN));
+    
+    list.add(currentTimeValue);
+        
     sb.append(jobQueue.docPriorityField).append(",").append(jobQueue.jobIDField).append(",")
       .append(jobQueue.docHashField).append(",").append(jobQueue.docIDField)
       .append(" FROM ").append(jobQueue.getTableName())
       .append(" t0 WHERE EXISTS(SELECT 'x' FROM ").append(jobs.getTableName()).append(" t1 WHERE t0.").append(jobQueue.jobIDField)
       .append("=t1.").append(jobs.idField).append(" AND t1.").append(jobs.statusField).append(" IN(?,?)) AND ")
-      .append(jobQueue.checkTimeField).append("<=? AND (")
-      .append(jobQueue.checkActionField).append(" IS NULL OR ")
-      .append(jobQueue.checkActionField).append("=?")
-      .append(") AND (")
-      .append(jobQueue.statusField).append("=? OR ").append(jobQueue.statusField).append("=?)")
+      .append(jobQueue.statusField).append(" IN(?,?) AND ")
+      .append(jobQueue.checkActionField).append("=? AND ")
+      .append(jobQueue.checkTimeField).append("<=?")
       .append(" ORDER BY ").append(jobQueue.docPriorityField).append(" ASC ").append(database.constructOffsetLimitClause(0,1));
 
 
@@ -2091,47 +2092,6 @@ public class JobManager implements IJobM
     return rval;
   }
 
-  protected void addDocumentCriteria(StringBuilder sb, ArrayList list, Long currentTimeValue, Long currentPriorityValue)
-    throws ManifoldCFException
-  {
-    
-    list.add(currentTimeValue);
-    
-    list.add(jobQueue.actionToString(JobQueue.ACTION_RESCAN));
-    
-    list.add(jobQueue.statusToString(JobQueue.STATUS_PENDING));
-    list.add(jobQueue.statusToString(JobQueue.STATUS_PENDINGPURGATORY));
-    
-    list.add(jobs.statusToString(jobs.STATUS_ACTIVE));
-    list.add(jobs.statusToString(jobs.STATUS_ACTIVESEEDING));
-    
-    list.add(currentPriorityValue);
-
-    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
-    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
-    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
-    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
-    list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGDELETED));
-    list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED));
-    
-    sb.append("t0.").append(jobQueue.checkTimeField).append("<=? AND ");
-    sb.append("(t0.").append(jobQueue.checkActionField).append(" IS NULL OR t0.").append(jobQueue.checkActionField)
-      .append("=?) AND ");
-    sb.append("(t0.").append(jobQueue.statusField).append("=? OR t0.").append(jobQueue.statusField).append("=?) AND t0.").append(jobQueue.jobIDField).append("=t1.").append(jobs.idField).append(" AND t1.")
-      .append(jobs.statusField).append(" IN (?,?) AND t1.")
-      .append(jobs.priorityField).append("=? AND ");
-    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.getTableName()).append(" t2 WHERE t0.")
-      .append(jobQueue.docHashField).append("=t2.").append(jobQueue.docHashField).append(" AND t0.")
-      .append(jobQueue.jobIDField).append("!=t2.").append(jobQueue.jobIDField).append(" AND t2.")
-      .append(jobQueue.statusField).append(" IN (?,?,?,?,?,?)) AND ");
-
-    // Prerequisite event clause: AND NOT EXISTS(SELECT 'x' FROM prereqevents t3,events t4 WHERE t3.ownerid=t0.id AND t3.name=t4.name)
-    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.prereqEventManager.getTableName()).append(" t3,").append(eventManager.getTableName()).append(" t4 WHERE t0.")
-      .append(jobQueue.idField).append("=t3.").append(jobQueue.prereqEventManager.ownerField).append(" AND t3.")
-      .append(jobQueue.prereqEventManager.eventNameField).append("=t4.").append(eventManager.eventNameField)
-      .append(")");
-  }
-
   /** Fetch and process documents matching the passed-in criteria */
   protected void fetchAndProcessDocuments(ArrayList answers, Long currentTimeValue, Long currentPriorityValue,
     ThrottleLimit vList, IRepositoryConnection[] connections)
@@ -2153,10 +2113,45 @@ public class JobManager implements IJobM
     sb.append(jobQueue.statusField).append(",t0.");
     sb.append(jobQueue.failTimeField).append(",t0.");
     sb.append(jobQueue.failCountField).append(",t0.");
-    sb.append(jobQueue.prioritySetField).append(" FROM ").append(jobQueue.getTableName()).append(" t0,")
-      .append(jobs.getTableName()).append(" t1 WHERE ");
+    sb.append(jobQueue.prioritySetField).append(" FROM ").append(jobQueue.getTableName())
+      .append(" t0 WHERE EXISTS(SELECT 'x' FROM ").append(jobs.getTableName()).append(" t1 WHERE t0.").append(jobQueue.jobIDField)
+      .append("=t1.").append(jobs.idField).append(" AND t1.").append(jobs.statusField).append(" IN(?,?) AND t1.")
+      .append(jobs.priorityField).append("=?) AND ");
+
+    list.add(jobs.statusToString(jobs.STATUS_ACTIVE));
+    list.add(jobs.statusToString(jobs.STATUS_ACTIVESEEDING));
+    
+    list.add(currentPriorityValue);
+
+    list.add(jobQueue.statusToString(JobQueue.STATUS_PENDING));
+    list.add(jobQueue.statusToString(JobQueue.STATUS_PENDINGPURGATORY));
+    
+    list.add(jobQueue.actionToString(JobQueue.ACTION_RESCAN));
 
-    addDocumentCriteria(sb,list,currentTimeValue,currentPriorityValue);
+    list.add(currentTimeValue);
+    
+    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
+    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
+    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
+    list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
+    list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGDELETED));
+    list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED));
+    
+    sb.append("t0.").append(jobQueue.statusField).append(" IN (?,?) AND ")
+      .append("t0.").append(jobQueue.checkActionField).append("=? AND ")
+      .append("t0.").append(jobQueue.checkTimeField).append("<=? AND ");
+      
+    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.getTableName()).append(" t2 WHERE ")
+      .append("t2.").append(jobQueue.docHashField).append("=t0.").append(jobQueue.docHashField).append(" AND ")
+      .append("t2.").append(jobQueue.statusField).append(" IN (?,?,?,?,?,?)").append(" AND ")
+      .append("t2.").append(jobQueue.jobIDField).append("!=t0.").append(jobQueue.jobIDField)
+      .append(") AND ");
+
+    // Prerequisite event clause: AND NOT EXISTS(SELECT 'x' FROM prereqevents t3,events t4 WHERE t3.ownerid=t0.id AND t3.name=t4.name)
+    sb.append("NOT EXISTS(SELECT 'x' FROM ").append(jobQueue.prereqEventManager.getTableName()).append(" t3,").append(eventManager.getTableName()).append(" t4 WHERE t0.")
+      .append(jobQueue.idField).append("=t3.").append(jobQueue.prereqEventManager.ownerField).append(" AND t3.")
+      .append(jobQueue.prereqEventManager.eventNameField).append("=t4.").append(eventManager.eventNameField)
+      .append(")");
 
     sb.append(" ORDER BY t0.").append(jobQueue.docPriorityField).append(" ASC ");
 
@@ -2584,12 +2579,17 @@ public class JobManager implements IJobM
   {
     // The query here mirrors the carrydown.restoreRecords() delete query!  However, it also fetches enough information to build a DocumentDescription
     // object for return, and so a join is necessary against the jobqueue table.
+    ArrayList newlist = new ArrayList();
+    newlist.add(jobID);
+    newlist.addAll(list);
     String query = "SELECT t0."+jobQueue.idField+",t0."+jobQueue.docHashField+",t0."+jobQueue.docIDField+" FROM "+
-      jobQueue.getTableName()+" t0 WHERE EXISTS(SELECT 'x' FROM "+carryDown.getTableName()+
-      " t1 WHERE t1."+carryDown.parentIDHashField+" IN ("+queryPart+") AND t1."+carryDown.childIDHashField+"=t0."+jobQueue.docHashField+
-      " AND t0."+jobQueue.jobIDField+"=t1."+carryDown.jobIDField+") AND t0."+jobQueue.jobIDField+"=?";
-    list.add(jobID);
-    IResultSet set = database.performQuery(query,list,null,null);
+      jobQueue.getTableName()+" t0 WHERE "+
+      "t0."+jobQueue.jobIDField+"=? AND "+
+      "EXISTS(SELECT 'x' FROM "+carryDown.getTableName()+" t1 WHERE "+
+      "t1."+carryDown.jobIDField+"=t0."+jobQueue.jobIDField+" AND "+
+      "t1."+carryDown.parentIDHashField+" IN ("+queryPart+") AND "+
+      "t1."+carryDown.childIDHashField+"=t0."+jobQueue.docHashField+")";
+    IResultSet set = database.performQuery(query,newlist,null,null);
     int i = 0;
     while (i < set.getRowCount())
     {
@@ -3161,12 +3161,12 @@ public class JobManager implements IJobM
           String[] docPrereqs = reorderedDocumentPrerequisites[z];
 
           ArrayList list = new ArrayList();
-          list.add(jobID);
           list.add(docIDHash);
+          list.add(jobID);
 
           IResultSet set = database.performQuery("SELECT "+jobQueue.idField+","+jobQueue.statusField+","+
             jobQueue.checkTimeField+" FROM "+jobQueue.getTableName()+
-            " WHERE "+jobQueue.jobIDField+"=? AND "+jobQueue.docHashField+"=? FOR UPDATE",list,null,null);
+            " WHERE "+jobQueue.docHashField+"=? AND "+jobQueue.jobIDField+"=? FOR UPDATE",list,null,null);
 
           boolean priorityUsed;
           long executeTime = overrideSchedule?0L:-1L;
@@ -3749,12 +3749,12 @@ public class JobManager implements IJobM
           String docIDHash = reorderedDocIDHashes[z];
 
           ArrayList list = new ArrayList();
-          list.add(jobID);
           list.add(docIDHash);
+          list.add(jobID);
 
           IResultSet set = database.performQuery("SELECT "+jobQueue.idField+","+jobQueue.statusField+","+
             jobQueue.checkTimeField+" FROM "+jobQueue.getTableName()+
-            " WHERE "+jobQueue.jobIDField+"=? AND "+jobQueue.docHashField+"=? FOR UPDATE",list,null,null);
+            " WHERE "+jobQueue.docHashField+"=? AND "+jobQueue.jobIDField+"=? FOR UPDATE",list,null,null);
 
           boolean priorityUsed;
 
@@ -4046,15 +4046,21 @@ public class JobManager implements IJobM
   {
     // The query here mirrors the carrydown.restoreRecords() delete query!  However, it also fetches enough information to build a DocumentDescription
     // object for return, and so a join is necessary against the jobqueue table.
-    //???
+    ArrayList newlist = new ArrayList();
+    newlist.add(jobID);
+    newlist.addAll(list);
+    newlist.add(carryDown.statusToString(carryDown.ISNEW_BASE));
+
     String query = "SELECT t0."+jobQueue.idField+",t0."+jobQueue.docHashField+",t0."+jobQueue.docIDField+" FROM "+
-      jobQueue.getTableName()+" t0 WHERE EXISTS(SELECT 'x' FROM "+carryDown.getTableName()+
-      " t1 WHERE "+carryDown.parentIDHashField+" IN ("+queryPart+") AND t1."+carryDown.childIDHashField+"=t0."+jobQueue.docHashField+
-      " AND t0."+jobQueue.jobIDField+"=t1."+jobQueue.jobIDField+" AND t1."+carryDown.newField+"=?) AND t0."+jobQueue.jobIDField+"=?";
-    list.add(carryDown.statusToString(carryDown.ISNEW_BASE));
-    list.add(jobID);
+      jobQueue.getTableName()+" t0 WHERE "+
+      "t0."+jobQueue.jobIDField+"=? AND "+
+      "EXISTS(SELECT 'x' FROM "+carryDown.getTableName()+" t1 WHERE "+
+      "t1."+carryDown.jobIDField+"=t0."+jobQueue.jobIDField+" AND "+
+      "t1."+carryDown.parentIDHashField+" IN ("+queryPart+") AND "+
+      "t1."+carryDown.childIDHashField+"=t0."+jobQueue.docHashField+" AND "+
+      "t1."+carryDown.newField+"=?)";
 
-    IResultSet set = database.performQuery(query,list,null,null);
+    IResultSet set = database.performQuery(query,newlist,null,null);
     int i = 0;
     while (i < set.getRowCount())
     {
@@ -5872,25 +5878,15 @@ public class JobManager implements IJobM
           list.clear();
           list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
 
           IResultSet confirmSet = database.performQuery("SELECT "+jobQueue.idField+" FROM "+
             jobQueue.getTableName()+" WHERE "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
+            jobQueue.jobIDField+"=? AND "+jobQueue.statusField+" IN (?,?,?,?,?,?)  "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
 
           if (confirmSet.getRowCount() > 0)
             continue;
@@ -6024,19 +6020,13 @@ public class JobManager implements IJobM
           list.clear();
           list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
 
           IResultSet confirmSet = database.performQuery("SELECT "+jobQueue.idField+" FROM "+
             jobQueue.getTableName()+" WHERE "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
+            jobQueue.jobIDField+"=? AND "+jobQueue.statusField+" IN (?,?,?,?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
 
           if (confirmSet.getRowCount() > 0)
             continue;
@@ -6135,13 +6125,11 @@ public class JobManager implements IJobM
           list.clear();
           list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_PURGATORY));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED));
 
           IResultSet confirmSet = database.performQuery("SELECT "+jobQueue.idField+" FROM "+
             jobQueue.getTableName()+" WHERE "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
+            jobQueue.jobIDField+"=? AND "+jobQueue.statusField+" IN (?,?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
 
           if (confirmSet.getRowCount() > 0)
             continue;
@@ -6151,13 +6139,11 @@ public class JobManager implements IJobM
           list.clear();
           list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
-          list.add(jobID);
           list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
 
           confirmSet = database.performQuery("SELECT "+jobQueue.idField+" FROM "+
             jobQueue.getTableName()+" WHERE "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) OR "+
-            "("+jobQueue.jobIDField+"=? AND "+jobQueue.statusField+"=?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
+            jobQueue.jobIDField+"=? AND "+jobQueue.statusField+" IN (?,?) "+database.constructOffsetLimitClause(0,1),list,null,null,1,null);
 
           if (confirmSet.getRowCount() > 0)
           {
@@ -6498,21 +6484,21 @@ public class JobManager implements IJobM
     list.add(jobQueue.statusToString(jobQueue.STATUS_COMPLETE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PURGATORY));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
@@ -6521,17 +6507,17 @@ public class JobManager implements IJobM
     list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ELIGIBLEFORDELETE));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
     list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
@@ -6555,68 +6541,48 @@ public class JobManager implements IJobM
       .append(" END AS state,")
       .append("CASE")
       .append(" WHEN ")
-      .append("(").append("t0.").append(jobQueue.statusField).append("=? OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
       .append(" THEN 'Inactive'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
-      .append(" AND (t0.").append(jobQueue.checkActionField).append(" IS NULL OR t0.").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
+      .append(" AND t0.").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
       .append(" THEN 'Ready for processing'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
-      .append(" AND t0.").append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
+      .append(" AND t0.").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
       .append(" THEN 'Ready for expiration'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
-      .append(" AND (t0.").append(jobQueue.checkActionField).append(" IS NULL OR t0.").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
+      .append(" AND t0.").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
       .append(" THEN 'Waiting for processing'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
-      .append(" AND t0.").append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
+      .append(" AND t0.").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
       .append(" THEN 'Waiting for expiration'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkTimeField).append(" IS NULL")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkTimeField).append(" IS NULL")
       .append(" THEN 'Waiting forever'")
-      .append(" WHEN ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
+      .append(" WHEN ").append("t0.").append(jobQueue.statusField).append(" IN (?,?,?)")
       .append(" THEN 'Deleting'")
       .append(" WHEN ")
-      .append("(t0.").append(jobQueue.checkActionField).append(" IS NULL OR t0.").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?,?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
       .append(" THEN 'Processing'")
       .append(" WHEN ")
-      .append("t0.").append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append("t0.").append(jobQueue.statusField).append("=?")
+      .append("t0.").append(jobQueue.statusField).append(" IN (?,?,?,?)")
+      .append(" AND ").append("t0.").append(jobQueue.checkActionField).append("=?")
       .append(")")
       .append(" THEN 'Expiring'")
       .append(" ELSE 'Unknown'")
       .append(" END AS status,")
       .append("t0.").append(jobQueue.checkTimeField).append(" AS scheduled,")
       .append("CASE")
-      .append(" WHEN ").append("(t0.").append(jobQueue.checkActionField).append(" IS NULL OR t0.").append(jobQueue.checkActionField).append("=?) THEN 'Process'")
+      .append(" WHEN ").append("t0.").append(jobQueue.checkActionField).append("=? THEN 'Process'")
       .append(" WHEN ").append("t0.").append(jobQueue.checkActionField).append("=? THEN 'Expire'")
       .append(" ELSE 'Unknown'")
       .append(" END AS action,")
@@ -6665,125 +6631,103 @@ public class JobManager implements IJobM
     list.add(jobQueue.statusToString(jobQueue.STATUS_COMPLETE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PURGATORY));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
     list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGDELETED));
     list.add(jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED));
     list.add(jobQueue.statusToString(jobQueue.STATUS_ELIGIBLEFORDELETE));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
     
-    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
+    list.add(jobQueue.actionToString(jobQueue.ACTION_REMOVE));
     
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDING));
     list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
     sb.append(" AS idbucket,")
       .append("CASE")
       .append(" WHEN ")
-      .append("(").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?)")
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" AS inactive,")
       .append("CASE")
       .append(" WHEN ")
-      .append("(").append(jobQueue.checkActionField).append(" IS NULL OR ").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?,?,?)")
+      .append(" AND ").append(jobQueue.checkActionField).append("=?")
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as processing,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?,?,?)")
+      .append(" AND ").append(jobQueue.checkActionField).append("=?")
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as expiring,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
+      .append(jobQueue.statusField).append(" IN (?,?,?)")
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as deleting,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
-      .append(" AND (").append(jobQueue.checkActionField).append(" IS NULL OR ").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append(jobQueue.checkActionField).append("=?")
+      .append(" AND ").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as processready,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
+      .append(jobQueue.statusField).append(" IN (?,?)")
       .append(" AND ").append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(" AND ").append(jobQueue.checkTimeField).append("<=").append(currentTime.toString())
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as expireready,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
-      .append(" AND (").append(jobQueue.checkActionField).append(" IS NULL OR ").append(jobQueue.checkActionField).append("=?)")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append(jobQueue.checkActionField).append("=?")
+      .append(" AND ").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as processwaiting,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
+      .append(jobQueue.statusField).append(" IN (?,?)")
       .append(" AND ").append(jobQueue.checkActionField).append("=?")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(" AND ").append(jobQueue.checkTimeField).append(">").append(currentTime.toString())
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as expirewaiting,")
       .append("CASE")
       .append(" WHEN ")
-      .append(jobQueue.checkTimeField).append(" IS NULL")
-      .append(" AND (").append(jobQueue.statusField).append("=?")
-      .append(" OR ").append(jobQueue.statusField).append("=?")
-      .append(")")
+      .append(jobQueue.statusField).append(" IN (?,?)")
+      .append(" AND ").append(jobQueue.checkTimeField).append(" IS NULL")
       .append(" THEN 1 ELSE 0")
       .append(" END")
       .append(" as waitingforever");
@@ -6910,7 +6854,7 @@ public class JobManager implements IJobM
         list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY));
         list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
         sb.append(fieldPrefix).append(jobQueue.statusField).append(" IN (?,?,?,?)")
-          .append(" AND (").append(fieldPrefix).append(jobQueue.checkActionField).append(" IS NULL OR ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?)");
+          .append(" AND ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?");
         break;
       case DOCSTATUS_EXPIRING:
         list.add(jobQueue.statusToString(jobQueue.STATUS_ACTIVE));
@@ -6932,7 +6876,7 @@ public class JobManager implements IJobM
         list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
         list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
         sb.append(fieldPrefix).append(jobQueue.statusField).append(" IN (?,?)")
-          .append(" AND (").append(fieldPrefix).append(jobQueue.checkActionField).append(" IS NULL OR ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?)")
+          .append(" AND ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?")
           .append(" AND ").append(fieldPrefix).append(jobQueue.checkTimeField).append("<=").append(nowTime.toString());
         break;
       case DOCSTATUS_READYFOREXPIRATION:
@@ -6948,7 +6892,7 @@ public class JobManager implements IJobM
         list.add(jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY));
         list.add(jobQueue.actionToString(jobQueue.ACTION_RESCAN));
         sb.append(fieldPrefix).append(jobQueue.statusField).append(" IN (?,?)")
-          .append(" AND (").append(fieldPrefix).append(jobQueue.checkActionField).append(" IS NULL OR ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?)")
+          .append(" AND ").append(fieldPrefix).append(jobQueue.checkActionField).append("=?")
           .append(" AND ").append(fieldPrefix).append(jobQueue.checkTimeField).append(">").append(nowTime.toString());
         break;
       case DOCSTATUS_WAITINGFOREXPIRATION:

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobQueue.java Fri Oct 28 15:27:46 2011
@@ -204,10 +204,9 @@ public class JobQueue extends org.apache
       IndexDescription uniqueIndex = new IndexDescription(true,new String[]{docHashField,jobIDField});
       IndexDescription jobStatusIndex = new IndexDescription(false,new String[]{jobIDField,statusField});
       IndexDescription jobSeedIndex = new IndexDescription(false,new String[]{jobIDField,isSeedField});
-      IndexDescription jobHashStatusIndex = new IndexDescription(false,new String[]{jobIDField,docHashField,statusField});
-      IndexDescription statusIndex = new IndexDescription(false,new String[]{statusField});
-      IndexDescription actionTimeStatusIndex = new IndexDescription(false,new String[]{checkActionField,checkTimeField,statusField});
-      IndexDescription prioritysetStatusIndex = new IndexDescription(false,new String[]{prioritySetField,statusField});
+      IndexDescription jobHashStatusIndex = new IndexDescription(false,new String[]{docHashField,statusField});
+      IndexDescription actionTimeStatusIndex = new IndexDescription(false,new String[]{statusField,checkActionField,checkTimeField});
+      IndexDescription prioritysetStatusIndex = new IndexDescription(false,new String[]{prioritySetField,statusField,checkActionField});
       IndexDescription docpriorityIndex = new IndexDescription(false,new String[]{docPriorityField});
 
       // Get rid of unused indexes
@@ -226,8 +225,6 @@ public class JobQueue extends org.apache
           jobSeedIndex = null;
         else if (jobHashStatusIndex != null && id.equals(jobHashStatusIndex))
           jobHashStatusIndex = null;
-        else if (statusIndex != null && id.equals(statusIndex))
-          statusIndex = null;
         else if (actionTimeStatusIndex != null && id.equals(actionTimeStatusIndex))
           actionTimeStatusIndex = null;
         else if (prioritysetStatusIndex != null && id.equals(prioritysetStatusIndex))
@@ -250,9 +247,6 @@ public class JobQueue extends org.apache
       if (jobHashStatusIndex != null)
         performAddIndex(null,jobHashStatusIndex);
 
-      if (statusIndex != null)
-        performAddIndex(null,statusIndex);
-
       if (actionTimeStatusIndex != null)
         performAddIndex(null,actionTimeStatusIndex);
 
@@ -320,14 +314,14 @@ public class JobQueue extends org.apache
     ArrayList list = new ArrayList();
     list.add(statusToString(STATUS_ACTIVE));
     list.add(statusToString(STATUS_ACTIVENEEDRESCAN));
-    performUpdate(map,"WHERE "+statusField+"=? OR "+statusField+"=?",list,null);
+    performUpdate(map,"WHERE "+statusField+" IN (?,?)",list,null);
 
     // Map ACTIVEPURGATORY to PENDINGPURGATORY
     map.put(statusField,statusToString(STATUS_PENDINGPURGATORY));
     list.clear();
     list.add(statusToString(STATUS_ACTIVEPURGATORY));
     list.add(statusToString(STATUS_ACTIVENEEDRESCANPURGATORY));
-    performUpdate(map,"WHERE "+statusField+"=? OR "+statusField+"=?",list,null);
+    performUpdate(map,"WHERE "+statusField+" IN (?,?)",list,null);
 
     // Map BEINGDELETED to ELIGIBLEFORDELETE
     map.put(statusField,statusToString(STATUS_ELIGIBLEFORDELETE));
@@ -388,14 +382,14 @@ public class JobQueue extends org.apache
     ArrayList list = new ArrayList();
     list.add(statusToString(STATUS_ACTIVE));
     list.add(statusToString(STATUS_ACTIVENEEDRESCAN));
-    performUpdate(map,"WHERE "+statusField+"=? OR "+statusField+"=?",list,null);
+    performUpdate(map,"WHERE "+statusField+" IN (?,?)",list,null);
 
     // Map ACTIVEPURGATORY to PENDINGPURGATORY
     map.put(statusField,statusToString(STATUS_PENDINGPURGATORY));
     list.clear();
     list.add(statusToString(STATUS_ACTIVEPURGATORY));
     list.add(statusToString(STATUS_ACTIVENEEDRESCANPURGATORY));
-    performUpdate(map,"WHERE "+statusField+"=? OR "+statusField+"=?",list,null);
+    performUpdate(map,"WHERE "+statusField+" IN (?,?)",list,null);
   }
 
   /** Reset doc delete worker status.

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java Fri Oct 28 15:27:46 2011
@@ -766,7 +766,7 @@ public class Jobs extends org.apache.man
       list.add(statusToString(STATUS_STARTINGUP));
       list.add(statusToString(STATUS_ABORTINGSTARTINGUP));
       map.put(statusField,statusToString(STATUS_READYFORSTARTUP));
-      performUpdate(map,"WHERE "+statusField+"=? OR "+statusField+"=?",list,invKey);
+      performUpdate(map,"WHERE "+statusField+" IN (?,?)",list,invKey);
 
       // Aborting starting up for restart state goes to ABORTINGFORRESTART
       list.clear();

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/DocumentDeleteStufferThread.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/DocumentDeleteStufferThread.java?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/DocumentDeleteStufferThread.java (original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/DocumentDeleteStufferThread.java Fri Oct 28 15:27:46 2011
@@ -88,7 +88,7 @@ public class DocumentDeleteStufferThread
 
           // Wait until the delete queue is "empty" (meaning that some delete threads
           // can run out of work if we don't act).
-          if (documentDeleteQueue.checkIfEmpty(n) == false)
+          if (documentDeleteQueue.checkIfEmpty(n * 3) == false)
           {
             ManifoldCF.sleep(100L);
             continue;

Modified: incubator/lcf/trunk/lib/hsqldb.jar
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/lib/hsqldb.jar?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
Binary files - no diff available.

Modified: incubator/lcf/trunk/mvn-bootstrap.bat
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/mvn-bootstrap.bat?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/mvn-bootstrap.bat (original)
+++ incubator/lcf/trunk/mvn-bootstrap.bat Fri Oct 28 15:27:46 2011
@@ -17,7 +17,7 @@ rem limitations under the License.
 ant download-dependencies
 
 mvn install:install-file -Dfile=lib/jdbcpool-0.99.jar -DgroupId=com.bitmechanic -DartifactId=jdbcpool -Dversion=0.99 -Dpackaging=jar
-mvn install:install-file -Dfile=lib/hsqldb.jar -DgroupId=org.hsqldb -DartifactId=hsqldb -Dversion=2.2.5.6-9-2011 -Dpackaging=jar
+mvn install:install-file -Dfile=lib/hsqldb.jar -DgroupId=org.hsqldb -DartifactId=hsqldb -Dversion=2.2.5.10-27-2011 -Dpackaging=jar
 
 mvn install:install-file -Dfile=lib/commons-httpclient-mcf.jar -DgroupId=commons-httpclient -DartifactId=commons-httpclient-mcf -Dversion=3.1  -Dpackaging=jar
 mvn install:install-file -Dfile=lib/xercesImpl-mcf.jar -DgroupId=xerces -DartifactId=xercesImpl-mcf -Dversion=2.9.1  -Dpackaging=jar

Modified: incubator/lcf/trunk/mvn-bootstrap.sh
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/mvn-bootstrap.sh?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/mvn-bootstrap.sh (original)
+++ incubator/lcf/trunk/mvn-bootstrap.sh Fri Oct 28 15:27:46 2011
@@ -24,7 +24,7 @@
 ant download-dependencies
 
 mvn install:install-file -Dfile=lib/jdbcpool-0.99.jar -DgroupId=com.bitmechanic -DartifactId=jdbcpool -Dversion=0.99 -Dpackaging=jar
-mvn install:install-file -Dfile=lib/hsqldb.jar -DgroupId=org.hsqldb -DartifactId=hsqldb -Dversion=2.2.5.6-9-2011 -Dpackaging=jar
+mvn install:install-file -Dfile=lib/hsqldb.jar -DgroupId=org.hsqldb -DartifactId=hsqldb -Dversion=2.2.5.10-27-2011 -Dpackaging=jar
 
 mvn install:install-file -Dfile=lib/commons-httpclient-mcf.jar -DgroupId=commons-httpclient -DartifactId=commons-httpclient-mcf -Dversion=3.1  -Dpackaging=jar
 mvn install:install-file -Dfile=lib/xercesImpl-mcf.jar -DgroupId=xerces -DartifactId=xercesImpl-mcf -Dversion=2.9.1  -Dpackaging=jar

Modified: incubator/lcf/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/pom.xml?rev=1190399&r1=1190398&r2=1190399&view=diff
==============================================================================
--- incubator/lcf/trunk/pom.xml (original)
+++ incubator/lcf/trunk/pom.xml Fri Oct 28 15:27:46 2011
@@ -40,7 +40,7 @@
     <!-- dependency versions -->
     <junit.version>4.8.2</junit.version>
     <postgresql.version>8.4-702.jdbc4</postgresql.version>
-    <hsqldb.version>2.2.5.6-9-2011</hsqldb.version>
+    <hsqldb.version>2.2.5.10-27-2011</hsqldb.version>
     <derby.version>10.7.1.1</derby.version>
     <jetty.version>6.1.26</jetty.version>
   </properties>