manifoldcf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r1205503 [1/2] - in /incubator/lcf/trunk: ./ framework/crawler-ui/src/main/webapp/ framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/ framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ framework...
Date Wed, 23 Nov 2011 17:31:15 GMT
Author: kwright
Date: Wed Nov 23 17:31:13 2011
New Revision: 1205503

URL: http://svn.apache.org/viewvc?rev=1205503&view=rev
Log:
Fix for CONNECTORS-290.  Revamp the way docpriorities are handled and managed, so that no
document which is not eligible for stuffing has a docpriority.

Modified:
    incubator/lcf/trunk/   (props changed)
    incubator/lcf/trunk/CHANGES.txt
    incubator/lcf/trunk/framework/crawler-ui/src/main/webapp/showjobstatus.jsp
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnectionManager.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStatus.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/JobResetThread.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/JobStartThread.java
    incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/system/ManifoldCF.java
    incubator/lcf/trunk/site/src/documentation/content/xdocs/programmatic-operation.xml

Propchange: incubator/lcf/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Nov 23 17:31:13 2011
@@ -10,4 +10,5 @@
 /incubator/lcf/branches/CONNECTORS-256:1172846-1182809
 /incubator/lcf/branches/CONNECTORS-277:1185949-1187036
 /incubator/lcf/branches/CONNECTORS-284:1189305-1190398
+/incubator/lcf/branches/CONNECTORS-290:1204836-1205502
 /incubator/lcf/branches/CONNECTORS-32:1092556-1094216

Modified: incubator/lcf/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/CHANGES.txt?rev=1205503&r1=1205502&r2=1205503&view=diff
==============================================================================
--- incubator/lcf/trunk/CHANGES.txt (original)
+++ incubator/lcf/trunk/CHANGES.txt Wed Nov 23 17:31:13 2011
@@ -3,6 +3,12 @@ $Id$
 
 ======================= 0.4-dev =====================
 
+CONNECTORS-290: Revamp the way docpriorities are handled so as to avoid
+flooding the jobqueue with documents that have a docpriority value but
+a job or document status incompatible with stuffing.  This should help a lot
+in very large crawls with multiple jobs.
+(Karl Wright)
+
 CONNECTORS-291: Active Directory authority reconnect logic had a
 pathological case when server forcibly closed connection.
 (Karl Wright)

Modified: incubator/lcf/trunk/framework/crawler-ui/src/main/webapp/showjobstatus.jsp
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/crawler-ui/src/main/webapp/showjobstatus.jsp?rev=1205503&r1=1205502&r2=1205503&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/crawler-ui/src/main/webapp/showjobstatus.jsp (original)
+++ incubator/lcf/trunk/framework/crawler-ui/src/main/webapp/showjobstatus.jsp Wed Nov 23
17:31:13 2011
@@ -131,6 +131,12 @@ if (maintenanceUnderway == false)
 		case JobStatus.JOBSTATUS_RESTARTING:
 			statusName = "Restarting";
 			break;
+		case JobStatus.JOBSTATUS_STOPPING:
+			statusName = "Stopping";
+			break;
+		case JobStatus.JOBSTATUS_RESUMING:
+			statusName = "Resuming";
+			break;
 		case JobStatus.JOBSTATUS_PAUSED:
 			statusName = "Paused";
 			break;
@@ -180,24 +186,53 @@ if (maintenanceUnderway == false)
 %>
 		<tr <%="class=\""+((i%2==0)?"evendatarow":"odddatarow")+"\""%>>
 			<td class="columncell">
