brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sjcorb...@apache.org
Subject [2/8] incubator-brooklyn git commit: Don't fail on startup in case of an isRunning exception
Date Mon, 11 May 2015 13:32:55 GMT
Don't fail on startup in case of an isRunning exception

During entity startup treat isRunning exceptions as temporary failures and wait until timeout,
don't propagate them on the spot. Could be caused by a temporary problem, for example connectivity
issues.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/5a4e83a2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/5a4e83a2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/5a4e83a2

Branch: refs/heads/master
Commit: 5a4e83a2604b7f03f679690006517f8189732aa3
Parents: d8a9a6f
Author: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
Authored: Mon May 4 15:27:35 2015 +0300
Committer: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
Committed: Tue May 5 18:40:30 2015 +0300

----------------------------------------------------------------------
 .../entity/basic/SoftwareProcessImpl.java       | 24 +++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5a4e83a2/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
index ce28efd..eedc546 100644
--- a/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/basic/SoftwareProcessImpl.java
@@ -494,17 +494,26 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements
Soft
         CountdownTimer timer = startTimeout.countdownTimer();
         boolean isRunningResult = false;
         long delay = 100;
+        Exception firstFailure = null;
         while (!isRunningResult && !timer.isExpired()) {
             Time.sleep(delay);
             try {
                 isRunningResult = driver.isRunning();
+                if (log.isDebugEnabled()) log.debug("checked {}, 'is running' returned: {}",
this, isRunningResult);
             } catch (Exception  e) {
-                ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
-                // provide extra context info, as we're seeing this happen in strange circumstances
-                if (driver==null) throw new IllegalStateException(this+" concurrent start
and shutdown detected");
-                throw new IllegalStateException("Error detecting whether "+this+" is running:
"+e, e);
+                Exceptions.propagateIfFatal(e);
+
+                isRunningResult = false;
+                if (driver != null) {
+                    log.error("checked " + this + ", 'is running' threw an exception", e);
+                } else {
+                    // provide extra context info, as we're seeing this happen in strange
circumstances
+                    log.error(this+" concurrent start and shutdown detected", e);
+                }
+                if (firstFailure == null) {
+                    firstFailure = e;
+                }
             }
-            if (log.isDebugEnabled()) log.debug("checked {}, is running returned: {}", this,
isRunningResult);
             // slow exponential delay -- 1.1^N means after 40 tries and 50s elapsed, it reaches
the max of 5s intervals
             // TODO use Repeater 
             delay = Math.min(delay*11/10, 5000);
@@ -512,9 +521,12 @@ public abstract class SoftwareProcessImpl extends AbstractEntity implements
Soft
         if (!isRunningResult) {
             String msg = "Software process entity "+this+" did not pass is-running check
within "+
                     "the required "+startTimeout+" limit ("+timer.getDurationElapsed().toStringRounded()+"
elapsed)";
+            if (firstFailure != null) {
+                msg += "; check failed with exception: " + firstFailure.getMessage();
+            }
             log.warn(msg+" (throwing)");
             ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
-            throw new IllegalStateException(msg);
+            throw new IllegalStateException(msg, firstFailure);
         }
     }
 


Mime
View raw message