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;
}
}