-<% if (status == JobStatus.JOBSTATUS_NOTYETRUN || status == JobStatus.JOBSTATUS_COMPLETED
|| status == JobStatus.JOBSTATUS_ERROR) { %>
-	<a href='<%="javascript:Start(\""+js.getJobID()+"\")"%>' alt='<%="Start job
"+js.getJobID()%>'>Start</a>&nbsp;
-<% } %>
-<% if (status == JobStatus.JOBSTATUS_RUNNING || status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED
|| status == JobStatus.JOBSTATUS_WINDOWWAIT ||
-	status == JobStatus.JOBSTATUS_PAUSED || status == JobStatus.JOBSTATUS_STARTING) { %>
-	<a href='<%="javascript:Restart(\""+js.getJobID()+"\")"%>' alt='<%="Restart
job "+js.getJobID()%>'>Restart</a>&nbsp;
-<% } %>
-<% if (status == JobStatus.JOBSTATUS_RUNNING || status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED
|| status == JobStatus.JOBSTATUS_WINDOWWAIT) { %>
-	<a href='<%="javascript:Pause(\""+js.getJobID()+"\")"%>' alt='<%="Pause job
"+js.getJobID()%>'>Pause</a>&nbsp;
-<% } %>
-<% if (status == JobStatus.JOBSTATUS_RUNNING || status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED
|| status == JobStatus.JOBSTATUS_WINDOWWAIT ||
-	status == JobStatus.JOBSTATUS_PAUSED || status == JobStatus.JOBSTATUS_STARTING || status
== JobStatus.JOBSTATUS_RESTARTING) { %>
-	<a href='<%="javascript:Abort(\""+js.getJobID()+"\")"%>' alt='<%="Abort job
"+js.getJobID()%>'>Abort</a>&nbsp;
-<% } %>
-<% if (status == JobStatus.JOBSTATUS_PAUSED) { %>
-	<a href='<%="javascript:Resume(\""+js.getJobID()+"\")"%>' alt='<%="Resume job
"+js.getJobID()%>'>Resume</a>&nbsp;
-<% } %>
-
+<%
+		if (status == JobStatus.JOBSTATUS_NOTYETRUN ||
+			status == JobStatus.JOBSTATUS_COMPLETED ||
+			status == JobStatus.JOBSTATUS_ERROR)
+		{
+%>
+				<a href='<%="javascript:Start(\""+js.getJobID()+"\")"%>' alt='<%="Start job
"+js.getJobID()%>'>Start</a>&nbsp;
+<%
+		}
+		if (status == JobStatus.JOBSTATUS_RUNNING ||
+			status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED ||
+			status == JobStatus.JOBSTATUS_WINDOWWAIT ||
+			status == JobStatus.JOBSTATUS_PAUSED ||
+			status == JobStatus.JOBSTATUS_STARTING)
+		{
+%>
+				<a href='<%="javascript:Restart(\""+js.getJobID()+"\")"%>' alt='<%="Restart
job "+js.getJobID()%>'>Restart</a>&nbsp;
+<%
+		}
+		if (status == JobStatus.JOBSTATUS_RUNNING ||
+			status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED ||
+			status == JobStatus.JOBSTATUS_WINDOWWAIT)
+		{
+%>
+				<a href='<%="javascript:Pause(\""+js.getJobID()+"\")"%>' alt='<%="Pause job
"+js.getJobID()%>'>Pause</a>&nbsp;
+<%
+		}
+		if (status == JobStatus.JOBSTATUS_RUNNING ||
+			status == JobStatus.JOBSTATUS_RUNNING_UNINSTALLED ||
+			status == JobStatus.JOBSTATUS_STOPPING ||
+			status == JobStatus.JOBSTATUS_RESUMING ||
+			status == JobStatus.JOBSTATUS_WINDOWWAIT ||
+			status == JobStatus.JOBSTATUS_PAUSED ||
+			status == JobStatus.JOBSTATUS_STARTING ||
+			status == JobStatus.JOBSTATUS_RESTARTING)
+		{
+%>
+				<a href='<%="javascript:Abort(\""+js.getJobID()+"\")"%>' alt='<%="Abort job
"+js.getJobID()%>'>Abort</a>&nbsp;
+<%
+		}
+		if (status == JobStatus.JOBSTATUS_PAUSED)
+		{
+%>
+				<a href='<%="javascript:Resume(\""+js.getJobID()+"\")"%>' alt='<%="Resume
job "+js.getJobID()%>'>Resume</a>&nbsp;
+<%
+		}
+%>
 			</td>
 			<td class="columncell"><%="<!--jobid="+js.getJobID()+"-->"%><%=js.getDescription()%></td><td
