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 2017/10/26 18:28:15 UTC

svn commit: r1813448 - in /uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler: Machine.java NodePool.java NodepoolScheduler.java

Author: burn
Date: Thu Oct 26 18:28:15 2017
New Revision: 1813448

URL: http://svn.apache.org/viewvc?rev=1813448&view=rev
Log:
UIMA-5605 Set free space correctly when a machine size changes

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

Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java?rev=1813448&r1=1813447&r2=1813448&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java Thu Oct 26 18:28:15 2017
@@ -320,7 +320,26 @@ public class Machine
         this.shares_left = share_order;
         resetVirtualShareOrder();             // UIMA-4142 use common code to calculate this
     }
+    
+    public void updateShareOrder(int o)
+    {
+      String methodName = "updateShareOrder";
+      
+      // Check count of in-use shares and free shares
+      int in_use = blacklisted_shares;
+      for ( Share s : activeShares.values() ) {
+          in_use += s.getShareOrder();
+      }
+      if (in_use + shares_left != share_order) {
+        logger.warn(methodName, null, id, "ERROR -", shares_left, "free plus", in_use, "in use doesn't match old share order of", share_order);
+      }
+      logger.info(methodName, null, id, "Size has changed from", share_order, "to", o, "so changed free shares from", shares_left, "to", o-in_use);
 
+      share_order = o;
+      shares_left = share_order - in_use;
+      resetVirtualShareOrder();             // UIMA-4142 use common code to calculate this
+    }
+    
     public void setVirtualShareOrder(int o)
     {
         this.virtual_share_order = o; 

Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java?rev=1813448&r1=1813447&r2=1813448&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java Thu Oct 26 18:28:15 2017
@@ -1058,7 +1058,7 @@ class NodePool
         if ( oldorder != neworder ) {                  // can change. e.g. if it was taken offline for
             HashMap<Node, Machine> mlist = machinesByOrder.get(oldorder);
             mlist.remove(m.key());
-            m.setShareOrder(neworder);                          //    hardware changes.
+            m.updateShareOrder(neworder);                       // UIMA-5605 Correct shares_left when size changes
             signalDb(m, RmNodes.ShareOrder, neworder);          // Jira 4913 Update DB so ducc-mon can show the current size
             mlist = machinesByOrder.get(neworder);
             if ( mlist == null ) {

Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java?rev=1813448&r1=1813447&r2=1813448&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java Thu Oct 26 18:28:15 2017
@@ -2411,13 +2411,17 @@ public class NodepoolScheduler
 
             Map<Node, Machine> machs = np.getAllMachinesForPool();
             for ( Machine m : machs.values() ) {
-
                 int free = m.countFreedUpShares();                           // free space plus evicted shares - eventual space
                 if ( free != 0 ) {
-                    logger.trace(methodName, null, "Freed shares", free, "on machine", m.getId());
+                    logger.trace(methodName, null, "Freed shares", free, "on machine", m.getId(), "in nodepool", np.getId());
                     for ( NodePool npj = np; npj != null; npj = npj.getParent() ) {        // must propogate up because of how these tables work
                         String id_j = npj.getId();
                         int[] vmach_j = vshares.get(id_j);
+                        if (free >= vmach_j.length) {               // UIMA-5605 Avoid out-of-bounds exception
+                          logger.warn(methodName, null, "Nodepool",id_j,"has a maximum size of", vmach_j.length-1, 
+                                  "but the computed free space is", free);
+                          free = vmach_j.length - 1;
+                        }
                         logger.trace(methodName, null, "Update v before: NP[", id_j, "] v:", fmtArray(vmach_j));
                         vmach_j[free]++;                                         // This is the largest potential share that can be made on this machine,
                         // after evictions starting 'here' and propogating up