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)
{