class="columncell"><%=statusName%></td><td class="columncell"><%=startTime%></td><td
class="columncell"><%=endTime%></td>
 			<td class="columncell"><%=new Long(js.getDocumentsInQueue()).toString()%></td>

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java?rev=1205503&r1=1205502&r2=1205503&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
(original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IJobManager.java
Wed Nov 23 17:31:13 2011
@@ -826,13 +826,24 @@ public interface IJobManager
   public boolean errorAbort(Long jobID, String errorText)
     throws ManifoldCFException;
 
-  /** Complete the sequence that aborts jobs and makes them runnable again.
+  /** Complete the sequence that stops jobs, either for abort, pause, or because of a scheduling
+  * window.  The logic will move the job to its next state (INACTIVE, PAUSED, ACTIVEWAIT),
+  * and will record the jobs that have been so modified.
   *@param timestamp is the current time in milliseconds since epoch.
-  *@param abortJobs is filled in with the set of IJobDescription objects that were aborted.
+  *@param modifiedJobs is filled in with the set of IJobDescription objects that were stopped.
   */
-  public void finishJobAborts(long timestamp, ArrayList abortJobs)
+  public void finishJobStops(long timestamp, ArrayList modifiedJobs)
     throws ManifoldCFException;
 
+  /** Complete the sequence that resumes jobs, either from a pause or from a scheduling window
+  * wait.  The logic will restore the job to an active state (many possibilities depending
on
+  * connector status), and will record the jobs that have been so modified.
+  *@param timestamp is the current time in milliseconds since epoch.
+  *@param modifiedJobs is filled in with the set of IJobDescription objects that were resumed.
+  */
+  public void finishJobResumes(long timestamp, ArrayList modifiedJobs)
+    throws ManifoldCFException;
+    
   /** Put all eligible jobs in the "shutting down" state.
   */
   public void finishJobs()

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnectionManager.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnectionManager.java?rev=1205503&r1=1205502&r2=1205503&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnectionManager.java
(original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/IRepositoryConnectionManager.java
Wed Nov 23 17:31:13 2011
@@ -125,19 +125,26 @@ public interface IRepositoryConnectionMa
 
   /** Start a job */
   public static final String ACTIVITY_JOBSTART = "job start";
-  /** Wait a job */
-  public static final String ACTIVITY_JOBWAIT = "job wait";
-  /** Continue a job */
-  public static final String ACTIVITY_JOBCONTINUE = "job continue";
   /** Finish a job */
   public static final String ACTIVITY_JOBEND = "job end";
-  /** Abort a job */
-  public static final String ACTIVITY_JOBABORT = "job abort";
-
+  /** Stop a job */
+  public static final String ACTIVITY_JOBSTOP = "job stop";
+  /** Continue a job */
+  public static final String ACTIVITY_JOBCONTINUE = "job continue";
+  /** Wait due to schedule */
+  public static final String ACTIVITY_JOBWAIT = "job wait";
+  /** Unwait due to schedule */
+  public static final String ACTIVITY_JOBUNWAIT = "job unwait";
+  
   /** The set of activity records. */
   public static final String[] activitySet = new String[]
   {
-    ACTIVITY_JOBSTART,ACTIVITY_JOBWAIT,ACTIVITY_JOBCONTINUE,ACTIVITY_JOBEND,ACTIVITY_JOBABORT
+    ACTIVITY_JOBSTART,
+    ACTIVITY_JOBSTOP,
+    ACTIVITY_JOBCONTINUE,
+    ACTIVITY_JOBWAIT,
+    ACTIVITY_JOBUNWAIT,
+    ACTIVITY_JOBEND
   };
 
   /** Record time-stamped information about the activity of the connection.  This information
can originate from

Modified: incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStatus.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStatus.java?rev=1205503&r1=1205502&r2=1205503&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStatus.java
(original)
+++ incubator/lcf/trunk/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/interfaces/JobStatus.java
Wed Nov 23 17:31:13 2011
@@ -28,17 +28,19 @@ public class JobStatus
   // Job status values
   public final static int JOBSTATUS_NOTYETRUN = 0;
   public final static int JOBSTATUS_RUNNING = 1;
-  public final static int JOBSTATUS_PAUSED = 2;
-  public final static int JOBSTATUS_COMPLETED = 3;
-  public final static int JOBSTATUS_WINDOWWAIT = 4;
-  public final static int JOBSTATUS_STARTING = 5;
-  public final static int JOBSTATUS_DESTRUCTING = 6;
-  public final static int JOBSTATUS_ERROR = 7;
-  public final static int JOBSTATUS_ABORTING = 8;
-  public final static int JOBSTATUS_RESTARTING = 9;
-  public final static int JOBSTATUS_RUNNING_UNINSTALLED = 10;
-  public final static int JOBSTATUS_JOBENDCLEANUP = 11;
-  public final static int JOBSTATUS_JOBENDNOTIFICATION = 12;
+  public final static int JOBSTATUS_STOPPING = 2;
+  public final static int JOBSTATUS_PAUSED = 3;
+  public final static int JOBSTATUS_RESUMING = 4;
+  public final static int JOBSTATUS_COMPLETED = 5;
+  public final static int JOBSTATUS_WINDOWWAIT = 6;
+  public final static int JOBSTATUS_STARTING = 7;
+  public final static int JOBSTATUS_DESTRUCTING = 8;
+  public final static int JOBSTATUS_ERROR = 9;
+  public final static int JOBSTATUS_ABORTING = 10;
+  public final static int JOBSTATUS_RESTARTING = 11;
+  public final static int JOBSTATUS_RUNNING_UNINSTALLED = 12;
+  public final static int JOBSTATUS_JOBENDCLEANUP = 13;
+  public final static int JOBSTATUS_JOBENDNOTIFICATION = 14;
 
 
   // Member variables.

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=1205503&r1=1205502&r2=1205503&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
Wed Nov 23 17:31:13 2011
@@ -1470,25 +1470,28 @@ public class JobManager implements IJobM
 
     list.add(jobQueue.actionToString(JobQueue.ACTION_RESCAN));
 
+    // Per CONNECTORS-290, we need to be leaving priorities blank for jobs that aren't using
them,
+    // so this will be changed to not include jobs where the priorities have been bashed
to null.
+    //
+    // I've included ALL states that might have non-null doc priorities.  This includes states
+    // corresponding to uninstalled connectors, since there is no transition that cleans
out the
+    // document priorities in these states.  The time during which a connector is uninstalled
is
+    // expected to be short, because typically this state is the result of an installation
procedure
+    // rather than willful action on the part of a user.
+        
     sb.append("EXISTS(SELECT 'x' FROM ").append(jobs.getTableName()).append(" t1 WHERE ")
       .append(database.buildConjunctionClause(list,new ClauseDescription[]{
         new MultiClause("t1."+jobs.statusField,new Object[]{
-          Jobs.statusToString(Jobs.STATUS_ACTIVE),
-          Jobs.statusToString(Jobs.STATUS_PAUSED),
-          Jobs.statusToString(Jobs.STATUS_ACTIVEWAIT),
-          Jobs.statusToString(Jobs.STATUS_PAUSEDWAIT),
-          Jobs.statusToString(Jobs.STATUS_ACTIVE),
-          Jobs.statusToString(Jobs.STATUS_READYFORSTARTUP),
           Jobs.statusToString(Jobs.STATUS_STARTINGUP),
-          Jobs.statusToString(Jobs.STATUS_ABORTINGSTARTINGUPFORRESTART),
-          Jobs.statusToString(Jobs.STATUS_ABORTINGSTARTINGUP),
+          Jobs.statusToString(Jobs.STATUS_ACTIVE),
           Jobs.statusToString(Jobs.STATUS_ACTIVESEEDING),
-          Jobs.statusToString(Jobs.STATUS_PAUSEDSEEDING),
-          Jobs.statusToString(Jobs.STATUS_ACTIVEWAITSEEDING),
-          Jobs.statusToString(Jobs.STATUS_PAUSEDWAITSEEDING),
-          Jobs.statusToString(Jobs.STATUS_ABORTING),
-          Jobs.statusToString(Jobs.STATUS_ABORTINGFORRESTART),
-          Jobs.statusToString(Jobs.STATUS_ABORTINGFORRESTARTSEEDING)}),
+          Jobs.statusToString(Jobs.STATUS_ACTIVE_UNINSTALLED),
+          Jobs.statusToString(Jobs.STATUS_ACTIVESEEDING_UNINSTALLED),
+          Jobs.statusToString(Jobs.STATUS_ACTIVE_NOOUTPUT),
+          Jobs.statusToString(Jobs.STATUS_ACTIVESEEDING_NOOUTPUT),
+          Jobs.statusToString(Jobs.STATUS_ACTIVE_NEITHER),
+          Jobs.statusToString(Jobs.STATUS_ACTIVESEEDING_NEITHER)
+          }),
         new JoinClause("t1."+jobs.idField,"t0."+jobQueue.jobIDField)}))
       .append(") ");
 
@@ -2121,7 +2124,8 @@ public class JobManager implements IJobM
     {
       IResultRow row = set.getRow(0);
       Double docPriority = (Double)row.getValue(jobQueue.docPriorityField);
-      scanRecord.addBins(docPriority);
+      if (docPriority != null)
+        scanRecord.addBins(docPriority);
     }
     return rval;
   }
@@ -4563,21 +4567,7 @@ public class JobManager implements IJobM
           break;
         case Jobs.STATUS_ACTIVEWAIT:
           unwaitList.add(jobID);
-          if (connectionMgr.checkConnectorExists(connectionName))
-          {
-            if (outputMgr.checkConnectorExists(outputName))
-              newJobState = jobs.STATUS_ACTIVE;
-            else
-              newJobState = jobs.STATUS_ACTIVE_NOOUTPUT;
-          }
-          else
-          {
-            if (outputMgr.checkConnectorExists(outputName))
-              newJobState = jobs.STATUS_ACTIVE_UNINSTALLED;
-            else
-              newJobState = jobs.STATUS_ACTIVE_NEITHER;
-          }
-          jobs.unwaitJob(jobID,newJobState,windowEnd);
+          jobs.unwaitJob(jobID,Jobs.STATUS_RESUMING,windowEnd);
           jobQueue.clearFailTimes(jobID);
           if (Logging.jobs.isDebugEnabled())
           {
@@ -4586,21 +4576,7 @@ public class JobManager implements IJobM
           break;
         case Jobs.STATUS_ACTIVEWAITSEEDING:
           unwaitList.add(jobID);
-          if (connectionMgr.checkConnectorExists(connectionName))
-          {
-            if (outputMgr.checkConnectorExists(outputName))
-              newJobState = jobs.STATUS_ACTIVESEEDING;
-            else
-              newJobState = jobs.STATUS_ACTIVESEEDING_NOOUTPUT;
-          }
-          else
-          {
-            if (outputMgr.checkConnectorExists(outputName))
-              newJobState = jobs.STATUS_ACTIVESEEDING_UNINSTALLED;
-            else
-              newJobState = jobs.STATUS_ACTIVESEEDING_NEITHER;
-          }
-          jobs.unwaitJob(jobID,newJobState,windowEnd);
+          jobs.unwaitJob(jobID,Jobs.STATUS_RESUMINGSEEDING,windowEnd);
           jobQueue.clearFailTimes(jobID);
           if (Logging.jobs.isDebugEnabled())
           {
@@ -4623,6 +4599,22 @@ public class JobManager implements IJobM
             Logging.jobs.debug("Un-waited (but still paused) job "+jobID);
           }
           break;
+        case Jobs.STATUS_PAUSINGWAITING:
+          unwaitList.add(jobID);
+          jobs.unwaitJob(jobID,jobs.STATUS_PAUSING,windowEnd);
+          if (Logging.jobs.isDebugEnabled())
+          {
+            Logging.jobs.debug("Un-waited (but still paused) job "+jobID);
+          }
+          break;
+        case Jobs.STATUS_PAUSINGWAITINGSEEDING:
+          unwaitList.add(jobID);
+          jobs.unwaitJob(jobID,jobs.STATUS_PAUSINGSEEDING,windowEnd);
+          if (Logging.jobs.isDebugEnabled())
+          {
+            Logging.jobs.debug("Un-waited (but still paused) job "+jobID);
+          }
+          break;
         default:
           break;
         }
@@ -4644,7 +4636,7 @@ public class JobManager implements IJobM
       database.endTransaction();
     }
   }
-
+  
   /** Put active or paused jobs in wait state, if they've exceeded their window.
   *@param currentTime is the current time in milliseconds since epoch.
   *@param waitList is filled in with the set of job ID's that were put into a wait state.
@@ -4701,7 +4693,7 @@ public class JobManager implements IJobM
         case Jobs.STATUS_ACTIVE_UNINSTALLED:
         case Jobs.STATUS_ACTIVE_NOOUTPUT:
         case Jobs.STATUS_ACTIVE_NEITHER:
-          jobs.waitJob(jobID,Jobs.STATUS_ACTIVEWAIT);
+          jobs.waitJob(jobID,Jobs.STATUS_ACTIVEWAITING);
           if (Logging.jobs.isDebugEnabled())
           {
             Logging.jobs.debug("Job "+jobID+" now in 'wait' state due to window end");
@@ -4711,7 +4703,7 @@ public class JobManager implements IJobM
         case Jobs.STATUS_ACTIVESEEDING_UNINSTALLED:
         case Jobs.STATUS_ACTIVESEEDING_NOOUTPUT:
         case Jobs.STATUS_ACTIVESEEDING_NEITHER:
-          jobs.waitJob(jobID,Jobs.STATUS_ACTIVEWAITSEEDING);
+          jobs.waitJob(jobID,Jobs.STATUS_ACTIVEWAITINGSEEDING);
           if (Logging.jobs.isDebugEnabled())
           {
             Logging.jobs.debug("Job "+jobID+" now in 'wait' state due to window end");
@@ -4731,6 +4723,20 @@ public class JobManager implements IJobM
             Logging.jobs.debug("Job "+jobID+" now in 'wait paused' state due to window end");
           }
           break;
+        case Jobs.STATUS_PAUSING:
+          jobs.waitJob(jobID,Jobs.STATUS_PAUSINGWAITING);
+          if (Logging.jobs.isDebugEnabled())
+          {
+            Logging.jobs.debug("Job "+jobID+" now in 'wait paused' state due to window end");
+          }
+          break;
+        case Jobs.STATUS_PAUSINGSEEDING:
+          jobs.waitJob(jobID,Jobs.STATUS_PAUSINGWAITINGSEEDING);
+          if (Logging.jobs.isDebugEnabled())
+          {
+            Logging.jobs.debug("Job "+jobID+" now in 'wait paused' state due to window end");
+          }
+          break;
         default:
           break;
         }
@@ -6166,111 +6172,119 @@ public class JobManager implements IJobM
     }
   }
   
-  /** Complete the sequence that aborts jobs and makes them runnable again.
-  *@param timestamp is the current time.
-  *@param abortJobs is the set of IJobDescription objects that were aborted (and stopped).
+  /** Complete the sequence that resumes jobs, either from a pause or from a scheduling window
+  * wait.  The logic will restore the job to an active state (many possibilities depending
on
+  * connector status), and will record the jobs that have been so modified.
+  *@param timestamp is the current time in milliseconds since epoch.
+  *@param modifiedJobs is filled in with the set of IJobDescription objects that were resumed.
   */
-  public void finishJobAborts(long timestamp, ArrayList abortJobs)
+  public void finishJobResumes(long timestamp, ArrayList modifiedJobs)
     throws ManifoldCFException
   {
-    while (true)
+    // Do the first query, getting the candidate jobs to be considered
+    StringBuilder sb = new StringBuilder("SELECT ");
+    ArrayList list = new ArrayList();
+        
+    sb.append(jobs.idField)
+      .append(" FROM ").append(jobs.getTableName()).append(" WHERE ")
+      .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+        new MultiClause(jobs.statusField,new Object[]{
+          jobs.statusToString(jobs.STATUS_RESUMING),
+          jobs.statusToString(jobs.STATUS_RESUMINGSEEDING)
+          })}));
+        
+    IResultSet set = database.performQuery(sb.toString(),list,null,null);
+
+    int i = 0;
+    while (i < set.getRowCount())
     {
-      long sleepAmt = 0L;
-      database.beginTransaction();
-      try
+      IResultRow row = set.getRow(i++);
+      Long jobID = (Long)row.getValue(jobs.idField);
+
+      // There are no secondary checks that need to be made; just resume
+      IJobDescription jobDesc = jobs.load(jobID,true);
+      modifiedJobs.add(jobDesc);
+
+      jobs.finishResumeJob(jobID,timestamp);
+          
+      if (Logging.jobs.isDebugEnabled())
       {
-        // The query I used to emit was:
-        // SELECT jobid FROM jobs t0 WHERE t0.status='X' AND NOT EXISTS(SELECT 'x' FROM jobqueue
t1 WHERE
-        //              t0.id=t1.jobid AND t1.status IN ('A','F'))
-        // Now the query is broken up so that Postgresql behaves more efficiently.
+        Logging.jobs.debug("Resumed job "+jobID);
+      }
+    }
+  }
 
