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 2015/12/17 21:11:51 UTC

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

Author: challngr
Date: Thu Dec 17 20:11:50 2015
New Revision: 1720642

URL: http://svn.apache.org/viewvc?rev=1720642&view=rev
Log:
UIMA-4712 Use horizontal instead of vertical stacking for service instances.

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

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java?rev=1720642&r1=1720641&r2=1720642&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java Thu Dec 17 20:11:50 2015
@@ -294,4 +294,8 @@ public interface IRmJob
 
     // UIMA-4275
     public boolean exceedsFairShareCap();
+    
+    // UIMA-4712
+    public void setServiceId(long id);
+    public long getServiceId();
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java?rev=1720642&r1=1720641&r2=1720642&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java Thu Dec 17 20:11:50 2015
@@ -106,6 +106,19 @@ public class Machine
     {
         return (int) memory / share_order;
     }
+    
+    // UIMA-4712
+    // See if placing the subject job on this machine violates vertical stacking constraings
+    public synchronized boolean hasVerticalConflict(IRmJob j)
+    {
+        for ( Share s : activeShares.values() ) {
+            if ( s.getJob().getServiceId() == j.getServiceId() ) return true;          // match service id, it violates
+        }
+        for ( Share s : blacklistedWork.values() ) {                                   // just in case
+            if ( s.getJob().getServiceId() == j.getServiceId() ) return true;   
+        }
+        return false;                                                                  // nothing else violates
+    }
 
     // UIMA-4142
     // Black list some number of shres for a specific job and proc.  This reduces the number of
@@ -349,7 +362,7 @@ public class Machine
         shares_left += s.getShareOrder();
         try {
             // Not transactional.  If this turns into a problem we'll have to find a way
-			persistence.setNodeProperties(id, RmNodes.Assignments,  RmNodes.NPAssignments, countNpShares(), activeShares.size(), RmNodes.SharesLeft, shares_left);
+			persistence.setNodeProperties(id, RmNodes.Assignments,  activeShares.size(), RmNodes.NPAssignments, countNpShares(),  RmNodes.SharesLeft, shares_left);
 			persistence.removeAssignment(id, s.getJob().getId(), s);  // update jobs on machine and specific shares
             logger.info(methodName, null, "Time to remove share in db", System.currentTimeMillis() - now);
 		} catch (Exception e) {

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=1720642&r1=1720641&r2=1720642&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 Thu Dec 17 20:11:50 2015
@@ -1730,13 +1730,26 @@ class NodePool
     }
 
 
-    int findShares( IRmJob j )
+    // For FIXED: find shares ith caps, disallow vertical stacking.  UIMA-4712
+    int findSharesHorizontal( IRmJob j )
     {
-        return findShares(j, true);
+        return findShares(j, true, false);
     }
 
