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;