-        // Do the first query, getting the candidate jobs to be considered
-        StringBuilder sb = new StringBuilder("SELECT ");
-        ArrayList list = new ArrayList();
+  /** Complete the sequence that stops jobs, either for abort, pause, or because of a scheduling
+  * window.  The logic will move the job to its next state (INACTIVE, PAUSED, ACTIVEWAIT),
+  * and will record the jobs that have been so modified.
+  *@param timestamp is the current time in milliseconds since epoch.
+  *@param modifiedJobs is filled in with the set of IJobDescription objects that were stopped.
+  */
+  public void finishJobStops(long timestamp, ArrayList modifiedJobs)
+    throws ManifoldCFException
+  {
+    // The query I used to emit was:
+    // SELECT jobid FROM jobs t0 WHERE t0.status='X' AND NOT EXISTS(SELECT 'x' FROM jobqueue
t1 WHERE
+    //              t0.id=t1.jobid AND t1.status IN ('A','F'))
+    // Now the query is broken up so that Postgresql behaves more efficiently.
+
+    // Do the first query, getting the candidate jobs to be considered
+    StringBuilder sb = new StringBuilder("SELECT ");
+    ArrayList list = new ArrayList();
         
-        sb.append(jobs.idField).append(",")
-          .append(jobs.statusField)
-          .append(" FROM ").append(jobs.getTableName()).append(" WHERE ")
-          .append(database.buildConjunctionClause(list,new ClauseDescription[]{
-            new MultiClause(jobs.statusField,new Object[]{
-              jobs.statusToString(jobs.STATUS_ABORTING),
-              jobs.statusToString(jobs.STATUS_ABORTINGFORRESTART)})}))
-          .append(" FOR UPDATE");
+    sb.append(jobs.idField)
+      .append(" FROM ").append(jobs.getTableName()).append(" WHERE ")
+      .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+        new MultiClause(jobs.statusField,new Object[]{
+          jobs.statusToString(jobs.STATUS_ABORTING),
+          jobs.statusToString(jobs.STATUS_ABORTINGFORRESTART),
+          jobs.statusToString(jobs.STATUS_PAUSING),
+          jobs.statusToString(jobs.STATUS_PAUSINGSEEDING),
+          jobs.statusToString(jobs.STATUS_ACTIVEWAITING),
+          jobs.statusToString(jobs.STATUS_ACTIVEWAITINGSEEDING),
+          jobs.statusToString(jobs.STATUS_PAUSINGWAITING),
+          jobs.statusToString(jobs.STATUS_PAUSINGWAITINGSEEDING)
+          })}));
         
