You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2019/12/20 14:56:46 UTC
svn commit: r1871862 - in /uima/uima-ducc/trunk: src/main/scripts/
uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/
uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/
uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ u...
Author: degenaro
Date: Fri Dec 20 14:56:46 2019
New Revision: 1871862
URL: http://svn.apache.org/viewvc?rev=1871862&view=rev
Log:
UIMA-6161 DUCC facilitate specification of machine list for user submitted work
Modified:
uima/uima-ducc/trunk/src/main/scripts/viaducc
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationSubmit.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java
uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/AllInOneLauncher.java
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ReservationFactory.java
uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/factory/JobFactory.java
uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java
uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java
uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java
uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccSchedulingInfo.java
uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccSchedulingInfo.java
Modified: uima/uima-ducc/trunk/src/main/scripts/viaducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/scripts/viaducc?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/scripts/viaducc (original)
+++ uima/uima-ducc/trunk/src/main/scripts/viaducc Fri Dec 20 14:56:46 2019
@@ -37,6 +37,7 @@ global default_jvm
global ducc_home
ducc_class = 'fixed'
+ducc_mach_list = None
java_cmd = None
ducc_home = None # tbd in a minute
ducc_mem_size = None
@@ -70,6 +71,10 @@ def usage():
print " -DDUCC_CLASS=ducc-scheduling-class"
print " The default is -DDUCC_CLASS=" + ducc_class
print ""
+ print " -DDUCC_MACHINE_LIST=list-of-machine-names"
+ print " The default is no machine names. The machine list string should be"
+ print ' blank-delimeted and quoted, for example: -DDUCC_MACHINE_LIST="machine01 machine02 machine03"'
+ print ""
print " -DDUCC_ENVIRONMENT=environment-settings"
print " The default is no additional environment. The environment string should be"
print ' blank-delimeted and quoted, for example: -DDUCC_ENVIRONMENT="A=B C=D"'
@@ -209,6 +214,7 @@ def main():
usage()
ducc_class = 'fixed'
+ ducc_mach_list = None
java_cmd = None
ducc_env = ''
enable_attach = False
@@ -217,6 +223,7 @@ def main():
# remember to add the '=' at the end if following value
p_mem_size = '-DDUCC_MEMORY_SIZE='
p_class = '-DDUCC_CLASS='
+ p_mach_list = '-DDUCC_MACHINE_LIST='
p_jvm_dir = '-DJAVA_BIN='
p_ducc_home = '-DDUCC_HOME='
p_env = '-DDUCC_ENVIRONMENT='
@@ -245,6 +252,9 @@ def main():
elif (arg.startswith(p_class) ):
ducc_class = arg[len(p_class):]
+ elif (arg.startswith(p_mach_list) ):
+ ducc_mach_list = '"'+arg[len(p_mach_list):]+'"'
+
elif (arg.startswith(p_jvm_dir) ):
java_cmd = arg[len(p_jvm_dir):] + '/java'
@@ -302,6 +312,9 @@ def main():
CMD = CMD + ' --wait_for_completion'
CMD = CMD + ' --process_memory_size ' + str(ducc_mem_size)
CMD = CMD + ' --scheduling_class ' + ducc_class
+
+ if(ducc_mach_list != None):
+ CMD = CMD + ' --machine_list ' + ducc_mach_list
if ducc_desc_set:
CMD = CMD + ' --description %r' % ducc_desc
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java Fri Dec 20 14:56:46 2019
@@ -57,6 +57,7 @@ public class DuccJobSubmit
UiOption.Description,
UiOption.SchedulingClass,
+ UiOption.MachineList,
UiOption.WorkingDirectory, // Must precede LogDirecory
UiOption.LogDirectory, // Must precede Environment
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccManagedReservationSubmit.java Fri Dec 20 14:56:46 2019
@@ -52,6 +52,7 @@ public class DuccManagedReservationSubmi
UiOption.ProcessExecutableArgs,
UiOption.ProcessMemorySize,
UiOption.SchedulingClass,
+ UiOption.MachineList,
UiOption.Specification,
UiOption.SuppressConsoleLog,
UiOption.Timestamp,
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationSubmit.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationSubmit.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationSubmit.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccReservationSubmit.java Fri Dec 20 14:56:46 2019
@@ -79,6 +79,7 @@ public class DuccReservationSubmit
UiOption.Description,
UiOption.SchedulingClass,
+ UiOption.MachineList,
UiOption.Specification,
UiOption.ReservationMemorySize,
UiOption.Timestamp,
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java Fri Dec 20 14:56:46 2019
@@ -60,6 +60,7 @@ public class DuccServiceApi
UiOption.Description,
UiOption.Administrators,
UiOption.SchedulingClass,
+ UiOption.MachineList,
UiOption.WorkingDirectory, // Must precede LogDirecory
UiOption.LogDirectory, // Must precede Environment
UiOption.Jvm,
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceSubmit.java Fri Dec 20 14:56:46 2019
@@ -49,6 +49,7 @@ public class DuccServiceSubmit
UiOption.Administrators, // ( not used directly here, but is allowed in registration )
UiOption.SchedulingClass,
+ UiOption.MachineList,
UiOption.WorkingDirectory, // Must precede LogDirecory
UiOption.LogDirectory, // Must precede Environment
UiOption.Jvm,
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/IUiOptions.java Fri Dec 20 14:56:46 2019
@@ -211,6 +211,13 @@ public interface IUiOptions
public boolean required() { return true; }
},
+ MachineList {
+ public String pname() { return JobSpecificationProperties.key_machine_list; }
+ public String argname() { return "list of machines"; }
+ public String description() { return "Blank separated list of one or more machines to use from the associated scheduling class. If this option is not specified, then any machines associated with the scheduling class are eligible."; }
+ public String example() { return "machine01 machine02 machine03"; }
+ },
+
ManagedReservationId {
public String pname() { return JobRequestProperties.key_id; }
public String argname() { return "string"; }
Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/AllInOneLauncher.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/AllInOneLauncher.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/AllInOneLauncher.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/aio/AllInOneLauncher.java Fri Dec 20 14:56:46 2019
@@ -81,6 +81,7 @@ public class AllInOneLauncher extends Cl
private String description = null;
private String scheduling_class = null;
+ private String machine_list = null;
private String specification = null;
@@ -385,6 +386,26 @@ public class AllInOneLauncher extends Cl
mh.frameworkTrace(cid, mid, exit);
}
+ private void examine_machine_list() throws Exception {
+ String mid = "examine_machine_list";
+ mh.frameworkTrace(cid, mid, enter);
+ String pname = UiOption.MachineList.pname();
+ if (jobRequestProperties.containsKey(pname)) {
+ try {
+ machine_list = jobRequestProperties.getProperty(pname);
+ String message = pname + "=" + machine_list + " [original]";
+ if (isLocal()) {
+ message = pname + "=" + machine_list + " not considered";
+ mh.debug(cid, mid, message);
+ }
+ used(pname);
+ } catch (Exception e) {
+ throw new IllegalConfigurationException("Error in DUCC configuration files - see administrator", e);
+ }
+ }
+ mh.frameworkTrace(cid, mid, exit);
+ }
+
private void examine_signature() {
String mid = "examine_signature";
mh.frameworkTrace(cid, mid, enter);
@@ -663,6 +684,9 @@ public class AllInOneLauncher extends Cl
// scheduling_class
examine_scheduling_class();
+ // machine_list
+ examine_machine_list();
+
// wait_for_completion & cancel
examine_wait_for_completion();
examine_cancel_on_interrupt();
Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ReservationFactory.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ReservationFactory.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ReservationFactory.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/ReservationFactory.java Fri Dec 20 14:56:46 2019
@@ -61,6 +61,7 @@ public class ReservationFactory {
DuccSchedulingInfo schedulingInfo = new DuccSchedulingInfo();
duccWorkReservation.setSchedulingInfo(schedulingInfo);
schedulingInfo.setSchedulingClass(reservationRequestProperties.getProperty(ReservationSpecificationProperties.key_scheduling_class));
+ schedulingInfo.setMachineList(reservationRequestProperties.getProperty(ReservationSpecificationProperties.key_machine_list));
String memorySize = reservationRequestProperties.getProperty(ReservationSpecificationProperties.key_memory_size);
MemorySpecification memorySpecification = new MemorySpecification(memorySize);
schedulingInfo.setMemorySizeRequested(memorySpecification.getSize());
Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/factory/JobFactory.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/factory/JobFactory.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/factory/JobFactory.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/factory/JobFactory.java Fri Dec 20 14:56:46 2019
@@ -515,6 +515,7 @@ public class JobFactory implements IJobF
schedulingInfo.setMemorySizeRequested(""+jpGB);
}
schedulingInfo.setSchedulingClass(jobRequestProperties.getProperty(JobSpecificationProperties.key_scheduling_class));
+ schedulingInfo.setMachineList(jobRequestProperties.getProperty(JobSpecificationProperties.key_machine_list));
schedulingInfo.setSchedulingPriority(jobRequestProperties.getProperty(JobSpecificationProperties.key_scheduling_priority));
schedulingInfo.setProcessesMax(jobRequestProperties.getProperty(JobSpecificationProperties.key_process_deployments_max));
schedulingInfo.setProcessesMin(jobRequestProperties.getProperty(JobSpecificationProperties.key_process_deployments_min));
Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java Fri Dec 20 14:56:46 2019
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import org.apache.uima.ducc.common.Node;
@@ -567,6 +568,15 @@ public class JobManagerConverter
j.setUserPriority(user_priority);
j.setNQuestions(total_work, remaining_work, 0.0);
j.setClassName(className);
+
+ List<String> machineList = si.getMachineList();
+ j.setMachineList(machineList);
+ if(machineList != null) {
+ if(!machineList.isEmpty()) {
+ String message = "machine list: "+String.join(" ", machineList);
+ logger.info(methodName, job.getDuccId(), message);
+ }
+ }
switch (si.getMemoryUnits()) {
case GB:
Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/IRmJob.java Fri Dec 20 14:56:46 2019
@@ -19,6 +19,7 @@
package org.apache.uima.ducc.rm.scheduler;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.uima.ducc.common.persistence.rm.IDbJob;
@@ -202,6 +203,13 @@ public interface IRmJob
* non-zero. This is an extreme corner case it's best to be safe.
*/
public int countNShares();
+
+ /**
+ * Number of eligible machines subject to user machine list
+ */
+ public int getEligibleMachinesCount();
+ public void setEligibleMachinesCount(int value);
+ public void incEligibleMachinesCount();
/**
* Can't schedudle this nohow. Here's why.
@@ -251,6 +259,9 @@ public interface IRmJob
// public String getClassName(); UIMA 4577 IDbJob
public void setClassName(String n);
+
+ public void setMachineList(List<String> ms);
+ public List<String> getMachineList();
public int getSchedulingPriority();
Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java Fri Dec 20 14:56:46 2019
@@ -1382,6 +1382,38 @@ class NodePool
return np.doVaryOn(node); // must pass to the right nodepool, can't do it "here"
}
+ /*
+ * limit eligible machines to those in the user specified --machines_list
+ */
+ boolean isCompatible(Machine m, IRmJob j)
+ {
+ String methodName = "isCompatible";
+ boolean retVal = true;
+ try {
+ List<String> mlist = j.getMachineList();
+ if(!mlist.isEmpty()) {
+ retVal = false;
+ NodeIdentity ni = m.getNodeIdentity();
+ String lname = ni.getCanonicalName();
+ String sname = ni.getShortName();
+ for(String mname : mlist) {
+ if(mname.equals(lname)) {
+ retVal = true;
+ break;
+ }
+ if(mname.equals(sname)) {
+ retVal = true;
+ break;
+ }
+ }
+ }
+ }
+ catch(Exception e) {
+ logger.error(methodName, j.getId(), e);
+ }
+ return retVal;
+ }
+
boolean isSchedulable(Machine m)
{
if ( m.isBlacklisted() ) return false;
@@ -1513,6 +1545,10 @@ class NodePool
while ( iter.hasNext() && (given < needed) ) {
Machine m = iter.next();
logger.info(methodName, j.getId(), "Examining", m.getId());
+ if ( !isCompatible(m,j) ) {
+ logger.info(methodName, j.getId(), "Bypass because machine", m.getId(), "is not in user machine list");
+ continue;
+ }
if ( !isSchedulable(m) ) {
logger.info(methodName, j.getId(), "Bypass because machine", m.getId(), "is offline or unresponsive or blacklisted");
continue;
@@ -1699,7 +1735,7 @@ class NodePool
//machs = sortedForReservation(machinesByOrder.get(order));
for ( Machine mm : machinesByOrder.get(order).values() ) {
- if ( isSchedulable(mm) && mm.isFree() ) {
+ if ( isCompatible(mm,job) && isSchedulable(mm) && mm.isFree() ) {
Share s = new Share(mm, job, mm.getShareOrder());
s.setFixed();
connectShare(s, mm, job, mm.getShareOrder());
@@ -1916,6 +1952,8 @@ class NodePool
logger.debug(methodName, j.getId(), "counted", counted, "current", current, "needed", needed, "order", order, "given", given);
+ j.setEligibleMachinesCount(0);
+
if ( needed > 0 ) {
whatof: {
for ( int i = order; i < getArraySize(); i++ ) {
@@ -1928,6 +1966,8 @@ class NodePool
ml.addAll(machs.values());
for ( Machine m : ml ) { // look for space
+ if ( !isCompatible(m,j) ) continue; // nope
+ j.incEligibleMachinesCount();
if ( !isSchedulable(m) ) 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
@@ -2011,7 +2051,14 @@ class NodePool
} else {
sb.append("notfound ");
}
- if ( j.countNShares() == 0 ) j.setReason("Waiting for preemptions.");
+ if ( j.countNShares() == 0 ) {
+ j.setReason("Waiting for preemptions.");
+ if(j.getEligibleMachinesCount() == 0) {
+ if(j.getMachineList().size() > 0) {
+ j.setReason("No machines match user specified list.");
+ }
+ }
+ }
}
logger.info(methodName, null, sb.toString());
return expansions;
Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodepoolScheduler.java Fri Dec 20 14:56:46 2019
@@ -1464,7 +1464,14 @@ public class NodepoolScheduler
// or defrag.
//
if ( j.countNShares() == 0 ) {
- j.setReason("Waiting for preemptions.");
+ if ( j.countNShares() == 0 ) {
+ j.setReason("Waiting for preemptions.");
+ if(j.getEligibleMachinesCount() == 0) {
+ if(j.getMachineList().size() > 0) {
+ j.setReason("No machines match user specified list.");
+ }
+ }
+ }
}
}
}
@@ -1644,7 +1651,14 @@ public class NodepoolScheduler
// fully allocated. Nothing more to do here.
//
if ( j.countNShares() == 0 ) {
- j.setReason("Waiting for preemptions.");
+ if ( j.countNShares() == 0 ) {
+ j.setReason("Waiting for preemptions.");
+ if(j.getEligibleMachinesCount() == 0) {
+ if(j.getMachineList().size() > 0) {
+ j.setReason("No machines match user specified list.");
+ }
+ }
+ }
}
}
}
Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/RmJob.java Fri Dec 20 14:56:46 2019
@@ -50,6 +50,7 @@ public class RmJob
protected String name; // user's name for job
protected String resource_class_name; // Name of the res class, from incoming job parms
protected ResourceClass resource_class; // The actual class, assigned as job is received in scheduler.
+ protected List<String> resource_machine_list; // List of eligible machine (if any), from incoming job parms
protected int user_priority; // user "priority", really apportionment
// @deprecated
@@ -95,6 +96,8 @@ public class RmJob
Map<Machine, Map<Share, Share>> sharesByMachine = new HashMap<Machine, Map<Share, Share>>();
Map<Machine, Machine> machineList = new HashMap<Machine, Machine>();
+ private int eligibleMachinesCount; // during scheduling, how many machines were in users machine set
+
// protected int shares_given; // during scheduling, how many N-shares we get
int[] given_by_order; // during scheduling, how many N-shares we get
int[] wanted_by_order; // during scheduling, how many N-shares we we want - volatile, changes during countJobsByOrder
@@ -916,6 +919,16 @@ public class RmJob
return assignedShares.size() + pendingShares.size() - pendingRemoves.size();
}
+ public int getEligibleMachinesCount() {
+ return eligibleMachinesCount;
+ }
+ public void setEligibleMachinesCount(int value) {
+ eligibleMachinesCount = value;
+ }
+ public void incEligibleMachinesCount() {
+ eligibleMachinesCount += 1;
+ }
+
public void refuse(String refusal)
{
String methodName = "refuse";
@@ -1235,6 +1248,14 @@ public class RmJob
this.resource_class_name = class_name;
}
+ public List<String> getMachineList() {
+ return resource_machine_list;
+ }
+
+ public void setMachineList(List<String> machine_list) {
+ this.resource_machine_list = machine_list;
+ }
+
public int getSchedulingPriority() {
return resource_class.getPriority();
}
Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/cli/SpecificationProperties.java Fri Dec 20 14:56:46 2019
@@ -43,6 +43,7 @@ public class SpecificationProperties ext
public static String key_description = "description";
+ public static String key_machine_list = "machine_list";
public static String key_scheduling_class = "scheduling_class";
public static String key_specification = "specification";
Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccSchedulingInfo.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccSchedulingInfo.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccSchedulingInfo.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/DuccSchedulingInfo.java Fri Dec 20 14:56:46 2019
@@ -18,6 +18,8 @@
*/
package org.apache.uima.ducc.transport.event.common;
+import java.util.Arrays;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.uima.ducc.common.jd.files.perf.PerformanceMetricsSummaryMap;
@@ -34,6 +36,7 @@ public class DuccSchedulingInfo implemen
*/
private static final long serialVersionUID = 1L;
private String schedulingClass = defaultSchedulingClass;
+ private List<String> machineList = defaultMachineList;
private String schedulingPriority = defaultSchedulingPriority;
@Deprecated
private String shareMemorySize = defaultMemorySize;
@@ -82,6 +85,25 @@ public class DuccSchedulingInfo implemen
}
+ public List<String> getMachineList() {
+ return machineList;
+ }
+
+
+ public void setMachineList(List<String> machineList) {
+ if(machineList != null) {
+ this.machineList = machineList;
+ }
+ }
+ public void setMachineList(String string) {
+ if(string != null) {
+ String[] array = string.trim().split("\\s+");
+ if(array.length > 0) {
+ setMachineList(Arrays.asList(array));
+ }
+ }
+ }
+
public String getSchedulingPriority() {
return schedulingPriority;
}
Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccSchedulingInfo.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccSchedulingInfo.java?rev=1871862&r1=1871861&r2=1871862&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccSchedulingInfo.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/IDuccSchedulingInfo.java Fri Dec 20 14:56:46 2019
@@ -19,6 +19,8 @@
package org.apache.uima.ducc.transport.event.common;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.uima.ducc.common.jd.files.perf.PerformanceMetricsSummaryMap;
@@ -29,6 +31,7 @@ import org.apache.uima.ducc.transport.ev
public interface IDuccSchedulingInfo extends Serializable {
public static final String defaultSchedulingClass = "normal";
+ public static final List<String> defaultMachineList = new ArrayList<String>();
public static final String defaultSchedulingPriority = "0";
public static final String defaultMemorySize = "1";
public static final MemoryUnits defaultMemoryUnits = MemoryUnits.GB;
@@ -58,6 +61,9 @@ public interface IDuccSchedulingInfo ext
public String getSchedulingClass();
public void setSchedulingClass(String schedulingClass);
+ public List<String> getMachineList();
+ public void setMachineList(List<String> machineList);
+
public String getSchedulingPriority();
public void setSchedulingPriority(String schedulingPriority);