+    // For FIXED: find shares ith caps, do allow vertical stacking.  UIMA-4712
+    int findSharesVertical( IRmJob j )
+    {
+        return findShares(j, true, true);
+    }
+
+    // For FAIR_SHRE: find shares, caller controls caps, allow vertical stacking.  UIMA-4712
     int findShares( IRmJob j, boolean honorCaps ) 
     {
+        return findShares(j, honorCaps, true);
+    }
+
+    int findShares( IRmJob j, boolean honorCaps, boolean allowVertical )  // UIMA-4712, allowVertical
+    {
         String methodName = "findShares";
 
         int counted = j.countNSharesGiven();      // allotment from the counter
@@ -1746,7 +1759,7 @@ class NodePool
         int given = 0;        
         boolean expansionStopped = false;         // UIMA-4275
 
-        logger.info(methodName, j.getId(), "counted", counted, "current", current, "needed", needed, "order", order, "given", given);
+        logger.debug(methodName, j.getId(), "counted", counted, "current", current, "needed", needed, "order", order, "given", given);
 
         if ( needed > 0 ) {
             whatof: {
@@ -1761,6 +1774,7 @@ class NodePool
                     
                     for ( Machine m : ml ) {                                // look for space
                         if ( m.isBlacklisted() ) continue;                  // nope
+                        if ( (!allowVertical) && (m.hasVerticalConflict(j)) ) continue;  // UIMA-4712
                         int g = Math.min(needed, m.countFreeShares(order)); // adjust by the order supported on the machine
                         for ( int ndx= 0;  ndx < g; ndx++ ) {
                             if ( honorCaps && j.exceedsFairShareCap() ) {                // UIMA-4275
@@ -1790,7 +1804,7 @@ class NodePool
             //calcNSharesByOrder();
         }
 
-        if ( (needed > 0) && ( !expansionStopped ) ) {            // UIMA-4275
+        if ( (needed > 0) && ( !expansionStopped ) && ( j.getSchedulingPolicy() == Policy.FAIR_SHARE) ) {            // UIMA-4275
             for ( NodePool np : getChildrenAscending() ) {
 
                 StringBuffer sb = new StringBuffer();
@@ -1800,7 +1814,7 @@ class NodePool
                 }
                 logger.info(methodName, null, np.getId(), "Doing expansions in this order:", sb.toString());
 
-                int g = np.findShares(j);
+                int g = np.findShares(j, honorCaps, allowVertical);
                 given += g;
                 needed -= g;
 
@@ -1836,7 +1850,7 @@ class NodePool
             j.undefer();
             sb.append(j.getId());
             sb.append(":");
-            if ( findShares(j) > 0 ) {
+            if ( findShares(j, false) > 0 ) {   // always fair-share, so don't do caps yet. UIMA-4712
                 sb.append("found ");
                 expansions.put(j, j);
             } else {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java?rev=1720642&r1=1720641&r2=1720642&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java Thu Dec 17 20:11:50 2015
@@ -1434,7 +1434,8 @@ public class NodepoolScheduler
                 int order = j.getShareOrder();
                 int count = j.countNSharesGiven();
 
-                if ( np.findShares(j) > 0 ) {               // UIMA-4275, no longer require full allocation, we'll take what we can
+                if ( np.findSharesHorizontal(j) > 0 ) {       // UIMA-4275, no longer require full allocation, we'll take what we can
+                                                              // UIMA-4712 first try horizontal stacking
                     //
                     // Need to fix the shares here, if any, because the findShares() code is same for fixed and fair share so it
                     // won't have done that yet.
@@ -1442,7 +1443,20 @@ public class NodepoolScheduler
                     for ( Share s : j.getPendingShares().values() ) {
                         s.setFixed();
                     }
-                    logger.info(methodName, j.getId(), "Assign:", nSharesToString(count, order));
+                    logger.info(methodName, j.getId(), "Assign(H):", nSharesToString(count, order));
+                }
+
+                if ( j.countNShares() == 0 ) {                // UIMA-4712 now try horizontal stacking
+                    if ( np.findSharesVertical(j) > 0 ) {
+                        //
+                        // Need to fix the shares here, if any, because the findShares() code is same for fixed and fair share so it
+                        // won't have done that yet.
+                        //
+                        for ( Share s : j.getPendingShares().values() ) {
+                            s.setFixed();
+                        }
+                        logger.info(methodName, j.getId(), "Assign(V):", nSharesToString(count, order));
+                    }
                 }
 
                 // 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java?rev=1720642&r1=1720641&r2=1720642&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java Thu Dec 17 20:11:50 2015
@@ -76,6 +76,7 @@ public class RmJob
     protected String username;
     protected User user;                              // user id, enforced by submit and job manager. we just believe it in sched.
 
+    protected long serviceId = 0;                     // services only, the SM-assigned service id. UIMA-4712 ref UIMA-4209
     //
     // We keep track of three things related to machines:
     // 1.  All the machines the job is running on.
@@ -166,7 +167,17 @@ public class RmJob
     {
     	return id.toString();
     }
-    
+
+    public void setServiceId(long id)
+    {
+        this.serviceId = id;
+    }
+
+    public long getServiceId()
+    {
+        return serviceId;
+    }
+
     public void setJobName(String name)
     {
         this.name = name;