-        IResultSet set = database.performQuery(sb.toString(),list,null,null);
+    IResultSet set = database.performQuery(sb.toString(),list,null,null);
 
-        int i = 0;
-        while (i < set.getRowCount())
-        {
-          IResultRow row = set.getRow(i++);
-          Long jobID = (Long)row.getValue(jobs.idField);
+    int i = 0;
+    while (i < set.getRowCount())
+    {
+      IResultRow row = set.getRow(i++);
+      Long jobID = (Long)row.getValue(jobs.idField);
 
-          sb = new StringBuilder("SELECT ");
-          list.clear();
+      sb = new StringBuilder("SELECT ");
+      list.clear();
           
-          sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
-            .append(database.buildConjunctionClause(list,new ClauseDescription[]{
-              new UnitaryClause(jobQueue.jobIDField,jobID),
-              new MultiClause(jobQueue.statusField,new Object[]{
-                jobQueue.statusToString(jobQueue.STATUS_ACTIVE),
-                jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY),
-                jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN),
-                jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY)})}))
-            .append(" ").append(database.constructOffsetLimitClause(0,1));
+      sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
+        .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+          new UnitaryClause(jobQueue.jobIDField,jobID),
+          new MultiClause(jobQueue.statusField,new Object[]{
+            jobQueue.statusToString(jobQueue.STATUS_ACTIVE),
+            jobQueue.statusToString(jobQueue.STATUS_ACTIVEPURGATORY),
+            jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCAN),
+            jobQueue.statusToString(jobQueue.STATUS_ACTIVENEEDRESCANPURGATORY)})}))
+        .append(" ").append(database.constructOffsetLimitClause(0,1));
 
