Author: kwright
Date: Mon Jun  9 16:10:12 2014
New Revision: 1601423

URL: http://svn.apache.org/r1601423
Log:
Handle unhandled deadlock in stuffer thread

Modified:
    
manifoldcf/branches/CONNECTORS-946/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java

Modified: 
manifoldcf/branches/CONNECTORS-946/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
URL: 
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-946/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java?rev=1601423&r1=1601422&r2=1601423&view=diff
==============================================================================
--- 
manifoldcf/branches/CONNECTORS-946/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
 (original)
+++ 
manifoldcf/branches/CONNECTORS-946/framework/pull-agent/src/main/java/org/apache/manifoldcf/crawler/jobs/JobManager.java
 Mon Jun  9 16:10:12 2014
@@ -2788,7 +2788,39 @@ public class JobManager implements IJobM
       true)).append(" ")
       .append(database.constructOffsetLimitClause(0,1,true));
 
-    IResultSet set = 
database.performQuery(sb.toString(),list,null,null,1,null);
+    IResultSet set;
+    while (true)
+    {
+      long sleepAmt = 0L;
+      database.beginTransaction();
+      try
+      {
+        set = database.performQuery(sb.toString(),list,null,null,1,null);
+        break;
+      }
+      catch (ManifoldCFException e)
+      {
+        database.signalRollback();
+        if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT)
+        {
+          if (Logging.perf.isDebugEnabled())
+            Logging.perf.debug("Aborted transaction adding document bins: 
"+e.getMessage());
+          sleepAmt = getRandomAmount();
+          continue;
+        }
+        throw e;
+      }
+      catch (Error e)
+      {
+        database.signalRollback();
+        throw e;
+      }
+      finally
+      {
+        database.endTransaction();
+      }
+    }
+
     if (set.getRowCount() > 0)
     {
       IResultRow row = set.getRow(0);


Reply via email to