Return-Path: X-Original-To: apmail-incubator-connectors-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-connectors-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 251CC9683 for ; Sat, 12 May 2012 07:09:10 +0000 (UTC) Received: (qmail 72228 invoked by uid 500); 12 May 2012 07:09:09 -0000 Delivered-To: apmail-incubator-connectors-commits-archive@incubator.apache.org Received: (qmail 72151 invoked by uid 500); 12 May 2012 07:09:08 -0000 Mailing-List: contact connectors-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: connectors-dev@incubator.apache.org Delivered-To: mailing list connectors-commits@incubator.apache.org Received: (qmail 72124 invoked by uid 99); 12 May 2012 07:09:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 May 2012 07:09:07 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 12 May 2012 07:09:05 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 9B2F82388865; Sat, 12 May 2012 07:08:45 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: svn commit: r1337457 - in /incubator/lcf/branches/release-0.5-incubating-branch: ./ framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/ Date: Sat, 12 May 2012 07:08:45 -0000 To: connectors-commits@incubator.apache.org From: kwright@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120512070845.9B2F82388865@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kwright Date: Sat May 12 07:08:44 2012 New Revision: 1337457 URL: http://svn.apache.org/viewvc?rev=1337457&view=rev Log: Pull up fix for CONNECTORS-453 from trunk. Modified: incubator/lcf/branches/release-0.5-incubating-branch/ (props changed) incubator/lcf/branches/release-0.5-incubating-branch/CHANGES.txt incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java Propchange: incubator/lcf/branches/release-0.5-incubating-branch/ ------------------------------------------------------------------------------ Merged /incubator/lcf/trunk:r1331102 Modified: incubator/lcf/branches/release-0.5-incubating-branch/CHANGES.txt URL: http://svn.apache.org/viewvc/incubator/lcf/branches/release-0.5-incubating-branch/CHANGES.txt?rev=1337457&r1=1337456&r2=1337457&view=diff ============================================================================== --- incubator/lcf/branches/release-0.5-incubating-branch/CHANGES.txt (original) +++ incubator/lcf/branches/release-0.5-incubating-branch/CHANGES.txt Sat May 12 07:08:44 2012 @@ -9,6 +9,10 @@ CONNECTORS-471: Replace broken HSQLDB 2. CONNECTORS-467: Remove outdated taglib directives in web.xml (Erlend GarĂ¥sen) +CONNECTORS-453: Getting deadlock problems and other issues with +Derby 10.8.1.1. +(Karl Wright) + ======================= Release 0.5 ========================= CONNECTORS-457: Fix for i18n problem with unknown locale picking up Modified: incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java URL: http://svn.apache.org/viewvc/incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java?rev=1337457&r1=1337456&r2=1337457&view=diff ============================================================================== --- incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java (original) +++ incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java Sat May 12 07:08:44 2012 @@ -5188,7 +5188,39 @@ public class JobManager implements IJobM { Logging.jobs.debug("Manually aborting job "+jobID); } - jobs.abortJob(jobID,null); + while (true) + { + long sleepAmt = 0L; + database.beginTransaction(); + try + { + jobs.abortJob(jobID,null); + database.performCommit(); + break; + } + catch (ManifoldCFException e) + { + database.signalRollback(); + if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) + { + if (Logging.perf.isDebugEnabled()) + Logging.perf.debug("Aborted transaction aborting job: "+e.getMessage()); + sleepAmt = getRandomAmount(); + continue; + } + throw e; + } + catch (Error e) + { + database.signalRollback(); + throw e; + } + finally + { + database.endTransaction(); + sleepFor(sleepAmt); + } + } if (Logging.jobs.isDebugEnabled()) { Logging.jobs.debug("Job "+jobID+" abort signal successfully sent"); @@ -5206,7 +5238,39 @@ public class JobManager implements IJobM { Logging.jobs.debug("Manually restarting job "+jobID); } - jobs.abortRestartJob(jobID); + while (true) + { + long sleepAmt = 0L; + database.beginTransaction(); + try + { + jobs.abortRestartJob(jobID); + database.performCommit(); + break; + } + catch (ManifoldCFException e) + { + database.signalRollback(); + if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) + { + if (Logging.perf.isDebugEnabled()) + Logging.perf.debug("Aborted transaction restarting job: "+e.getMessage()); + sleepAmt = getRandomAmount(); + continue; + } + throw e; + } + catch (Error e) + { + database.signalRollback(); + throw e; + } + finally + { + database.endTransaction(); + sleepFor(sleepAmt); + } + } if (Logging.jobs.isDebugEnabled()) { Logging.jobs.debug("Job "+jobID+" restart signal successfully sent"); @@ -5227,7 +5291,40 @@ public class JobManager implements IJobM { Logging.jobs.debug("Aborting job "+jobID+" due to error '"+errorText+"'"); } - boolean rval = jobs.abortJob(jobID,errorText); + boolean rval; + while (true) + { + long sleepAmt = 0L; + database.beginTransaction(); + try + { + rval = jobs.abortJob(jobID,errorText); + database.performCommit(); + break; + } + catch (ManifoldCFException e) + { + database.signalRollback(); + if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) + { + if (Logging.perf.isDebugEnabled()) + Logging.perf.debug("Aborted transaction aborting job: "+e.getMessage()); + sleepAmt = getRandomAmount(); + continue; + } + throw e; + } + catch (Error e) + { + database.signalRollback(); + throw e; + } + finally + { + database.endTransaction(); + sleepFor(sleepAmt); + } + } if (rval && Logging.jobs.isDebugEnabled()) { Logging.jobs.debug("Job "+jobID+" abort signal successfully sent"); @@ -5245,7 +5342,40 @@ public class JobManager implements IJobM { Logging.jobs.debug("Manually pausing job "+jobID); } - jobs.pauseJob(jobID); + while (true) + { + long sleepAmt = 0L; + database.beginTransaction(); + try + { + jobs.pauseJob(jobID); + database.performCommit(); + break; + } + catch (ManifoldCFException e) + { + database.signalRollback(); + if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) + { + if (Logging.perf.isDebugEnabled()) + Logging.perf.debug("Aborted transaction pausing job: "+e.getMessage()); + sleepAmt = getRandomAmount(); + continue; + } + throw e; + } + catch (Error e) + { + database.signalRollback(); + throw e; + } + finally + { + database.endTransaction(); + sleepFor(sleepAmt); + } + } + if (Logging.jobs.isDebugEnabled()) { Logging.jobs.debug("Job "+jobID+" successfully paused"); @@ -5263,26 +5393,39 @@ public class JobManager implements IJobM { Logging.jobs.debug("Manually restarting paused job "+jobID); } - - database.beginTransaction(); - try - { - jobs.restartJob(jobID); - jobQueue.clearFailTimes(jobID); - } - catch (ManifoldCFException e) - { - database.signalRollback(); - throw e; - } - catch (Error e) - { - database.signalRollback(); - throw e; - } - finally + while (true) { - database.endTransaction(); + long sleepAmt = 0L; + database.beginTransaction(); + try + { + jobs.restartJob(jobID); + jobQueue.clearFailTimes(jobID); + database.performCommit(); + break; + } + catch (ManifoldCFException e) + { + database.signalRollback(); + if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) + { + if (Logging.perf.isDebugEnabled()) + Logging.perf.debug("Aborted transaction restarting pausing job: "+e.getMessage()); + sleepAmt = getRandomAmount(); + continue; + } + throw e; + } + catch (Error e) + { + database.signalRollback(); + throw e; + } + finally + { + database.endTransaction(); + sleepFor(sleepAmt); + } } if (Logging.jobs.isDebugEnabled()) Modified: incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java URL: http://svn.apache.org/viewvc/incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java?rev=1337457&r1=1337456&r2=1337457&view=diff ============================================================================== --- incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java (original) +++ incubator/lcf/branches/release-0.5-incubating-branch/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/Jobs.java Sat May 12 07:08:44 2012 @@ -1656,79 +1656,61 @@ public class Jobs extends org.apache.man public boolean abortJob(Long jobID, String errorText) throws ManifoldCFException { - beginTransaction(); - try - { - // Get the current job status - ArrayList list = new ArrayList(); - String query = buildConjunctionClause(list,new ClauseDescription[]{ - new UnitaryClause(idField,jobID)}); - IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ - " WHERE "+query+" FOR UPDATE",list,null,null); - if (set.getRowCount() == 0) - throw new ManifoldCFException("Job does not exist: "+jobID); - IResultRow row = set.getRow(0); - int status = stringToStatus(row.getValue(statusField).toString()); - if (status == STATUS_ABORTING || status == STATUS_ABORTINGSEEDING || status == STATUS_ABORTINGSTARTINGUP) - return false; - int newStatus; - switch (status) - { - case STATUS_STARTINGUP: - case STATUS_ABORTINGSTARTINGUPFORRESTART: - newStatus = STATUS_ABORTINGSTARTINGUP; - break; - case STATUS_READYFORSTARTUP: - case STATUS_ACTIVE: - case STATUS_ACTIVE_UNINSTALLED: - case STATUS_ACTIVE_NOOUTPUT: - case STATUS_ACTIVE_NEITHER: - case STATUS_ACTIVEWAIT: - case STATUS_PAUSING: - case STATUS_ACTIVEWAITING: - case STATUS_PAUSINGWAITING: - case STATUS_PAUSED: - case STATUS_PAUSEDWAIT: - case STATUS_ABORTINGFORRESTART: - newStatus = STATUS_ABORTING; - break; - case STATUS_ACTIVESEEDING: - case STATUS_ACTIVESEEDING_UNINSTALLED: - case STATUS_ACTIVESEEDING_NOOUTPUT: - case STATUS_ACTIVESEEDING_NEITHER: - case STATUS_ACTIVEWAITSEEDING: - case STATUS_PAUSINGSEEDING: - case STATUS_ACTIVEWAITINGSEEDING: - case STATUS_PAUSINGWAITINGSEEDING: - case STATUS_PAUSEDSEEDING: - case STATUS_PAUSEDWAITSEEDING: - case STATUS_ABORTINGFORRESTARTSEEDING: - newStatus = STATUS_ABORTINGSEEDING; - break; - default: - throw new ManifoldCFException("Job "+jobID+" is not active"); - } - // Pause the job - HashMap map = new HashMap(); - map.put(statusField,statusToString(newStatus)); - map.put(errorField,errorText); - performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); - return true; - } - catch (ManifoldCFException e) - { - signalRollback(); - throw e; - } - catch (Error e) - { - signalRollback(); - throw e; - } - finally + // Get the current job status + ArrayList list = new ArrayList(); + String query = buildConjunctionClause(list,new ClauseDescription[]{ + new UnitaryClause(idField,jobID)}); + IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ + " WHERE "+query+" FOR UPDATE",list,null,null); + if (set.getRowCount() == 0) + throw new ManifoldCFException("Job does not exist: "+jobID); + IResultRow row = set.getRow(0); + int status = stringToStatus(row.getValue(statusField).toString()); + if (status == STATUS_ABORTING || status == STATUS_ABORTINGSEEDING || status == STATUS_ABORTINGSTARTINGUP) + return false; + int newStatus; + switch (status) { - endTransaction(); + case STATUS_STARTINGUP: + case STATUS_ABORTINGSTARTINGUPFORRESTART: + newStatus = STATUS_ABORTINGSTARTINGUP; + break; + case STATUS_READYFORSTARTUP: + case STATUS_ACTIVE: + case STATUS_ACTIVE_UNINSTALLED: + case STATUS_ACTIVE_NOOUTPUT: + case STATUS_ACTIVE_NEITHER: + case STATUS_ACTIVEWAIT: + case STATUS_PAUSING: + case STATUS_ACTIVEWAITING: + case STATUS_PAUSINGWAITING: + case STATUS_PAUSED: + case STATUS_PAUSEDWAIT: + case STATUS_ABORTINGFORRESTART: + newStatus = STATUS_ABORTING; + break; + case STATUS_ACTIVESEEDING: + case STATUS_ACTIVESEEDING_UNINSTALLED: + case STATUS_ACTIVESEEDING_NOOUTPUT: + case STATUS_ACTIVESEEDING_NEITHER: + case STATUS_ACTIVEWAITSEEDING: + case STATUS_PAUSINGSEEDING: + case STATUS_ACTIVEWAITINGSEEDING: + case STATUS_PAUSINGWAITINGSEEDING: + case STATUS_PAUSEDSEEDING: + case STATUS_PAUSEDWAITSEEDING: + case STATUS_ABORTINGFORRESTARTSEEDING: + newStatus = STATUS_ABORTINGSEEDING; + break; + default: + throw new ManifoldCFException("Job "+jobID+" is not active"); } + // Pause the job + HashMap map = new HashMap(); + map.put(statusField,statusToString(newStatus)); + map.put(errorField,errorText); + performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); + return true; } /** Restart a job. Finish off what's currently happening, and then start the job up again. @@ -1737,74 +1719,56 @@ public class Jobs extends org.apache.man public void abortRestartJob(Long jobID) throws ManifoldCFException { - beginTransaction(); - try - { - // Get the current job status - ArrayList list = new ArrayList(); - String query = buildConjunctionClause(list,new ClauseDescription[]{ - new UnitaryClause(idField,jobID)}); - IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ - " WHERE "+query+" FOR UPDATE",list,null,null); - if (set.getRowCount() == 0) - throw new ManifoldCFException("Job does not exist: "+jobID); - IResultRow row = set.getRow(0); - int status = stringToStatus(row.getValue(statusField).toString()); - if (status == STATUS_ABORTINGFORRESTART || status == STATUS_ABORTINGFORRESTARTSEEDING || status == STATUS_ABORTINGSTARTINGUPFORRESTART) - return; - int newStatus; - switch (status) - { - case STATUS_STARTINGUP: - newStatus = STATUS_ABORTINGSTARTINGUPFORRESTART; - break; - case STATUS_READYFORSTARTUP: - case STATUS_ACTIVE: - case STATUS_ACTIVE_UNINSTALLED: - case STATUS_ACTIVE_NOOUTPUT: - case STATUS_ACTIVE_NEITHER: - case STATUS_ACTIVEWAIT: - case STATUS_PAUSING: - case STATUS_ACTIVEWAITING: - case STATUS_PAUSINGWAITING: - case STATUS_PAUSED: - case STATUS_PAUSEDWAIT: - newStatus = STATUS_ABORTINGFORRESTART; - break; - case STATUS_ACTIVESEEDING: - case STATUS_ACTIVESEEDING_UNINSTALLED: - case STATUS_ACTIVESEEDING_NOOUTPUT: - case STATUS_ACTIVESEEDING_NEITHER: - case STATUS_ACTIVEWAITSEEDING: - case STATUS_PAUSINGSEEDING: - case STATUS_ACTIVEWAITINGSEEDING: - case STATUS_PAUSINGWAITINGSEEDING: - case STATUS_PAUSEDSEEDING: - case STATUS_PAUSEDWAITSEEDING: - newStatus = STATUS_ABORTINGFORRESTARTSEEDING; - break; - default: - throw new ManifoldCFException("Job "+jobID+" is not restartable"); - } - // reset the job - HashMap map = new HashMap(); - map.put(statusField,statusToString(newStatus)); - performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); - } - catch (ManifoldCFException e) - { - signalRollback(); - throw e; - } - catch (Error e) - { - signalRollback(); - throw e; - } - finally + // Get the current job status + ArrayList list = new ArrayList(); + String query = buildConjunctionClause(list,new ClauseDescription[]{ + new UnitaryClause(idField,jobID)}); + IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ + " WHERE "+query+" FOR UPDATE",list,null,null); + if (set.getRowCount() == 0) + throw new ManifoldCFException("Job does not exist: "+jobID); + IResultRow row = set.getRow(0); + int status = stringToStatus(row.getValue(statusField).toString()); + if (status == STATUS_ABORTINGFORRESTART || status == STATUS_ABORTINGFORRESTARTSEEDING || status == STATUS_ABORTINGSTARTINGUPFORRESTART) + return; + int newStatus; + switch (status) { - endTransaction(); + case STATUS_STARTINGUP: + newStatus = STATUS_ABORTINGSTARTINGUPFORRESTART; + break; + case STATUS_READYFORSTARTUP: + case STATUS_ACTIVE: + case STATUS_ACTIVE_UNINSTALLED: + case STATUS_ACTIVE_NOOUTPUT: + case STATUS_ACTIVE_NEITHER: + case STATUS_ACTIVEWAIT: + case STATUS_PAUSING: + case STATUS_ACTIVEWAITING: + case STATUS_PAUSINGWAITING: + case STATUS_PAUSED: + case STATUS_PAUSEDWAIT: + newStatus = STATUS_ABORTINGFORRESTART; + break; + case STATUS_ACTIVESEEDING: + case STATUS_ACTIVESEEDING_UNINSTALLED: + case STATUS_ACTIVESEEDING_NOOUTPUT: + case STATUS_ACTIVESEEDING_NEITHER: + case STATUS_ACTIVEWAITSEEDING: + case STATUS_PAUSINGSEEDING: + case STATUS_ACTIVEWAITINGSEEDING: + case STATUS_PAUSINGWAITINGSEEDING: + case STATUS_PAUSEDSEEDING: + case STATUS_PAUSEDWAITSEEDING: + newStatus = STATUS_ABORTINGFORRESTARTSEEDING; + break; + default: + throw new ManifoldCFException("Job "+jobID+" is not restartable"); } + // reset the job + HashMap map = new HashMap(); + map.put(statusField,statusToString(newStatus)); + performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); } /** Pause a job. @@ -1813,68 +1777,50 @@ public class Jobs extends org.apache.man public void pauseJob(Long jobID) throws ManifoldCFException { - beginTransaction(); - try - { - // Get the current job status - ArrayList list = new ArrayList(); - String query = buildConjunctionClause(list,new ClauseDescription[]{ - new UnitaryClause(idField,jobID)}); - IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ - " WHERE "+query+" FOR UPDATE",list,null,null); - if (set.getRowCount() == 0) - throw new ManifoldCFException("Job does not exist: "+jobID); - IResultRow row = set.getRow(0); - int status = stringToStatus(row.getValue(statusField).toString()); - int newStatus; - switch (status) - { - case STATUS_ACTIVE: - case STATUS_ACTIVE_UNINSTALLED: - case STATUS_ACTIVE_NOOUTPUT: - case STATUS_ACTIVE_NEITHER: - newStatus = STATUS_PAUSING; - break; - case STATUS_ACTIVEWAITING: - newStatus = STATUS_PAUSINGWAITING; - break; - case STATUS_ACTIVEWAIT: - newStatus = STATUS_PAUSEDWAIT; - break; - case STATUS_ACTIVESEEDING: - case STATUS_ACTIVESEEDING_UNINSTALLED: - case STATUS_ACTIVESEEDING_NOOUTPUT: - case STATUS_ACTIVESEEDING_NEITHER: - newStatus = STATUS_PAUSINGSEEDING; - break; - case STATUS_ACTIVEWAITINGSEEDING: - newStatus = STATUS_PAUSINGWAITINGSEEDING; - break; - case STATUS_ACTIVEWAITSEEDING: - newStatus = STATUS_PAUSEDWAITSEEDING; - break; - default: - throw new ManifoldCFException("Job "+jobID+" is not active"); - } - // Pause the job - HashMap map = new HashMap(); - map.put(statusField,statusToString(newStatus)); - performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); - } - catch (ManifoldCFException e) - { - signalRollback(); - throw e; - } - catch (Error e) - { - signalRollback(); - throw e; - } - finally + // Get the current job status + ArrayList list = new ArrayList(); + String query = buildConjunctionClause(list,new ClauseDescription[]{ + new UnitaryClause(idField,jobID)}); + IResultSet set = performQuery("SELECT "+statusField+" FROM "+getTableName()+ + " WHERE "+query+" FOR UPDATE",list,null,null); + if (set.getRowCount() == 0) + throw new ManifoldCFException("Job does not exist: "+jobID); + IResultRow row = set.getRow(0); + int status = stringToStatus(row.getValue(statusField).toString()); + int newStatus; + switch (status) { - endTransaction(); + case STATUS_ACTIVE: + case STATUS_ACTIVE_UNINSTALLED: + case STATUS_ACTIVE_NOOUTPUT: + case STATUS_ACTIVE_NEITHER: + newStatus = STATUS_PAUSING; + break; + case STATUS_ACTIVEWAITING: + newStatus = STATUS_PAUSINGWAITING; + break; + case STATUS_ACTIVEWAIT: + newStatus = STATUS_PAUSEDWAIT; + break; + case STATUS_ACTIVESEEDING: + case STATUS_ACTIVESEEDING_UNINSTALLED: + case STATUS_ACTIVESEEDING_NOOUTPUT: + case STATUS_ACTIVESEEDING_NEITHER: + newStatus = STATUS_PAUSINGSEEDING; + break; + case STATUS_ACTIVEWAITINGSEEDING: + newStatus = STATUS_PAUSINGWAITINGSEEDING; + break; + case STATUS_ACTIVEWAITSEEDING: + newStatus = STATUS_PAUSEDWAITSEEDING; + break; + default: + throw new ManifoldCFException("Job "+jobID+" is not active"); } + // Pause the job + HashMap map = new HashMap(); + map.put(statusField,statusToString(newStatus)); + performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); } /** Restart a job. @@ -1883,58 +1829,40 @@ public class Jobs extends org.apache.man public void restartJob(Long jobID) throws ManifoldCFException { - beginTransaction(); - try - { - // Get the current job status - ArrayList list = new ArrayList(); - String query = buildConjunctionClause(list,new ClauseDescription[]{ - new UnitaryClause(idField,jobID)}); - IResultSet set = performQuery("SELECT "+statusField+","+connectionNameField+","+outputNameField+" FROM "+getTableName()+ - " WHERE "+query+" FOR UPDATE",list,null,null); - if (set.getRowCount() == 0) - throw new ManifoldCFException("Job does not exist: "+jobID); - IResultRow row = set.getRow(0); - int status = stringToStatus(row.getValue(statusField).toString()); - String connectionName = (String)row.getValue(connectionNameField); - String outputName = (String)row.getValue(outputNameField); - int newStatus; - switch (status) - { - case STATUS_PAUSED: - newStatus = STATUS_RESUMING; - break; - case STATUS_PAUSEDWAIT: - newStatus = STATUS_ACTIVEWAIT; - break; - case STATUS_PAUSEDSEEDING: - newStatus = STATUS_RESUMINGSEEDING; - break; - case STATUS_PAUSEDWAITSEEDING: - newStatus = STATUS_ACTIVEWAITSEEDING; - break; - default: - throw new ManifoldCFException("Job "+jobID+" is not paused"); - } - // Pause the job - HashMap map = new HashMap(); - map.put(statusField,statusToString(newStatus)); - performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); - } - catch (ManifoldCFException e) - { - signalRollback(); - throw e; - } - catch (Error e) - { - signalRollback(); - throw e; - } - finally + // Get the current job status + ArrayList list = new ArrayList(); + String query = buildConjunctionClause(list,new ClauseDescription[]{ + new UnitaryClause(idField,jobID)}); + IResultSet set = performQuery("SELECT "+statusField+","+connectionNameField+","+outputNameField+" FROM "+getTableName()+ + " WHERE "+query+" FOR UPDATE",list,null,null); + if (set.getRowCount() == 0) + throw new ManifoldCFException("Job does not exist: "+jobID); + IResultRow row = set.getRow(0); + int status = stringToStatus(row.getValue(statusField).toString()); + String connectionName = (String)row.getValue(connectionNameField); + String outputName = (String)row.getValue(outputNameField); + int newStatus; + switch (status) { - endTransaction(); + case STATUS_PAUSED: + newStatus = STATUS_RESUMING; + break; + case STATUS_PAUSEDWAIT: + newStatus = STATUS_ACTIVEWAIT; + break; + case STATUS_PAUSEDSEEDING: + newStatus = STATUS_RESUMINGSEEDING; + break; + case STATUS_PAUSEDWAITSEEDING: + newStatus = STATUS_ACTIVEWAITSEEDING; + break; + default: + throw new ManifoldCFException("Job "+jobID+" is not paused"); } + // Pause the job + HashMap map = new HashMap(); + map.put(statusField,statusToString(newStatus)); + performUpdate(map,"WHERE "+query,list,new StringSet(getJobStatusKey())); } /** Update a job's status, and its reseed time.