-          IResultSet confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
+      IResultSet confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
 
-          if (confirmSet.getRowCount() > 0)
-            continue;
+      if (confirmSet.getRowCount() > 0)
+        continue;
 
-          int status = jobs.stringToStatus((String)row.getValue(jobs.statusField));
-          IJobDescription jobDesc = jobs.load(jobID,true);
-          abortJobs.add(jobDesc);
-
-          switch (status)
-          {
-          case Jobs.STATUS_ABORTING:
-            // Mark status of job as "inactive"
-            jobs.finishAbortJob(jobID,timestamp);
-            if (Logging.jobs.isDebugEnabled())
-            {
-              Logging.jobs.debug("Completed abort of job "+jobID);
-            }
-            break;
-          case Jobs.STATUS_ABORTINGFORRESTART:
-            // Do the restart sequence!  Log the abort here; the startup thread will log
the start.
-            jobs.startJob(jobID,null);
-            {
-              Logging.jobs.debug("Completed restart of job "+jobID);
-            }
-            break;
-          default:
-            throw new ManifoldCFException("Unexpected value for job status: "+Integer.toString(status));
-          }
-        }
-        return;
-      }
-      catch (ManifoldCFException e)
-      {
-        database.signalRollback();
-        if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT)
-        {
-          if (Logging.perf.isDebugEnabled())
-            Logging.perf.debug("Aborted finishing job aborts: "+e.getMessage());
-          sleepAmt = getRandomAmount();
-          continue;
-        }
-        throw e;
-      }
-      catch (Error e)
-      {
-        database.signalRollback();
-        throw e;
-      }
-      finally
+      // All the job's documents need to have their docpriority set to null, to clear dead
wood out of the docpriority index.
+      // See CONNECTORS-290.
+      // We do this BEFORE updating the job state.
+      jobQueue.clearDocPriorities(jobID);
+          
+      IJobDescription jobDesc = jobs.load(jobID,true);
+      modifiedJobs.add(jobDesc);
+
+      jobs.finishStopJob(jobID,timestamp);
+          
+      if (Logging.jobs.isDebugEnabled())
       {
-        database.endTransaction();
-        sleepFor(sleepAmt);
+        Logging.jobs.debug("Stopped job "+jobID);
       }
     }
   }
@@ -6287,115 +6301,83 @@ public class JobManager implements IJobM
   public void resetJobs(long currentTime, ArrayList resetJobs)
     throws ManifoldCFException
   {
-    while (true)
-    {
-      long sleepAmt = 0L;
-      database.beginTransaction();
-      try
-      {
-        // Query for all jobs that fulfill the criteria
-        // The query used to look like:
-        //
-        // SELECT id FROM jobs t0 WHERE status='D' AND NOT EXISTS(SELECT 'x' FROM jobqueue
t1 WHERE
-        //      t0.id=t1.jobid AND t1.status='P')
-        //
-        // Now, the query is broken up, for performance
+    // Query for all jobs that fulfill the criteria
+    // The query used to look like:
+    //
+    // SELECT id FROM jobs t0 WHERE status='D' AND NOT EXISTS(SELECT 'x' FROM jobqueue t1
WHERE
+    //      t0.id=t1.jobid AND t1.status='P')
+    //
+    // Now, the query is broken up, for performance
 
-        // Do the first query, getting the candidate jobs to be considered
-        StringBuilder sb = new StringBuilder("SELECT ");
-        ArrayList list = new ArrayList();
+    // Do the first query, getting the candidate jobs to be considered
+    StringBuilder sb = new StringBuilder("SELECT ");
+    ArrayList list = new ArrayList();
         
-        sb.append(jobs.idField).append(" FROM ").append(jobs.getTableName()).append(" WHERE
")
-          .append(database.buildConjunctionClause(list,new ClauseDescription[]{
-            new UnitaryClause(jobs.statusField,jobs.statusToString(jobs.STATUS_SHUTTINGDOWN))}))
-          .append(" FOR UPDATE");
+    sb.append(jobs.idField).append(" FROM ").append(jobs.getTableName()).append(" WHERE ")
+      .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+        new UnitaryClause(jobs.statusField,jobs.statusToString(jobs.STATUS_SHUTTINGDOWN))}));
             
-        IResultSet set = database.performQuery(sb.toString(),list,null,null);
+    IResultSet set = database.performQuery(sb.toString(),list,null,null);
 
-        int i = 0;
-        while (i < set.getRowCount())
-        {
-          IResultRow row = set.getRow(i++);
-          Long jobID = (Long)row.getValue(jobs.idField);
+    int i = 0;
+    while (i < set.getRowCount())
+    {
+      IResultRow row = set.getRow(i++);
+      Long jobID = (Long)row.getValue(jobs.idField);
 
-          // Check to be sure the job is a candidate for shutdown
-          sb = new StringBuilder("SELECT ");
-          list.clear();
+      // Check to be sure the job is a candidate for shutdown
+      sb = new StringBuilder("SELECT ");
+      list.clear();
           
-          sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
-            .append(database.buildConjunctionClause(list,new ClauseDescription[]{
-              new UnitaryClause(jobQueue.jobIDField,jobID),
-              new MultiClause(jobQueue.statusField,new Object[]{
-                jobQueue.statusToString(jobQueue.STATUS_PURGATORY),
-                jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED)})}))
-            .append(" ").append(database.constructOffsetLimitClause(0,1));
+      sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
+        .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+          new UnitaryClause(jobQueue.jobIDField,jobID),
+          new MultiClause(jobQueue.statusField,new Object[]{
+            jobQueue.statusToString(jobQueue.STATUS_PURGATORY),
+            jobQueue.statusToString(jobQueue.STATUS_BEINGCLEANED)})}))
+        .append(" ").append(database.constructOffsetLimitClause(0,1));
 
