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

svn commit: r1723173 - in /uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm: ./ scheduler/

Author: eae
Date: Tue Jan  5 21:36:11 2016
New Revision: 1723173

URL: http://svn.apache.org/viewvc?rev=1723173&view=rev
Log:
UIMA-4712 backport Jim's changes into v2.0.2

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

Modified: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java Tue Jan  5 21:36:11 2016
@@ -108,6 +108,17 @@ public class JobManagerConverter
         }
     }
   
+    // UIMA-4712
+    long toLong(String s, long deflt)
+    {
+        try {
+            long val = Long.parseLong(s);
+            return ( val == 0L ) ? deflt : val;
+        } catch ( Throwable t ) {
+            return deflt;
+        }
+    }
+  
     void refuse(IRmJob j, String reason)
     {
         j.refuse(reason);
@@ -513,6 +524,7 @@ public class JobManagerConverter
         String user_name  = sti.getUser().trim();
         j.setUserName(user_name);
         j.setJobName(name);
+        j.setServiceId(toLong(job.getServiceId(), 0L)); // UIMA-4712 only non-zero on actual service instances 
 
         int threads       = toInt(si.getThreadsPerShare(), scheduler.getDefaultNThreads());
         int user_priority = toInt(si.getSchedulingPriority(), 100);

Modified: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java Tue Jan  5 21:36:11 2016
@@ -285,4 +285,8 @@ public interface IRmJob
 
     // UIMA-4275
     public boolean exceedsFairShareCap();
+    
+    // UIMA-4712
+    public void setServiceId(long id);
+    public long getServiceId();
 }

Modified: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java Tue Jan  5 21:36:11 2016
@@ -93,6 +93,19 @@ public class Machine
     {
         return node;
     }
+    
+    // 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

Modified: uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java Tue Jan  5 21:36:11 2016
@@ -1629,12 +1629,25 @@ 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);
     }
 
-    int findShares( IRmJob j, boolean honorCaps ) 
+    // 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";
 
@@ -1645,7 +1658,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: {
@@ -1660,6 +1673,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
@@ -1689,7 +1703,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();
@@ -1699,7 +1713,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;
 
@@ -1735,7 +1749,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/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java Tue Jan  5 21:36:11 2016
@@ -1431,7 +1431,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.
@@ -1439,7 +1440,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/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java?rev=1723173&r1=1723172&r2=1723173&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java (original)
+++ uima/sandbox/uima-ducc/branches/uima-ducc-2.0.1/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java Tue Jan  5 21:36:11 2016
@@ -75,6 +75,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.
@@ -164,6 +165,16 @@ public class RmJob
     {
     	return id.toString();
     }
+
+    public void setServiceId(long id)
+    {
+        this.serviceId = id;
+    }
+
+    public long getServiceId()
+    {
+        return serviceId;
+    }
     
     public void setJobName(String name)
     {