Repository: incubator-slider
Updated Branches:
  refs/heads/develop 213fd9e8f -> 39a6fc4d4


SLIDER-793 web status says "waiting for -1 containers"


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/39a6fc4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/39a6fc4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/39a6fc4d

Branch: refs/heads/develop
Commit: 39a6fc4d4b3f6839b2f84336b6bfe1c8abf6c77a
Parents: 213fd9e
Author: Steve Loughran <[email protected]>
Authored: Wed Feb 25 18:30:40 2015 -0800
Committer: Steve Loughran <[email protected]>
Committed: Wed Feb 25 18:30:40 2015 -0800

----------------------------------------------------------------------
 .../slider/server/appmaster/state/AppState.java | 34 ++++++++++++++++----
 1 file changed, 28 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/39a6fc4d/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
index 4652701..70b967d 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
@@ -46,7 +46,6 @@ import org.apache.slider.api.InternalKeys;
 import org.apache.slider.api.ResourceKeys;
 import org.apache.slider.api.RoleKeys;
 import org.apache.slider.api.StatusKeys;
-import org.apache.slider.api.proto.Messages;
 import org.apache.slider.api.types.ApplicationLivenessInformation;
 import org.apache.slider.api.types.ComponentInformation;
 import org.apache.slider.common.SliderExitCodes;
@@ -1228,18 +1227,39 @@ public class AppState {
    */
   protected void incrementRequestCount(RoleStatus role) {
     role.incRequested();
-    outstandingContainerRequests.inc();
+    incOutstandingContainerRequests();
   }
 
+
   /**
    * dec requested count of a role
    * <p>
-   *   Also updates application state counters
+   *   Also updates application state counters.
    * @param role role to decrement
    */
-  protected void decrementRequestCount(RoleStatus role) {
+  protected synchronized void decrementRequestCount(RoleStatus role) {
     role.decRequested();
-    outstandingContainerRequests.dec();
+  }
+
+  /**
+   * Inc #of outstanding requests.
+   */
+  private void incOutstandingContainerRequests() {
+    synchronized (outstandingContainerRequests) {
+      outstandingContainerRequests.inc();
+    }
+  }
+
+  /**
+   * Decrement the number of outstanding requests. This never goes below zero.
+   */
+  private void decOutstandingContainerRequests() {
+    synchronized (outstandingContainerRequests) {
+      if (outstandingContainerRequests.getCount() > 0) {
+        // decrement but never go below zero
+        outstandingContainerRequests.dec();
+      }
+    }
   }
 
 
@@ -1699,7 +1719,7 @@ public class AppState {
     ApplicationLivenessInformation li = new ApplicationLivenessInformation();
     int outstanding = (int) outstandingContainerRequests.getCount();
     li.requestsOutstanding = outstanding;
-    li.allRequestsSatisfied = outstanding == 0;
+    li.allRequestsSatisfied = outstanding <= 0;
     return li;
   }
   
@@ -2091,6 +2111,8 @@ public class AppState {
         role.decActual();
       } else {
 
+        // this is valid, so decrement the number of outstanding requests
+        decOutstandingContainerRequests();
         String roleName = role.getName();
         log.info("Assigning role {} to container" +
                  " {}," +

Reply via email to