-          IResultSet confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
+      IResultSet confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
 
-          if (confirmSet.getRowCount() > 0)
-            continue;
+      if (confirmSet.getRowCount() > 0)
+        continue;
 
-          // The shutting-down phase is complete.  However, we need to check if there are
any outstanding
-          // PENDING or PENDINGPURGATORY records before we can decide what to do.
-          sb = new StringBuilder("SELECT ");
-          list.clear();
+      // The shutting-down phase is complete.  However, we need to check if there are any
outstanding
+      // PENDING or PENDINGPURGATORY records before we can decide what to do.
+      sb = new StringBuilder("SELECT ");
+      list.clear();
           
-          sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
-            .append(database.buildConjunctionClause(list,new ClauseDescription[]{
-              new UnitaryClause(jobQueue.jobIDField,jobID),
-              new MultiClause(jobQueue.statusField,new Object[]{
-                jobQueue.statusToString(jobQueue.STATUS_PENDING),
-                jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY)})}))
-            .append(" ").append(database.constructOffsetLimitClause(0,1));
+      sb.append(jobQueue.idField).append(" FROM ").append(jobQueue.getTableName()).append("
WHERE ")
+        .append(database.buildConjunctionClause(list,new ClauseDescription[]{
+          new UnitaryClause(jobQueue.jobIDField,jobID),
+          new MultiClause(jobQueue.statusField,new Object[]{
+            jobQueue.statusToString(jobQueue.STATUS_PENDING),
+            jobQueue.statusToString(jobQueue.STATUS_PENDINGPURGATORY)})}))
+        .append(" ").append(database.constructOffsetLimitClause(0,1));
 
-          confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
+      confirmSet = database.performQuery(sb.toString(),list,null,null,1,null);
 
-          if (confirmSet.getRowCount() > 0)
-          {
-            // This job needs to re-enter the active state.  Make that happen.
-            jobs.returnJobToActive(jobID);
-            if (Logging.jobs.isDebugEnabled())
-            {
-              Logging.jobs.debug("Job "+jobID+" is re-entering active state");
-            }
-          }
-          else
-          {
-            // This job should be marked as finished.
-            IJobDescription jobDesc = jobs.load(jobID,true);
-            resetJobs.add(jobDesc);
-            
-            // Label the job "finished"
-            jobs.finishJob(jobID,currentTime);
-            if (Logging.jobs.isDebugEnabled())
-            {
-              Logging.jobs.debug("Job "+jobID+" now completed");
-            }
-          }
-        }
-        return;
-      }
-      catch (ManifoldCFException e)
+      if (confirmSet.getRowCount() > 0)
       {
-        database.signalRollback();
-        if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT)
+        // This job needs to re-enter the active state.  Make that happen.
+        jobs.returnJobToActive(jobID);
+        if (Logging.jobs.isDebugEnabled())
         {
-          if (Logging.perf.isDebugEnabled())
-            Logging.perf.debug("Aborted resetting jobs: "+e.getMessage());
-          sleepAmt = getRandomAmount();
-          continue;
+          Logging.jobs.debug("Job "+jobID+" is re-entering active state");
         }
-        throw e;
       }
-      catch (Error e)
-      {
-        database.signalRollback();
-        throw e;
-      }
-      finally
+      else
       {
-        database.endTransaction();
-        sleepFor(sleepAmt);
+        // This job should be marked as finished.
+        IJobDescription jobDesc = jobs.load(jobID,true);
+        resetJobs.add(jobDesc);
+            
+        // Label the job "finished"
+        jobs.finishJob(jobID,currentTime);
+        if (Logging.jobs.isDebugEnabled())
+        {
+          Logging.jobs.debug("Job "+jobID+" now completed");
+        }
       }
     }
   }
@@ -6490,7 +6472,16 @@ public class JobManager implements IJobM
         Jobs.statusToString(Jobs.STATUS_ACTIVEWAIT),
         Jobs.statusToString(Jobs.STATUS_ACTIVEWAITSEEDING),
         Jobs.statusToString(Jobs.STATUS_PAUSEDWAIT),
