You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2016/05/17 15:01:29 UTC

svn commit: r1744285 - /uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java

Author: burn
Date: Tue May 17 15:01:28 2016
New Revision: 1744285

URL: http://svn.apache.org/viewvc?rev=1744285&view=rev
Log:
UIMA-4913 Set free-space 0 if node appears over-committed, or under-committed with a RESERVE

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java?rev=1744285&r1=1744284&r2=1744285&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java Tue May 17 15:01:28 2016
@@ -125,7 +125,7 @@ class NodePool
         this.evictionPolicy = ep;
         this.depth = depth;
         this.search_order = search_order;
-        this.share_quantum = share_quantum;
+        this.share_quantum = share_quantum;              // in KB
 
         if ( parent == null ) {
             maxorder = new GlobalOrder();
@@ -741,11 +741,11 @@ class NodePool
         logger.info(methodName, j.getId(), "share", s,  "order", order, "machine", m);
         j.assignShare(s);
         m.assignShare(s);
-        rearrangeVirtual(m, order);
+        rearrangeVirtual(m, order, j.getSchedulingPolicy());
         allShares.put(s, s);        
     }
 
-    void rearrangeVirtual(Machine m, int order)
+    void rearrangeVirtual(Machine m, int order, Policy policy)
          
     {
     	String methodName = "rearrangeVirtual";
@@ -753,6 +753,18 @@ class NodePool
             int v_order = m.getVirtualShareOrder();
             int r_order = m.getShareOrder();
 
+            // UIMA-4913 Avoid index-outta-bounds when a machine's size changes
+            // If Share appears bigger than remaining free-space pretend the share is smaller,
+            // or if share is smaller but is a whole machine reservation, then pretend the
+            // reservation matches the machine, so in both cases the free space = 0
+            if (order > v_order) {
+                logger.warn(methodName, null, m.getId(), "found a share of size", order, "on a machine with only", v_order, "free slots - set free=0");
+                order = v_order;
+            } else if (order < v_order && policy == Policy.RESERVE){
+                logger.warn(methodName, null, m.getId(), "found a RESERVE share of size", order, "on a machine with", v_order, "free slots - set free=0");
+                order = v_order;
+            }
+
             logger.trace(methodName, null, m.getId(), "order", order, "v_order", v_order, "r_order", r_order);
 
             if ( v_order == r_order ) {
@@ -788,7 +800,7 @@ class NodePool
             calcNSharesByOrder();
         } else {
             for ( NodePool np : children.values() ) {
-                np.rearrangeVirtual(m, order);
+                np.rearrangeVirtual(m, order, policy);
             }
         }
     }
@@ -801,7 +813,8 @@ class NodePool
         for ( Share s : shares.values() ) {
             int order = s.getShareOrder();
             Machine m = s.getMachine();
-            rearrangeVirtual(m, order);
+            Policy policy = s.getJob().getSchedulingPolicy();
+            rearrangeVirtual(m, order, policy);
         }
     }