You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/11/23 14:11:22 UTC

svn commit: r1715799 - in /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl: jobs/JobImpl.java jobs/queues/QueueJobCache.java support/ResourceHelper.java

Author: cziegeler
Date: Mon Nov 23 13:11:22 2015
New Revision: 1715799

URL: http://svn.apache.org/viewvc?rev=1715799&view=rev
Log:
SLING-5319 : When loading a job distinguish between fatale and recoverable error

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/QueueJobCache.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java?rev=1715799&r1=1715798&r2=1715799&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobImpl.java Mon Nov 23 13:11:22 2015
@@ -105,6 +105,22 @@ public class JobImpl implements Job, Com
     }
 
     /**
+     * Is the error recoverable?
+     */
+    public boolean isReadErrorRecoverable() {
+        boolean result = true;
+        if ( this.readErrorList != null ) {
+            for(final Exception e : this.readErrorList) {
+                if ( e instanceof RuntimeException ) {
+                    result = false;
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
      * Get all properties
      */
     public Map<String, Object> getProperties() {

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/QueueJobCache.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/QueueJobCache.java?rev=1715799&r1=1715798&r2=1715799&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/QueueJobCache.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/QueueJobCache.java Mon Nov 23 13:11:22 2015
@@ -37,6 +37,7 @@ import org.apache.sling.event.impl.jobs.
 import org.apache.sling.event.impl.jobs.Utility;
 import org.apache.sling.event.impl.jobs.config.JobManagerConfiguration;
 import org.apache.sling.event.impl.jobs.stats.StatisticsManager;
+import org.apache.sling.event.jobs.Job.JobState;
 import org.apache.sling.event.jobs.Queue;
 import org.apache.sling.event.jobs.QueueConfiguration;
 import org.apache.sling.event.jobs.QueueConfiguration.Type;
@@ -281,7 +282,13 @@ public class QueueJobCache {
                 } else {
                     // error reading job
                     scanTopic.set(true);
-                    logger.debug("Ignoring job {} due to read errors.", job);
+                    if ( job.isReadErrorRecoverable() ) {
+                        logger.debug("Ignoring job {} due to recoverable read errors.", job);
+                    } else {
+                        logger.debug("Failing job {} due to unrecoverable read errors.", job);
+                        final JobHandler handler = new JobHandler(job, null, configuration);
+                        handler.finished(JobState.ERROR, true, null);
+                    }
                 }
                 return list.size() < maxPreloadLimit;
             }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java?rev=1715799&r1=1715798&r2=1715799&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ResourceHelper.java Mon Nov 23 13:11:22 2015
@@ -210,16 +210,17 @@ public abstract class ResourceHelper {
                         if ( hasReadError == null ) {
                             hasReadError = new ArrayList<Exception>();
                         }
-                        final int count = hasReadError.size();
                         // let's find out which class might be missing
                         ObjectInputStream ois = null;
                         try {
                             ois = new ObjectInputStream((InputStream)entry.getValue());
                             ois.readObject();
+
+                            hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'"));
                         } catch (final ClassNotFoundException cnfe) {
                              hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'", cnfe));
                         } catch (final IOException ioe) {
-                            hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'", ioe));
+                            hasReadError.add(new RuntimeException("Unable to deserialize property '" + entry.getKey() + "'", ioe));
                         } finally {
                             if ( ois != null ) {
                                 try {
@@ -229,9 +230,6 @@ public abstract class ResourceHelper {
                                 }
                             }
                         }
-                        if ( hasReadError.size() == count ) {
-                            hasReadError.add(new Exception("Unable to deserialize property '" + entry.getKey() + "'"));
-                        }
                     }
                 }
             }