You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2013/09/29 16:45:18 UTC

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

Author: challngr
Date: Sun Sep 29 14:45:18 2013
New Revision: 1527329

URL: http://svn.apache.org/r1527329
Log:
UIMA-3316 Correct the code that counts-out shares during the 'how-much' phase of scheduling.

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=1527329&r1=1527328&r2=1527329&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 Sun Sep 29 14:45:18 2013
@@ -862,45 +862,43 @@ class NodePool
      */
     int countOutNSharesByOrder(int order, int nrequested)
     {
-        int o1 = order;                                        // first order to search, then increasing
         int given = 0;                                         // track count given, for recursion
-        int k = 0;                                             // always the number of N-shares we need still
 
-        while ( (given < nrequested ) && ( o1 <= maxorder ) ) {
-            int avail = vMachinesByOrder[o1] + nMachinesByOrder[o1];
+        int rem = 0;
+        int low = order;
+        int high = low;
+
+        while ( (given < nrequested ) && ( low <= maxorder ) ) {
+
+            int avail = vMachinesByOrder[low] + nMachinesByOrder[low];
+            if ( avail > 0 ) {
+                if (vMachinesByOrder[low] > 0 ) {
+                    vMachinesByOrder[low]--;
+                } else {
+                    nMachinesByOrder[low]--;
+                }
+                
+                given++;
+                rem = low - order;
+                if ( rem > 0 ) {
+                    vMachinesByOrder[rem]++;
+                    low = Math.max(rem, order);
+                }
+                high = Math.max(low, high);
 
-            int base = o1 / order;                             // number of 'order sized shares we can make from a 'o1 machine
-            int r =    o1 % order;                             // order 'r of the leftovers, after carving out an 'order machine
-            k =  Math.min((nrequested - given), avail * base);  // the number of shares we need
-
-            if ( k > 0 ) {                                     // anything to be gotten from these machiens?
-                int gPrime            = Math.min(vMachinesByOrder[o1], k);  // cap wanted by available
-                int kr                = Math.min(k, gPrime * r);            // number of r-shares leftover
-                vMachinesByOrder[o1] -= gPrime;                // adjust virtual ...
-                vMachinesByOrder[r]  += kr;                    // and residual
-                given                += gPrime;                // update number given
-                k                    -= gPrime;                // constant, number still needed
-
-                if ( k != 0 ) {                                // not done?      
-                    gPrime                = Math.min(nMachinesByOrder[o1], k); // again, cap by available physical machines
-                    kr                    = Math.min(k, gPrime * r);           // r-shares left over
-                    nMachinesByOrder[o1] -= gPrime;            // update count
-                    vMachinesByOrder[r]  += kr;                // and residual
-                    given                += gPrime;            // and given
-                } 
+            } else {
+                low++;
             }
-
-            o1++;
         }
 
         // oops, I can't do this myself, make a child do it.
-        k = nrequested - given;            // the number of shares we need
+        int k = nrequested - given;            // the number of shares we need
         if ( k > 0 ) {
             Iterator<NodePool> iter = children.values().iterator();
             while ( iter.hasNext() && ( k > 0 ) ) {
-                NodePool np = iter.next();
-                given += np.countOutNSharesByOrder(order, k);
-                k      = nrequested - given;
+                NodePool np  = iter.next();
+                given       += np.countOutNSharesByOrder(order, k);
+                k            = nrequested - given;
             }
         }