-        Jobs.statusToString(Jobs.STATUS_PAUSEDWAITSEEDING)})});
+        Jobs.statusToString(Jobs.STATUS_PAUSEDWAITSEEDING),
+        Jobs.statusToString(Jobs.STATUS_PAUSING),
+        Jobs.statusToString(Jobs.STATUS_PAUSINGSEEDING),
+        Jobs.statusToString(Jobs.STATUS_ACTIVEWAITING),
+        Jobs.statusToString(Jobs.STATUS_ACTIVEWAITINGSEEDING),
+        Jobs.statusToString(Jobs.STATUS_PAUSINGWAITING),
+        Jobs.statusToString(Jobs.STATUS_PAUSINGWAITINGSEEDING),
+        Jobs.statusToString(Jobs.STATUS_RESUMING),
+        Jobs.statusToString(Jobs.STATUS_RESUMINGSEEDING)
+        })});
     
     return makeJobStatus(whereClause,whereParams,includeCounts);
   }
@@ -6714,6 +6705,18 @@ public class JobManager implements IJobM
       case Jobs.STATUS_ABORTINGSTARTINGUPFORRESTART:
         rstatus = JobStatus.JOBSTATUS_RESTARTING;
         break;
+      case Jobs.STATUS_PAUSING:
+      case Jobs.STATUS_PAUSINGSEEDING:
+      case Jobs.STATUS_ACTIVEWAITING:
+      case Jobs.STATUS_ACTIVEWAITINGSEEDING:
+      case Jobs.STATUS_PAUSINGWAITING:
+      case Jobs.STATUS_PAUSINGWAITINGSEEDING:
+        rstatus = JobStatus.JOBSTATUS_STOPPING;
+        break;
+      case Jobs.STATUS_RESUMING:
+      case Jobs.STATUS_RESUMINGSEEDING:
+        rstatus = JobStatus.JOBSTATUS_RESUMING;
+        break;
       case Jobs.STATUS_PAUSED:
       case Jobs.STATUS_PAUSEDSEEDING:
         rstatus = JobStatus.JOBSTATUS_PAUSED;

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=1205503&r1=1205502&r2=1205503&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
Wed Nov 23 17:31:13 2011
@@ -547,11 +547,7 @@ public class JobQueue extends org.apache
     // Delete PENDING and ACTIVE entries
     HashMap map = new HashMap();
     map.put(statusField,statusToString(STATUS_PENDINGPURGATORY));
-    // Do not reset priorities.  This means, of course, that they may be out of date - but
they are probably more accurate in their current form
-    // than being set back to some arbitrary value.
-    // The alternative, which would be to reprioritize all the documents at this point, is
somewhat attractive, but let's see if we can get away
-    // without for now.
-    //map.put(docPriorityField,new Double(1.0));
+    // Do not reset priorities here!  They should all be blank at this point.
     map.put(checkTimeField,new Long(0L));
     map.put(checkActionField,actionToString(ACTION_RESCAN));
     map.put(failTimeField,null);
@@ -633,14 +629,31 @@ public class JobQueue extends org.apache
     noteModifications(0,1,0);
   }
 
+  /** Clear all document priorities for a job */
+  public void clearDocPriorities(Long jobID)
+    throws ManifoldCFException
+  {
+    HashMap map = new HashMap();
+    map.put(prioritySetField,null);
+    map.put(docPriorityField,null);
+    ArrayList list = new ArrayList();
+    String query = buildConjunctionClause(list,new ClauseDescription[]{
+      new UnitaryClause(jobIDField,jobID)});
+    performUpdate(map,"WHERE "+query,list,null);
+    noteModifications(0,1,0);
+  }
+  
   /** Set the "completed" status for a record.
   */
   public void updateCompletedRecord(Long recID, int currentStatus)
     throws ManifoldCFException
   {
+    HashMap map = new HashMap();
+    
     int newStatus;
     String actionFieldValue;
     Long checkTimeValue;
+    
     switch (currentStatus)
     {
     case STATUS_ACTIVE:
@@ -648,27 +661,26 @@ public class JobQueue extends org.apache
       newStatus = STATUS_COMPLETE;
       actionFieldValue = null;
       checkTimeValue = null;
+      // Remove document priority; we don't want to pollute the queue.  See CONNECTORS-290.
+      map.put(docPriorityField,null);
+      map.put(prioritySetField,null);
       break;
     case STATUS_ACTIVENEEDRESCAN:
     case STATUS_ACTIVENEEDRESCANPURGATORY:
       newStatus = STATUS_PENDINGPURGATORY;
       actionFieldValue = actionToString(ACTION_RESCAN);
       checkTimeValue = new Long(0L);
+      // Leave doc priority unchanged.
       break;
     default:
       throw new ManifoldCFException("Unexpected jobqueue status - record id "+recID.toString()+",
expecting active status, saw "+Integer.toString(currentStatus));
     }
 
-    HashMap map = new HashMap();
     map.put(statusField,statusToString(newStatus));
     map.put(checkTimeField,checkTimeValue);
     map.put(checkActionField,actionFieldValue);
     map.put(failTimeField,null);
     map.put(failCountField,null);
-    // Don't rejigger document priority, because it is hard to calculate and because what's
there is probably better
-    // than any arbitrary value I'd use.
-    //map.put(docPriorityField,new Double(1.0));
-    //map.put(prioritySetField,new Long(0L));
     ArrayList list = new ArrayList();
     String query = buildConjunctionClause(list,new ClauseDescription[]{
       new UnitaryClause(idField,recID)});
@@ -705,6 +717,7 @@ public class JobQueue extends org.apache
   }
 
   /** Set the status on a record, including check time and priority.
+  * The status set MUST be a PENDING or PENDINGPURGATORY status.
   *@param id is the job queue id.
   *@param status is the desired status
   *@param checkTime is the check time.



Mime
View raw message