Author: challngr Date: Tue May 20 19:26:52 2014 New Revision: 1596375 URL: http://svn.apache.org/r1596375 Log: UIMA-3824 Initial query occupancy.
Added: uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy (with props) uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancy.java uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancyReply.java uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedMachine.java uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedShare.java Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccRmAdmin.java uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/ResourceManagerComponent.java uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/ISchedulerMain.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/Scheduler.java uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Share.java Added: uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy?rev=1596375&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy (added) +++ uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy Tue May 20 19:26:52 2014 @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# ----------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ----------------------------------------------------------------------- + + +import os +import sys +import getopt + +from ducc_util import DuccUtil + +class DuccRmQOccupancy(DuccUtil): + + def usage(self, msg): + if ( msg != None ): + print msg + + print 'rm_qoccupancy --console | --compact' + print ' This returns details of each DUCC node.' + print ' --console formats the output in human-readable form' + print ' --compact formats the output for scripting' + print '' + print 'Example:' + print ' rm_qoccupancy --console' + print '' + print ' rm_qoccupancy --compact' + sys.exit(1) + + def main(self, argv): + + format = None + + try: + opts, args = getopt.getopt(argv, 'h?', ['console', 'compact']) + except: + self.usage("Invalid arguments " + ' '.join(argv)) + + for ( o, a ) in opts: + if o in ('--console'): + format = o + if o in ('--compact'): + format = o + elif o in ('-h', '?'): + self.usage(None) + + if ( format == None ): + self.usage("Must specify --console or --compact") + + DUCC_JVM_OPTS = ' -Dducc.deploy.configuration=' + self.DUCC_HOME + "/resources/ducc.properties " + DUCC_JVM_OPTS = DUCC_JVM_OPTS + ' -DDUCC_HOME=' + self.DUCC_HOME + DUCC_JVM_OPTS = DUCC_JVM_OPTS + ' -Dducc.head=' + self.ducc_properties.get('ducc.head') + + self.spawn(self.java(), DUCC_JVM_OPTS, 'org.apache.uima.ducc.common.main.DuccRmAdmin', '--qoccupancy', format) + + return + +if __name__ == "__main__": + stopper = DuccRmQOccupancy() + stopper.main(sys.argv[1:]) + + Propchange: uima/sandbox/uima-ducc/trunk/src/main/admin/rm_qoccupancy ------------------------------------------------------------------------------ svn:executable = * Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancy.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancy.java?rev=1596375&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancy.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancy.java Tue May 20 19:26:52 2014 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.common.admin.event; + +public class RmAdminQOccupancy + extends DuccAdminEvent +{ + private static final long serialVersionUID = -8101741014979144426L; + + public RmAdminQOccupancy() + { + + } + +} Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancyReply.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancyReply.java?rev=1596375&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancyReply.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmAdminQOccupancyReply.java Tue May 20 19:26:52 2014 @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.common.admin.event; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +public class RmAdminQOccupancyReply + extends RmAdminReply +{ + private static final long serialVersionUID = -8101741014979144426L; + + + List<RmQueriedMachine> machines = new ArrayList<RmQueriedMachine>(); + + public RmAdminQOccupancyReply() + { + super(null); + } + + public void addMachine(RmQueriedMachine m) + { + machines.add(m); + } + + public List<RmQueriedMachine> getMachines() + { + return machines; + } + + + public String toConsole() + { + Collections.sort(machines, new MachineByOrderSorter()); + StringBuffer sb = new StringBuffer(); + sb.append(RmQueriedMachine.header()); + sb.append("\n"); + for ( RmQueriedMachine m : machines ) { + sb.append(m.toConsole()); + sb.append("\n"); + } + return sb.toString(); + } + + public String toCompact() + { + // ( no need to sort, this is intended for script scraping so we let the script order things as it wants ) + StringBuffer sb = new StringBuffer(); + for ( RmQueriedMachine m : machines ) { + sb.append(m.toCompact()); + sb.append("\n"); + } + return sb.toString(); + } + + class MachineByOrderSorter + implements Comparator<RmQueriedMachine> + { + public int compare(RmQueriedMachine m1, RmQueriedMachine m2) + { + int o1 = m1.getShareOrder(); + int o2 = m2.getShareOrder(); + if ( o1 == o2 ) { + return m1.getId().compareTo(m2.getId()); + } + return o2 - o1; + } + } + + +} Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedMachine.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedMachine.java?rev=1596375&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedMachine.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedMachine.java Tue May 20 19:26:52 2014 @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.common.admin.event; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class RmQueriedMachine + implements Serializable +{ + private static final long serialVersionUID = -8101741014979144426L; + + String name; + String nodepoolId; + long memory; + int order; + List<RmQueriedShare> shares = null; + + public RmQueriedMachine(String name, String nodepoolId, long memory, int order) + { + this.name = name; + this.nodepoolId = nodepoolId; + this.memory = memory; + this.order = order; + } + + public void addShare(RmQueriedShare rqs) + { + if ( shares == null ) shares = new ArrayList<RmQueriedShare>(); + shares.add(rqs); + } + + public String getId() { return name; } + public long getMemory() { return memory; } + public int getShareOrder() { return order; } + + static String fmt_s = "%12s %10s %10s %5s %4s %s"; + String fmt_d = "%12s %10s %10d %5d %4d" ; + public static String header() + { + return String.format(fmt_s, "Node", "Nodepool", "Memory", "Order", "Free", "Shares\n"); + } + + public String toConsole() + { + StringBuffer sb = new StringBuffer(); + + if ( shares == null ) { + sb.append(String.format(fmt_d, name, nodepoolId, memory, order, 0)); + sb.append(" [none]"); + } else { + int used = 0; + for ( RmQueriedShare s : shares ) { + used += s.getShareOrder(); + } + sb.append(String.format(fmt_d, name, nodepoolId, memory, order, order - used)); + + String spacer = " "; + String altSpacer = "\n" + String.format(fmt_s, " ", " ", " ", " ", " ", " "); // yes, blank, of exactly the right size + for ( RmQueriedShare s : shares ) { + sb.append(spacer); + sb.append(s.toConsole()); + spacer = altSpacer; + } + } + return sb.toString(); + + } + + public String toCompact() + { + // name memory order(nqshares) unused-shares share-details... + StringBuffer sb = new StringBuffer(); + sb.append(name); + sb.append(" "); + sb.append(nodepoolId); + sb.append(" "); + sb.append(Long.toString(memory)); + sb.append(" "); + sb.append(Integer.toString(order)); + + if ( shares == null ) { + sb.append(Integer.toString(order)); + sb.append(", None"); + } else { + int used = 0; + for ( RmQueriedShare s : shares ) { + used += s.getShareOrder(); + } + + sb.append(Integer.toString(order - used)); + for ( RmQueriedShare s : shares ) { + sb.append(","); + sb.append(s.toCompact()); + } + } + return sb.toString(); + } + + public String toString() + { + return String.format("%10s %10d %3d %3d", name, memory, order, shares == null ? 0 : shares.size()); + } +} Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedShare.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedShare.java?rev=1596375&view=auto ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedShare.java (added) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/admin/event/RmQueriedShare.java Tue May 20 19:26:52 2014 @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ +package org.apache.uima.ducc.common.admin.event; + +import java.io.Serializable; + +public class RmQueriedShare + implements Serializable +{ + private static final long serialVersionUID = -8101741014979144426L; + + long jobId; // DuccID of job + long shareId; // DuccID of share + long investmentInit; + long investmentRt; + int order; + + boolean evicted = false; + boolean purged = false; + boolean fixed = false; + boolean initialized = false; + public RmQueriedShare(long job_id, long share_id, int order, long investment_init, long investment_rt) + { + this.jobId = job_id; + this.shareId = share_id; + this.order = order; + this.investmentInit = investment_init; + this.investmentRt = investment_rt; + } + + public void setEvicted(boolean v){ this.evicted = v; } + public void setPurged(boolean v){ this.purged = v; } + public void setFixed(boolean v) { this.fixed = v; } + public void setInitialized(boolean v) {this.initialized = v; } + + public long getJobId() { return this.jobId; } + public long getId() { return this.shareId; } + public long getInvestmentInit() { return this.investmentInit; } + public long getInvestmentRt() { return this.investmentRt; } + public int getShareOrder() { return order; } + + public boolean isEvicted() { return evicted; } + public boolean isPurged() { return purged; } + public boolean isFixed() { return fixed; } + public boolean isInitialized() { return initialized; } + + + public String toCompact() + { + return String.format("%d %d %d %d %d %s %s %s", jobId, shareId, order, investmentInit, investmentRt, evicted, purged, fixed, initialized); + } + + public String toConsole() + { + return String.format("J[%8d] S[%8d] O[%d] II[%8d] IR[%8d] E[%5s] P[%5s] F[%5s] I[%5s]", jobId, shareId, order, investmentInit, investmentRt, evicted, purged, fixed, initialized); + } +} Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccRmAdmin.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccRmAdmin.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccRmAdmin.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccRmAdmin.java Tue May 20 19:26:52 2014 @@ -30,6 +30,8 @@ import org.apache.camel.impl.DefaultCame import org.apache.camel.impl.DefaultClassResolver; import org.apache.uima.ducc.common.admin.event.DuccAdminEvent; import org.apache.uima.ducc.common.admin.event.RmAdminQLoad; +import org.apache.uima.ducc.common.admin.event.RmAdminQOccupancy; +import org.apache.uima.ducc.common.admin.event.RmAdminQOccupancyReply; import org.apache.uima.ducc.common.admin.event.RmAdminReply; import org.apache.uima.ducc.common.admin.event.RmAdminVaryOff; import org.apache.uima.ducc.common.admin.event.RmAdminVaryOn; @@ -210,13 +212,24 @@ public class DuccRmAdmin * * @throws Exception */ - public void qload() + public RmAdminReply qload() throws Exception { RmAdminQLoad ql = new RmAdminQLoad(); - RmAdminReply reply = dispatchAndWaitForReply(ql); - System.out.println(reply.toString()); + return dispatchAndWaitForReply(ql); + } + + /** + * Query occupancy. + * + * @throws Exception + */ + public RmAdminQOccupancyReply qoccupancy() + throws Exception + { + RmAdminQOccupancy qo = new RmAdminQOccupancy(); + return (RmAdminQOccupancyReply) dispatchAndWaitForReply(qo); } @@ -237,7 +250,23 @@ public class DuccRmAdmin if ( args[0].equals("--qload")) { if ( args.length != 1 ) usage("Query load takes no arguments."); - qload(); + RmAdminReply ret = qload(); + System.out.println(ret.toString()); + return; + } + + if ( args[0].equals("--qoccupancy")) { + if ( args.length != 2 ) usage("Query occupancy: specify --console or --compact"); + if ( !args[1].equals("--console") && !args[1].equals("--compact") ) { + usage("Invalid argument: " + args[1] + " - specify --console or --compact"); + } + RmAdminQOccupancyReply ret = qoccupancy(); + if ( args[1].equals("--console") ) { + System.out.println(ret.toConsole()); + } else { + System.out.println(ret.toCompact()); + } + return; } } @@ -252,6 +281,7 @@ public class DuccRmAdmin System.out.println(" --varyoff string-delimeted-nodes"); System.out.println(" --varyon string-delimeted-nodes"); System.out.println(" --qload"); + System.out.println(" --qoccupancy"); System.exit(1); } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/JobManagerConverter.java Tue May 20 19:26:52 2014 @@ -241,7 +241,7 @@ public class JobManagerConverter long investment = proc.getWiMillisInvestment(); logger.info(methodName, j.getId(), "Assigning share in state", state, "pid", pid, "for recovery", s.toString()); j.recoverShare(s); - s.update(j.getId(), mem, investment, state, proc.getTimeWindowInit(), proc.getTimeWindowRun(), pid); + s.update(j.getId(), mem, investment, state, proc.getTimeWindowInit(), pid); } } logger.info(methodName, j.getId(), "Scheduling for recovery."); @@ -517,7 +517,7 @@ public class JobManagerConverter String pid = p.getPID(); logger.info(methodName, jobid, "New process ", s.toString(), mem, state, pid); - if ( ! s.update(jobid, mem, investment, state, p.getTimeWindowInit(), p.getTimeWindowRun(), pid) ) { + if ( ! s.update(jobid, mem, investment, state, p.getTimeWindowInit(), pid) ) { // TODO: probably change to just a warning and cancel the job - for now I want an attention-getter throw new SchedulingException(jobid, "Process assignemnt arrives for share " + s.toString() + " but jobid " + jobid + " does not match share " + s.getJob().getId()); @@ -612,7 +612,7 @@ public class JobManagerConverter logger.info(methodName, jobid, "Process", pl.getPID(), "marked complete because it is purged. State:", state); } - if ( ! s.update(jobid, mem, investment, state, pl.getTimeWindowInit(), pl.getTimeWindowRun(), pid) ) { + if ( ! s.update(jobid, mem, investment, state, pl.getTimeWindowInit(), pid) ) { // TODO: probably change to just a warning and cancel the job - for now I want an attention-getter throw new SchedulingException(jobid, "Process update arrives for share " + s.toString() + " but jobid " + jobid + " does not match job in share " + s.getJob().getId()); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/ResourceManagerComponent.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/ResourceManagerComponent.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/ResourceManagerComponent.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/ResourceManagerComponent.java Tue May 20 19:26:52 2014 @@ -27,6 +27,7 @@ import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.uima.ducc.common.admin.event.DuccAdminEvent; import org.apache.uima.ducc.common.admin.event.RmAdminQLoad; +import org.apache.uima.ducc.common.admin.event.RmAdminQOccupancy; import org.apache.uima.ducc.common.admin.event.RmAdminReply; import org.apache.uima.ducc.common.admin.event.RmAdminVaryOff; import org.apache.uima.ducc.common.admin.event.RmAdminVaryOn; @@ -147,6 +148,9 @@ public class ResourceManagerComponent } else if (body instanceof RmAdminQLoad) { reply = scheduler.queryLoad(); + } else + if (body instanceof RmAdminQOccupancy) { + reply = scheduler.queryOccupancy(); } exchange.getIn().setBody(reply); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/ISchedulerMain.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/ISchedulerMain.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/ISchedulerMain.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/ISchedulerMain.java Tue May 20 19:26:52 2014 @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.uima.ducc.common.Node; import org.apache.uima.ducc.common.NodeIdentity; import org.apache.uima.ducc.common.admin.event.RmAdminQLoadReply; +import org.apache.uima.ducc.common.admin.event.RmAdminQOccupancyReply; import org.apache.uima.ducc.common.utils.id.DuccId; @@ -75,4 +76,5 @@ public interface ISchedulerMain String varyoff(String[] nodes); String varyon(String[] nodes); RmAdminQLoadReply queryLoad(); + RmAdminQOccupancyReply queryOccupancy(); } 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=1596375&r1=1596374&r2=1596375&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 Tue May 20 19:26:52 2014 @@ -22,6 +22,8 @@ import java.util.HashMap; import org.apache.uima.ducc.common.Node; import org.apache.uima.ducc.common.NodeIdentity; +import org.apache.uima.ducc.common.admin.event.RmQueriedMachine; +import org.apache.uima.ducc.common.admin.event.RmQueriedShare; @@ -246,6 +248,24 @@ public class Machine return cnt; } + RmQueriedMachine queryMachine() + { + RmQueriedMachine ret = new RmQueriedMachine(id, nodepool.getId(), memory, share_order); + for ( Share s : activeShares.values() ) { + RmQueriedShare rqs = new RmQueriedShare(s.getJob().getId().getFriendly(), + s.getId().getFriendly(), + s.getShareOrder(), + s.getInitializationTime(), + s.getInvestment()); + rqs.setFixed(s.isFixed()); + rqs.setPurged(s.isPurged()); + rqs.setEvicted(s.isEvicted()); + rqs.setInitialized(s.isInitialized()); + ret.addShare(rqs); + } + return ret; + } + /** * A machine's investment is the sum of it's share's investments. */ @@ -257,7 +277,7 @@ public class Machine } return answer; } - + public static String getDashes() { return String.format("%20s %5s %13s %13s %11s %s", "--------------------", "-----", "-------------", "-------------", "-----------", "------ ..."); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java Tue May 20 19:26:52 2014 @@ -19,6 +19,7 @@ package org.apache.uima.ducc.rm.scheduler; import java.util.ArrayList; +import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; @@ -30,6 +31,7 @@ import org.apache.uima.ducc.common.NodeC import org.apache.uima.ducc.common.NodeIdentity; import org.apache.uima.ducc.common.Pair; import org.apache.uima.ducc.common.admin.event.RmAdminQLoadReply; +import org.apache.uima.ducc.common.admin.event.RmAdminQOccupancyReply; import org.apache.uima.ducc.common.utils.DuccLogger; import org.apache.uima.ducc.common.utils.DuccProperties; import org.apache.uima.ducc.common.utils.DuccPropertiesResolver; @@ -1145,6 +1147,48 @@ public class Scheduler return reply; } + private void collectMachinesForQuery(NodePool np, RmAdminQOccupancyReply ret) + { + Collection<Machine> machs = np.getAllMachines().values(); + for ( Machine m : machs ) { + ret.addMachine(m.queryMachine()); + } + } + + public synchronized RmAdminQOccupancyReply queryOccupancy() + { + RmAdminQOccupancyReply ret = new RmAdminQOccupancyReply(); + + // + // iterate top-level nodepools to get all their subpools + // iterate the subpools to get all their machines + // iterage the machines and request a query object + // add query object to ret + // return ret + + // We want to be dependent on common project, not the other way around, so + // we keep the query objects in common and put knowledge of how to construc + // them into rm's Machine class. + // + // The alternative, passing RM's Machine to the query object creates a circular + // dependency with RM depending on common and common depending on RM. + // + + // + // Not a cheap query, by the way. + // + for ( NodePool np : nodepools ) { + collectMachinesForQuery(np, ret); + + Collection<NodePool> pools = np.getChildren().values(); + for ( NodePool npp : pools ) { + collectMachinesForQuery(npp, ret); + } + } + + return ret; + } + /** * Callback from job manager, need shares for a new fair-share job. */ Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Share.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Share.java?rev=1596375&r1=1596374&r2=1596375&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Share.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Share.java Tue May 20 19:26:52 2014 @@ -42,9 +42,6 @@ public class Share private int share_order; // may not be same as machine's order private ITimeWindow init_time = null; // how much time this process spends initializing - @SuppressWarnings("unused") - private ITimeWindow run_time = null; // how much time this process spends initializing - // private HashMap<Integer, Long> activeQuestions = new HashMap<Integer, Long>(); @@ -213,7 +210,7 @@ public class Share // so we don't end up counting this job more than it deserves. } - public boolean update(DuccId jobid, long mem, long investment, ProcessState state, ITimeWindow init_time, ITimeWindow run_time, String pid) + public boolean update(DuccId jobid, long mem, long investment, ProcessState state, ITimeWindow init_time, String pid) { if ( ! jobid.equals(job.getId()) ) return false; // something has gone horribly wrong @@ -222,7 +219,6 @@ public class Share this.state = state; this.pid = pid; this.init_time = init_time; - this.run_time = run_time; return true; }