From swift at ci.uchicago.edu Mon Jul 2 11:30:05 2012 From: swift at ci.uchicago.edu (swift at ci.uchicago.edu) Date: Mon, 2 Jul 2012 11:30:05 -0500 (CDT) Subject: [Swift-commit] cog r3424 Message-ID: <20120702163005.62E128D00D8C@bridled.ci.uchicago.edu> ------------------------------------------------------------------------ r3424 | hategan | 2012-07-02 11:29:36 -0500 (Mon, 02 Jul 2012) | 1 line fixed deadlock when shutting down coaster service (bug 795) ------------------------------------------------------------------------ Index: modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/BlockQueueProcessor.java =================================================================== --- modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/BlockQueueProcessor.java (revision 3423) +++ modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/BlockQueueProcessor.java (working copy) @@ -789,11 +789,13 @@ private void shutdownBlocks() { logger.info("Shutting down blocks"); + List bl; synchronized (blocks) { - for (Block b : new ArrayList(blocks.values())) { - b.shutdown(true); - } + bl = new ArrayList(blocks.values()); } + for (Block b : bl) { + b.shutdown(true); + } } public void blockTaskFinished(Block block) { From hategan at ci.uchicago.edu Mon Jul 2 11:41:05 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Mon, 2 Jul 2012 11:41:05 -0500 (CDT) Subject: [Swift-commit] r5815 - trunk/src/org/griphyn/vdl/karajan Message-ID: <20120702164105.2A3D29CCC9@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-02 11:41:04 -0500 (Mon, 02 Jul 2012) New Revision: 5815 Modified: trunk/src/org/griphyn/vdl/karajan/Monitor.java Log: trap exceptions when getting variable type (see bug 795) so that the hang checker prints useful stuff, but also dump trapped exceptions Modified: trunk/src/org/griphyn/vdl/karajan/Monitor.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/Monitor.java 2012-06-23 20:44:26 UTC (rev 5814) +++ trunk/src/org/griphyn/vdl/karajan/Monitor.java 2012-07-02 16:41:04 UTC (rev 5815) @@ -233,7 +233,13 @@ catch (Exception e) { value = ""; } - ps.println(handle.getType() + " " + handle.getDisplayableName() + " " + value + " " + f); + try { + ps.println(handle.getType() + " " + handle.getDisplayableName() + " " + value + " " + f); + } + catch (Exception e) { + ps.println(handle.getDisplayableName() + " - error"); + e.printStackTrace(ps); + } } ps.println("----"); } From davidk at ci.uchicago.edu Mon Jul 2 15:47:18 2012 From: davidk at ci.uchicago.edu (davidk at ci.uchicago.edu) Date: Mon, 2 Jul 2012 15:47:18 -0500 (CDT) Subject: [Swift-commit] r5816 - trunk/examples/misc Message-ID: <20120702204718.BC5659CCC9@svn.ci.uchicago.edu> Author: davidk Date: 2012-07-02 15:47:18 -0500 (Mon, 02 Jul 2012) New Revision: 5816 Modified: trunk/examples/misc/catsn.swift trunk/examples/misc/hostsn.swift Log: Use toInt rather than toint for test scripts Modified: trunk/examples/misc/catsn.swift =================================================================== --- trunk/examples/misc/catsn.swift 2012-07-02 16:41:04 UTC (rev 5815) +++ trunk/examples/misc/catsn.swift 2012-07-02 20:47:18 UTC (rev 5816) @@ -9,7 +9,7 @@ string char[] = @strsplit(t, ""); file out[]; -foreach j in [1:@toint(@arg("n","10"))] { +foreach j in [1:@toInt(@arg("n","10"))] { file data<"data.txt">; out[j] = cat(data); } Modified: trunk/examples/misc/hostsn.swift =================================================================== --- trunk/examples/misc/hostsn.swift 2012-07-02 16:41:04 UTC (rev 5815) +++ trunk/examples/misc/hostsn.swift 2012-07-02 20:47:18 UTC (rev 5816) @@ -6,6 +6,6 @@ } file out[]; -foreach j in [1:@toint(@arg("n","1"))] { +foreach j in [1:@toInt(@arg("n","1"))] { out[j] = hostname(); } From davidk at ci.uchicago.edu Wed Jul 4 20:56:36 2012 From: davidk at ci.uchicago.edu (davidk at ci.uchicago.edu) Date: Wed, 4 Jul 2012 20:56:36 -0500 (CDT) Subject: [Swift-commit] r5817 - trunk/bin Message-ID: <20120705015636.63AE79CC9F@svn.ci.uchicago.edu> Author: davidk Date: 2012-07-04 20:56:35 -0500 (Wed, 04 Jul 2012) New Revision: 5817 Modified: trunk/bin/start-coaster-service Log: Remove completed jobs from the condor queue Modified: trunk/bin/start-coaster-service =================================================================== --- trunk/bin/start-coaster-service 2012-07-02 20:47:18 UTC (rev 5816) +++ trunk/bin/start-coaster-service 2012-07-05 01:56:35 UTC (rev 5817) @@ -281,7 +281,7 @@ executable = $SWIFT_BIN/$WORKER arguments = $EXECUTION_URL node . notification = Never -leave_in_queue = TRUE +leave_in_queue = FALSE machine_count = $CONDOR_MACHINE_COUNT queue $CONDOR_WORKERS EOF From hategan at ci.uchicago.edu Fri Jul 6 01:15:36 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Fri, 6 Jul 2012 01:15:36 -0500 (CDT) Subject: [Swift-commit] r5818 - in trunk/src/org/griphyn/vdl: mapping/file util Message-ID: <20120706061536.451A59CCA3@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-06 01:15:35 -0500 (Fri, 06 Jul 2012) New Revision: 5818 Modified: trunk/src/org/griphyn/vdl/mapping/file/FileGarbageCollector.java trunk/src/org/griphyn/vdl/util/VDL2Config.java trunk/src/org/griphyn/vdl/util/VDL2ConfigProperties.java Log: added option to disable file garbage collection Modified: trunk/src/org/griphyn/vdl/mapping/file/FileGarbageCollector.java =================================================================== --- trunk/src/org/griphyn/vdl/mapping/file/FileGarbageCollector.java 2012-07-05 01:56:35 UTC (rev 5817) +++ trunk/src/org/griphyn/vdl/mapping/file/FileGarbageCollector.java 2012-07-06 06:15:35 UTC (rev 5818) @@ -17,6 +17,7 @@ package org.griphyn.vdl.mapping.file; +import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -26,6 +27,8 @@ import org.apache.log4j.Logger; import org.griphyn.vdl.mapping.PhysicalFormat; +import org.griphyn.vdl.util.VDL2Config; +import org.griphyn.vdl.util.VDL2ConfigProperties; public class FileGarbageCollector implements Runnable { public static final Logger logger = Logger.getLogger(FileGarbageCollector.class); @@ -43,22 +46,36 @@ private Thread thread; private Map usageCount; private Set persistent; - private boolean shutdown, done; + private boolean shutdown, done, enabled; public FileGarbageCollector() { queue = new LinkedList(); usageCount = new HashMap(); persistent = new HashSet(); - thread = new Thread(this, "File Garbage Collector"); - thread.setDaemon(true); - thread.start(); + try { + enabled = !"false".equals(VDL2Config.getConfig().getProperty(VDL2ConfigProperties.FILE_GC_ENABLED)); + } + catch (IOException e) { + //enabled by default + enabled = true; + } + if (enabled) { + thread = new Thread(this, "File Garbage Collector"); + thread.setDaemon(true); + thread.start(); + } } public synchronized void markAsPersistent(PhysicalFormat pf) { - persistent.add(pf); + if (enabled) { + persistent.add(pf); + } } public synchronized void decreaseUsageCount(PhysicalFormat pf) { + if (!enabled) { + return; + } assert Thread.holdsLock(this); Integer c = usageCount.get(pf); if (c == null) { @@ -84,6 +101,9 @@ } public synchronized void increaseUsageCount(PhysicalFormat pf) { + if (!enabled) { + return; + } // a usage count of 1 is assumed if the key is not in the map // A remap of a remappable mapper would increase the usage count to 2 Integer c = usageCount.get(pf); @@ -125,7 +145,7 @@ public void waitFor() throws InterruptedException { shutdown = true; - while (!done) { + while (!done && enabled) { synchronized(this) { notify(); } Modified: trunk/src/org/griphyn/vdl/util/VDL2Config.java =================================================================== --- trunk/src/org/griphyn/vdl/util/VDL2Config.java 2012-07-05 01:56:35 UTC (rev 5817) +++ trunk/src/org/griphyn/vdl/util/VDL2Config.java 2012-07-06 06:15:35 UTC (rev 5818) @@ -117,6 +117,8 @@ put("use.provider.staging", "false"); put("ticker.date.format", ""); put("ticker.prefix", "Progress: time:"); + + put(VDL2ConfigProperties.FILE_GC_ENABLED, "true"); } private VDL2Config(VDL2Config other) { Modified: trunk/src/org/griphyn/vdl/util/VDL2ConfigProperties.java =================================================================== --- trunk/src/org/griphyn/vdl/util/VDL2ConfigProperties.java 2012-07-05 01:56:35 UTC (rev 5817) +++ trunk/src/org/griphyn/vdl/util/VDL2ConfigProperties.java 2012-07-06 06:15:35 UTC (rev 5818) @@ -42,6 +42,7 @@ public static final String WRAPPERLOG_ALWAYS_TRANSFER = "wrapperlog.always.transfer"; public static final String SITEDIR_KEEP = "sitedir.keep"; public static final String PROVENANCE_LOG = "provenance.log"; + public static final String FILE_GC_ENABLED = "file.gc.enabled"; public static final Map PROPERTIES; static { @@ -133,6 +134,9 @@ "", "If set to true, will record provenance information in the log file")); + PROPERTIES.put(FILE_GC_ENABLED, new PropInfo("", "Allows disabling the file garbage collector. " + + "If set to false, files mapped by collectable mappers (such as the concurrent mapper) will not be " + + "deleted when their swift variables go out of scope.")); } public static Map getPropertyDescriptions() { From hategan at ci.uchicago.edu Fri Jul 6 01:33:04 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Fri, 6 Jul 2012 01:33:04 -0500 (CDT) Subject: [Swift-commit] r5819 - trunk/etc Message-ID: <20120706063304.91B569CCA3@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-06 01:33:04 -0500 (Fri, 06 Jul 2012) New Revision: 5819 Modified: trunk/etc/swift.properties Log: updated swift.properties with file.gc.enabled property Modified: trunk/etc/swift.properties =================================================================== --- trunk/etc/swift.properties 2012-07-06 06:15:35 UTC (rev 5818) +++ trunk/etc/swift.properties 2012-07-06 06:33:04 UTC (rev 5819) @@ -365,3 +365,14 @@ # * the file in question (relative to the current work directory) # #wrapper.staging.local.server=file:// + +# Files mapped by the concurrent mapper (i.e. when you don't +# explicitly specify a mapper) are deleted when they are not +# in use any more. This property can be used to prevent +# files mapped by the concurrent mapper from being deleted. +# +# Format: +# file.gc.enabled=(true|false) +# +# Default: true +# From davidk at ci.uchicago.edu Fri Jul 6 12:30:11 2012 From: davidk at ci.uchicago.edu (davidk at ci.uchicago.edu) Date: Fri, 6 Jul 2012 12:30:11 -0500 (CDT) Subject: [Swift-commit] r5820 - trunk/bin Message-ID: <20120706173011.D729F9CC9F@svn.ci.uchicago.edu> Author: davidk Date: 2012-07-06 12:30:11 -0500 (Fri, 06 Jul 2012) New Revision: 5820 Modified: trunk/bin/start-coaster-service Log: Disable wrapper staging when scs generates a config file Modified: trunk/bin/start-coaster-service =================================================================== --- trunk/bin/start-coaster-service 2012-07-06 06:33:04 UTC (rev 5819) +++ trunk/bin/start-coaster-service 2012-07-06 17:30:11 UTC (rev 5820) @@ -534,6 +534,7 @@ execution.retries=10 provider.staging.pin.swiftfiles=false sitedir.keep=false +use.wrapper.staging=false EOF fi From hategan at ci.uchicago.edu Sat Jul 7 19:05:40 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Sat, 7 Jul 2012 19:05:40 -0500 (CDT) Subject: [Swift-commit] r5821 - trunk/src/org/griphyn/vdl/karajan/lib Message-ID: <20120708000540.4856A9CCA3@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-07 19:05:39 -0500 (Sat, 07 Jul 2012) New Revision: 5821 Modified: trunk/src/org/griphyn/vdl/karajan/lib/Log.java Log: use 'swift' as log source. It's faster vs. not very useful Modified: trunk/src/org/griphyn/vdl/karajan/lib/Log.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/lib/Log.java 2012-07-06 17:30:11 UTC (rev 5820) +++ trunk/src/org/griphyn/vdl/karajan/lib/Log.java 2012-07-08 00:05:39 UTC (rev 5821) @@ -26,13 +26,10 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.globus.cog.karajan.arguments.Arg; -import org.globus.cog.karajan.stack.Trace; -import org.globus.cog.karajan.stack.VariableNotFoundException; import org.globus.cog.karajan.stack.VariableStack; import org.globus.cog.karajan.util.TypeUtil; import org.globus.cog.karajan.workflow.ExecutionException; import org.globus.cog.karajan.workflow.nodes.AbstractSequentialWithArguments; -import org.globus.cog.karajan.workflow.nodes.FlowElement; public class Log extends AbstractSequentialWithArguments { public static final Arg LEVEL = new Arg.Positional("level"); @@ -42,24 +39,10 @@ setArguments(Log.class, new Arg[] { LEVEL, MESSAGE, Arg.VARGS }); } - private static Map loggers = new HashMap(); + public static final Logger logger = Logger.getLogger("swift"); + private static final Map priorities = new HashMap(); - public static Logger getLogger(String cls) { - Logger logger; - synchronized (loggers) { - logger = (Logger) loggers.get(cls); - if (logger == null) { - logger = Logger.getLogger("swift." + cls); - loggers.put(cls, logger); - } - } - return logger; - } - - private static Map priorities; - static { - priorities = new HashMap(); priorities.put("debug", Level.DEBUG); priorities.put("info", Level.INFO); priorities.put("warn", Level.WARN); @@ -68,26 +51,11 @@ } public static Level getLevel(String lvl) { - return (Level) priorities.get(lvl); + return priorities.get(lvl); } - + protected void post(VariableStack stack) throws ExecutionException { - String cls; - FlowElement fe; - try{ - fe = (FlowElement) stack.getDeepVar(Trace.ELEMENT); - } - catch (VariableNotFoundException e) { - fe = null; - } - if (fe != null) { - cls = fe.getElementType(); - } - else { - cls = "unknown"; - } Level lvl = getLevel((String) LEVEL.getValue(stack)); - Logger logger = getLogger(cls); if (logger.isEnabledFor(lvl)) { Object smsg = MESSAGE.getValue(stack); if (smsg != null) { From hategan at ci.uchicago.edu Sat Jul 7 19:33:44 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Sat, 7 Jul 2012 19:33:44 -0500 (CDT) Subject: [Swift-commit] r5822 - trunk/src/org/griphyn/vdl/karajan/lib Message-ID: <20120708003344.4B8259CCA3@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-07 19:33:44 -0500 (Sat, 07 Jul 2012) New Revision: 5822 Modified: trunk/src/org/griphyn/vdl/karajan/lib/RuntimeStats.java Log: also log progress lines Modified: trunk/src/org/griphyn/vdl/karajan/lib/RuntimeStats.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/lib/RuntimeStats.java 2012-07-08 00:05:39 UTC (rev 5821) +++ trunk/src/org/griphyn/vdl/karajan/lib/RuntimeStats.java 2012-07-08 00:33:44 UTC (rev 5822) @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.Map; +import org.apache.log4j.Logger; import org.globus.cog.karajan.arguments.Arg; import org.globus.cog.karajan.stack.VariableNotFoundException; import org.globus.cog.karajan.stack.VariableStack; @@ -43,7 +44,7 @@ public static SimpleDateFormat formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); public static final int MIN_PERIOD_MS=1000; - public static final int MAX_PERIOD_MS=30000; + public static final int MAX_PERIOD_MS=3000; public static final String[] preferredOutputOrder = { "uninitialized", @@ -142,6 +143,8 @@ static public class ProgressTicker extends Thread { + + public static final Logger logger = Logger.getLogger(ProgressTicker.class); private Map counts; @@ -227,35 +230,47 @@ printStates("Final status:"); } - public synchronized Map getSummary() { + public synchronized Map getSummary() { return new HashMap(counts); } void printStates(String prefix) { Map summary = getSummary(); - // SimpleDateFormat formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z"); + + StringBuilder sb = new StringBuilder(); // output the results of summarization, in a relatively // pretty form - first the preferred order listed elements, // and then anything remaining - System.err.print(prefix + " "); - //System.err.print(" time:" + (System.currentTimeMillis() - start)); + System.err.print(prefix); + System.err.print(" "); System.err.print(formatter.format(System.currentTimeMillis())); - + for (int pos = 0; pos < preferredOutputOrder.length; pos++) { String key = preferredOutputOrder[pos]; Integer value = summary.get(key); if(value != null) { - System.err.print(" " + key + ":" + value); + sb.append(" "); + sb.append(key); + sb.append(":"); + sb.append(value); } summary.remove(key); } for (Map.Entry s : summary.entrySet()) { - System.err.print(" " + s.getKey() + ":" + s.getValue()); + sb.append(" "); + sb.append(s.getKey()); + sb.append(":"); + sb.append(s.getValue()); } + + String msg = sb.toString(); - System.err.println(); + System.err.println(msg); + if (logger.isInfoEnabled()) { + logger.info(msg); + } } } From swift at ci.uchicago.edu Mon Jul 9 23:15:04 2012 From: swift at ci.uchicago.edu (swift at ci.uchicago.edu) Date: Mon, 9 Jul 2012 23:15:04 -0500 (CDT) Subject: [Swift-commit] cog r3425 Message-ID: <20120710041505.8EB5D8D00DC5@bridled.ci.uchicago.edu> ------------------------------------------------------------------------ r3425 | hategan | 2012-07-09 23:10:49 -0500 (Mon, 09 Jul 2012) | 1 line make sure a valid (non-null) exception makes it to the callback ------------------------------------------------------------------------ Index: modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/providers/ProxyIOProvider.java =================================================================== --- modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/providers/ProxyIOProvider.java (revision 3424) +++ modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/providers/ProxyIOProvider.java (working copy) @@ -347,7 +347,17 @@ } } else { - cb.error(this, t); + if (msg == null) { + cb.error(this, t); + } + else { + if (t == null) { + cb.error(this, new IOException(msg)); + } + else { + cb.error(this, new IOException(msg, t)); + } + } } } From swift at ci.uchicago.edu Mon Jul 9 23:30:04 2012 From: swift at ci.uchicago.edu (swift at ci.uchicago.edu) Date: Mon, 9 Jul 2012 23:30:04 -0500 (CDT) Subject: [Swift-commit] cog r3426 Message-ID: <20120710043004.3E9B18D00DC5@bridled.ci.uchicago.edu> ------------------------------------------------------------------------ r3426 | hategan | 2012-07-09 23:28:10 -0500 (Mon, 09 Jul 2012) | 1 line and if the handler gets a null exception, make sure not to crash ------------------------------------------------------------------------ Index: modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/GetFileHandler.java =================================================================== --- modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/GetFileHandler.java (revision 3425) +++ modules/provider-coaster/src/org/globus/cog/abstraction/impl/file/coaster/handlers/GetFileHandler.java (working copy) @@ -138,8 +138,13 @@ } public void error(IOHandle op, Exception e) { - getChannel().sendTaggedReply(getId(), e.getMessage() != null ? e.getMessage().getBytes() : e.toString().getBytes(), + if (e == null) { + getChannel().sendTaggedReply(getId(), "Unknown error".getBytes(), KarajanChannel.FINAL_FLAG + KarajanChannel.ERROR_FLAG); + } + else { + getChannel().sendTaggedReply(getId(), e.getMessage() != null ? e.getMessage().getBytes() : e.toString().getBytes(), KarajanChannel.FINAL_FLAG + KarajanChannel.ERROR_FLAG); + } } public void length(long len) { From hategan at ci.uchicago.edu Wed Jul 11 15:35:21 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Wed, 11 Jul 2012 15:35:21 -0500 (CDT) Subject: [Swift-commit] r5824 - trunk/src/org/griphyn/vdl/karajan Message-ID: <20120711203521.D5C079CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-11 15:35:21 -0500 (Wed, 11 Jul 2012) New Revision: 5824 Modified: trunk/src/org/griphyn/vdl/karajan/ArrayIndexFutureList.java Log: fix potential deadlock Modified: trunk/src/org/griphyn/vdl/karajan/ArrayIndexFutureList.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/ArrayIndexFutureList.java 2012-07-08 00:35:40 UTC (rev 5823) +++ trunk/src/org/griphyn/vdl/karajan/ArrayIndexFutureList.java 2012-07-11 20:35:21 UTC (rev 5824) @@ -28,6 +28,7 @@ import java.util.Set; import org.globus.cog.karajan.stack.VariableStack; +import org.globus.cog.karajan.workflow.events.EventBus; import org.globus.cog.karajan.workflow.events.EventTargetPair; import org.globus.cog.karajan.workflow.futures.FutureEvaluationException; import org.globus.cog.karajan.workflow.futures.FutureIterator; @@ -133,9 +134,13 @@ listeners = null; } - for (ListenerStackPair lsp : l) { + for (final ListenerStackPair lsp : l) { WaitingThreadsMonitor.removeThread(lsp.stack); - lsp.listener.futureModified(this, lsp.stack); + EventBus.post(new Runnable() { + public void run() { + lsp.listener.futureModified(ArrayIndexFutureList.this, lsp.stack); + } + }); } } From swift at ci.uchicago.edu Wed Jul 11 23:00:08 2012 From: swift at ci.uchicago.edu (swift at ci.uchicago.edu) Date: Wed, 11 Jul 2012 23:00:08 -0500 (CDT) Subject: [Swift-commit] cog r3427 Message-ID: <20120712040009.AC9E08D00DD9@bridled.ci.uchicago.edu> ------------------------------------------------------------------------ r3427 | hategan | 2012-07-11 22:55:52 -0500 (Wed, 11 Jul 2012) | 1 line fixed CPUs being overwritten in the sleeping set ------------------------------------------------------------------------ Index: modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/PullThread.java =================================================================== --- modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/PullThread.java (revision 3426) +++ modules/provider-coaster/src/org/globus/cog/abstraction/coaster/service/job/manager/PullThread.java (working copy) @@ -57,7 +57,10 @@ return 1; } else { - return 0; + // need some arbitrary ordering for different + // cpus, otherwise cpus with the same quality + // will overwrite each other in the sleeping set + return System.identityHashCode(a) - System.identityHashCode(b); } } }); From hategan at ci.uchicago.edu Thu Jul 12 11:20:48 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 11:20:48 -0500 (CDT) Subject: [Swift-commit] r5825 - in trunk/src/org/griphyn/vdl/karajan/monitor: monitors/ansi processors Message-ID: <20120712162048.959529CCC5@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 11:20:48 -0500 (Thu, 12 Jul 2012) New Revision: 5825 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/SummaryPane.java trunk/src/org/griphyn/vdl/karajan/monitor/processors/SummaryProcessor.java Log: fixed incorrect non-zero values when a state is missing from the progress ticker output line Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/SummaryPane.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/SummaryPane.java 2012-07-11 20:35:21 UTC (rev 5824) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/SummaryPane.java 2012-07-12 16:20:48 UTC (rev 5825) @@ -34,7 +34,7 @@ public class SummaryPane extends Container { private SystemState state; - private static final String[] STATES = new String[] { "Initializing", "Selecting site", + public static final String[] STATES = new String[] { "Initializing", "Selecting site", "Stage in", "Submitting", "Submitted", "Active", "Stage out", "Failed", "Replicating", "Finished successfully" }; Modified: trunk/src/org/griphyn/vdl/karajan/monitor/processors/SummaryProcessor.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/processors/SummaryProcessor.java 2012-07-11 20:35:21 UTC (rev 5824) +++ trunk/src/org/griphyn/vdl/karajan/monitor/processors/SummaryProcessor.java 2012-07-12 16:20:48 UTC (rev 5825) @@ -25,6 +25,7 @@ import org.griphyn.vdl.karajan.monitor.SystemState; import org.griphyn.vdl.karajan.monitor.items.StatefulItemClass; import org.griphyn.vdl.karajan.monitor.items.SummaryItem; +import org.griphyn.vdl.karajan.monitor.monitors.ansi.SummaryPane; public class SummaryProcessor extends AbstractMessageProcessor { @@ -47,6 +48,9 @@ } } String[] pairs = msg.split(" "); + for (String key : SummaryPane.STATES) { + s.setCount(key, 0); + } for (String pair : pairs) { if (pair.equals("")) { continue; From hategan at ci.uchicago.edu Thu Jul 12 12:34:24 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 12:34:24 -0500 (CDT) Subject: [Swift-commit] r5826 - trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui Message-ID: <20120712173424.D59369CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 12:34:24 -0500 (Thu, 12 Jul 2012) New Revision: 5826 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Table.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/TableColumn.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java Log: nicer tables and fixed last column size rounding issue Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java 2012-07-12 16:20:48 UTC (rev 5825) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java 2012-07-12 17:34:24 UTC (rev 5826) @@ -35,6 +35,11 @@ public static final int WHITE = 7; public static final int DEFAULT = 9; + /* + * UL UM UR + * ML CR MR + * LL LM LR + */ public static final int GCH_LR_CORNER = 106; public static final int GCH_UR_CORNER = 107; public static final int GCH_UL_CORNER = 108; Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java 2012-07-12 16:20:48 UTC (rev 5825) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java 2012-07-12 17:34:24 UTC (rev 5826) @@ -23,6 +23,21 @@ import java.io.IOException; public class HLine extends Component { + + private boolean leftEndCap, rightEndCap; + + public HLine(boolean leftEndCap, boolean rightEndCap) { + this.leftEndCap = leftEndCap; + this.rightEndCap = rightEndCap; + } + + public HLine(boolean endCaps) { + this(endCaps, endCaps); + } + + public HLine() { + this(false); + } protected void draw(ANSIContext context) throws IOException { context.lock(); @@ -34,6 +49,14 @@ for (int i = 0; i < width; i++) { context.putChar(ANSI.GCH_H_LINE); } + if (leftEndCap) { + context.moveTo(sx - 1, sy); + context.putChar(ANSI.GCH_ML_CORNER); + } + if (rightEndCap) { + context.moveTo(sx + width, sy); + context.putChar(ANSI.GCH_MR_CORNER); + } context.lineArt(false); } finally { Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Table.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Table.java 2012-07-12 16:20:48 UTC (rev 5825) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Table.java 2012-07-12 17:34:24 UTC (rev 5826) @@ -21,7 +21,6 @@ package org.griphyn.vdl.karajan.monitor.monitors.ansi.tui; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import javax.swing.event.TableModelEvent; @@ -47,7 +46,6 @@ this.model = model; colWidths = new HashMap(); sb = new VScrollbar(); - sb.setBackgroundChar(ANSI.GCH_V_LINE); sb.setThumbChar(ANSI.GCH_BULLET); cellRenderer = new DefaultTableCellRenderer(); } @@ -84,8 +82,8 @@ return; } removeAll(); - sb.setLocation(width, 0); - sb.setSize(1, height); + sb.setLocation(width, 2); + sb.setSize(1, height - 2); sb.setBgColor(bgColor); sb.setFgColor(fgColor); int cc = model.getColumnCount(); @@ -117,11 +115,16 @@ c.setBgColor(bgColor); c.setFgColor(fgColor); c.setLocation((int) cx, 0); - c.setSize(colWidth - 1, height); + if (last) { + c.setSize(width - (int) cx, height); + } + else { + c.setSize(colWidth - 1, height); + } add(c); if (!last) { - VLine l = new VLine(); + VLine l = new VLine(true); l.setBgColor(bgColor); l.setFgColor(fgColor); l.setLocation((int) (cx + colWidth) - 1, 0); @@ -217,7 +220,7 @@ return super.keyboardEvent(key); } } - + public TableCellRenderer getCellRenderer() { return cellRenderer; } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/TableColumn.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/TableColumn.java 2012-07-12 16:20:48 UTC (rev 5825) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/TableColumn.java 2012-07-12 17:34:24 UTC (rev 5826) @@ -76,7 +76,7 @@ text.setSize(width, 1); add(text); - HLine l = new HLine(); + HLine l = new HLine(index == 0, index == model.getColumnCount() - 1); l.setBgColor(bgColor); l.setFgColor(fgColor); l.setLocation(0, 1); Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java 2012-07-12 16:20:48 UTC (rev 5825) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java 2012-07-12 17:34:24 UTC (rev 5826) @@ -23,6 +23,21 @@ import java.io.IOException; public class VLine extends Component { + + private boolean topEndCap, bottomEndCap; + + public VLine(boolean topEndCap, boolean bottomEndCap) { + this.topEndCap = topEndCap; + this.bottomEndCap = bottomEndCap; + } + + public VLine(boolean endCaps) { + this(endCaps, endCaps); + } + + public VLine() { + this(false); + } protected void draw(ANSIContext context) throws IOException { context.bgColor(bgColor); @@ -32,6 +47,14 @@ context.moveTo(sx, sy + i); context.putChar(ANSI.GCH_V_LINE); } + if (topEndCap) { + context.moveTo(sx, sy - 1); + context.putChar(ANSI.GCH_UM_CORNER); + } + if (bottomEndCap) { + context.moveTo(sx, sy + height); + context.putChar(ANSI.GCH_LM_CORNER); + } context.lineArt(false); } } From hategan at ci.uchicago.edu Thu Jul 12 12:40:02 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 12:40:02 -0500 (CDT) Subject: [Swift-commit] r5827 - trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui Message-ID: <20120712174002.2E9BA9CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 12:40:02 -0500 (Thu, 12 Jul 2012) New Revision: 5827 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Frame.java Log: invert frame title colors; looks nicer Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Frame.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Frame.java 2012-07-12 17:34:24 UTC (rev 5826) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Frame.java 2012-07-12 17:40:02 UTC (rev 5827) @@ -42,7 +42,8 @@ } context.frame(sx, sy, width, height); - context.bgColor(bgColor); + context.bgColor(fgColor); + context.fgColor(bgColor); if (title != null) { int tl = title.length() + 2; int space = width - tl; From hategan at ci.uchicago.edu Thu Jul 12 12:50:22 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 12:50:22 -0500 (CDT) Subject: [Swift-commit] r5828 - trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi Message-ID: <20120712175022.C315B9CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 12:50:22 -0500 (Thu, 12 Jul 2012) New Revision: 5828 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/ANSIMonitor.java Log: avoid NPE at the end of run if TUI is closed without stopping the run Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/ANSIMonitor.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/ANSIMonitor.java 2012-07-12 17:40:02 UTC (rev 5827) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/ANSIMonitor.java 2012-07-12 17:50:22 UTC (rev 5828) @@ -92,7 +92,9 @@ public void shutdown() { try { - disp.close(); + if (disp != null) { + disp.close(); + } } catch (IOException e) { e.printStackTrace(); From hategan at ci.uchicago.edu Thu Jul 12 16:03:37 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 16:03:37 -0500 (CDT) Subject: [Swift-commit] r5829 - in trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi: . tui Message-ID: <20120712210337.7B6749CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 16:03:37 -0500 (Thu, 12 Jul 2012) New Revision: 5829 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/AbstractANSIDisplay.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/CharacterMap.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Graph.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Screen.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VHCrossing.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VScrollbar.java Log: ability to use unicode (if tui.use.unicode property set to true); support for more terminals using alternate size query method Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/AbstractANSIDisplay.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/AbstractANSIDisplay.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/AbstractANSIDisplay.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -98,6 +98,7 @@ } } catch (Exception e) { + logger.error("Could not run display", e); e.printStackTrace(); } } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSI.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -54,6 +54,10 @@ public static final int GCH_HASH = 97; public static final int GCH_BULLET = 96; + public static final int GCH_ARROW_UP = 94; + public static final int GCH_ARROW_DOWN = 95; + public static final int GCH_ARROW_LEFT = 60; + public static final int GCH_ARROW_RIGHT = 62; public static String moveTo(int x, int y) { return AESC + y + ';' + x + 'H'; Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -26,6 +26,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; import java.util.LinkedList; import java.util.List; @@ -43,15 +44,29 @@ private ScreenBuffer buf; private boolean doubleBuffered; private int lock; - private boolean done; + private boolean done, unicode; private Terminal terminal; private boolean redraw; + private UnicodeDrawingScheme uds; public ANSIContext(OutputStream os, InputStream is) { - this.os = new OutputStreamWriter(os); + try { + this.os = new OutputStreamWriter(os, "UTF8"); + } + catch (UnsupportedEncodingException e) { + logger.warn("UTF8 not supported here"); + this.os = new OutputStreamWriter(os); + } this.is = is; doubleBuffered = true; + unicode = "true".equals(System.getProperty("tui.use.unicode")); + if (unicode) { + uds = new UnicodeDrawingScheme.RoundedLight(); + } + else { + uds = new UnicodeDrawingScheme.ASCII(); + } } public void moveTo(int x, int y) throws IOException { @@ -117,15 +132,6 @@ } } - public void lineArt(boolean enabled) throws IOException { - if (doubleBuffered) { - buf.lineArt(enabled); - } - else { - os.write(ANSI.lineArt(enabled)); - } - } - public void printReply() throws IOException { try { Thread.sleep(100); @@ -140,6 +146,7 @@ } public boolean init() { + logger.info("Initializing terminal"); terminal = Terminal.setupTerminal(); try { terminal.initializeTerminal(); @@ -156,8 +163,16 @@ } return terminal.isANSISupported(); } + + private boolean querySizeWorks = true, alternate = false; public int[] querySize() throws IOException { + if (!querySizeWorks) { + return null; + } + if (alternate) { + return new int[] {terminal.getTerminalWidth(), terminal.getTerminalHeight() }; + } os.write(ANSI.AESC + "18t"); os.flush(); try { @@ -177,9 +192,16 @@ int[] sz = new int[2]; sz[0] = ((Integer) nums.get(1)).intValue(); sz[1] = ((Integer) nums.get(0)).intValue(); + logger.info("Terminal size is " + sz[0] + "x" + sz[1]); return sz; } - catch (UnsupportedOperationException e) { + catch (Exception e) { + logger.info("Could not query terminal size", e); + if (terminal.getTerminalWidth() != 0) { + alternate = true; + return new int[] {terminal.getTerminalWidth(), terminal.getTerminalHeight() }; + } + querySizeWorks = false; return null; } } @@ -427,8 +449,10 @@ } public void putChar(char c) throws IOException { - if (c < 32 || c >= 240) { - c = '.'; + if (!unicode) { + if (c < 32 || c >= 240) { + c = '.'; + } } if (doubleBuffered) { buf.write(c); @@ -439,8 +463,10 @@ } public void putChar(int c) throws IOException { - if (c < 32 || c >= 240) { - c = '.'; + if (!unicode) { + if (c < 32 || c >= 240) { + c = '.'; + } } if (doubleBuffered) { buf.write(c); @@ -461,51 +487,69 @@ } public void frame(int x, int y, int width, int height) throws IOException { - lineArt(true); moveTo(x, y); - putChar(ANSI.GCH_UL_CORNER); + lineArt(ANSI.GCH_UL_CORNER); for (int i = 0; i < width - 2; i++) { - putChar(ANSI.GCH_H_LINE); + lineArt(ANSI.GCH_H_LINE); } - putChar(ANSI.GCH_UR_CORNER); + lineArt(ANSI.GCH_UR_CORNER); for (int i = 0; i < height - 2; i++) { moveTo(x, y + i + 1); - putChar(ANSI.GCH_V_LINE); + lineArt(ANSI.GCH_V_LINE); moveTo(x + width - 1, y + i + 1); - putChar(ANSI.GCH_V_LINE); + lineArt(ANSI.GCH_V_LINE); } moveTo(x, y + height - 1); - putChar(ANSI.GCH_LL_CORNER); + lineArt(ANSI.GCH_LL_CORNER); for (int i = 0; i < width - 2; i++) { - putChar(ANSI.GCH_H_LINE); + lineArt(ANSI.GCH_H_LINE); } - putChar(ANSI.GCH_LR_CORNER); - lineArt(false); + lineArt(ANSI.GCH_LR_CORNER); } public void filledFrame(int x, int y, int width, int height) throws IOException { - lineArt(true); moveTo(x, y); - putChar(ANSI.GCH_UL_CORNER); + lineArt(ANSI.GCH_UL_CORNER); for (int i = 0; i < width - 2; i++) { - putChar(ANSI.GCH_H_LINE); + lineArt(ANSI.GCH_H_LINE); } - putChar(ANSI.GCH_UR_CORNER); + lineArt(ANSI.GCH_UR_CORNER); for (int i = 0; i < height - 2; i++) { moveTo(x, y + i + 1); - putChar(ANSI.GCH_V_LINE); + lineArt(ANSI.GCH_V_LINE); spaces(width - 2); - putChar(ANSI.GCH_V_LINE); + lineArt(ANSI.GCH_V_LINE); } moveTo(x, y + height - 1); - putChar(ANSI.GCH_LL_CORNER); + lineArt(ANSI.GCH_LL_CORNER); for (int i = 0; i < width - 2; i++) { - putChar(ANSI.GCH_H_LINE); + lineArt(ANSI.GCH_H_LINE); } - putChar(ANSI.GCH_LR_CORNER); - lineArt(false); + lineArt(ANSI.GCH_LR_CORNER); } + + public void lineArt(int code) throws IOException { + if (unicode) { + putChar(uds.getChar(code)); + } + else { + lineArt(true); + putChar(uds.getChar(code)); + lineArt(false); + } + } + + public void lineArt(boolean enabled) throws IOException { + if (!unicode) { + if (doubleBuffered) { + buf.lineArt(enabled); + } + else { + os.write(ANSI.lineArt(enabled)); + } + } + } public void filledRect(int x, int y, int width, int height) throws IOException { Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/CharacterMap.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/CharacterMap.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/CharacterMap.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -30,12 +30,10 @@ protected void draw(ANSIContext context) throws IOException { for (int i = 0; i < 16; i++) { context.moveTo(sx, sy + i); - context.lineArt(true); for (int j = 0; j < 16; j++) { - context.putChar((char) (i*16 + j)); + context.lineArt((char) (i*16 + j)); context.putChar(' '); } - context.lineArt(false); } } } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Graph.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Graph.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Graph.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -54,51 +54,49 @@ int last = Integer.MIN_VALUE; i = data.iterator(); int j = sx + 1; - context.lineArt(true); while (i.hasNext()) { Double d = (Double) i.next(); double v = (d.doubleValue() - min) / (max - min) * (height - 3); int c = (int) v; if (last == Integer.MIN_VALUE || last == c) { context.moveTo(j, sy + height - c - 2); - context.putChar(ANSI.GCH_H_LINE); + context.lineArt(ANSI.GCH_H_LINE); } else if (last > c) { for (int k = c; k <= last; k ++) { context.moveTo(j, sy + height - k - 2); if (k == last) { - context.putChar(ANSI.GCH_UR_CORNER); + context.lineArt(ANSI.GCH_UR_CORNER); } else { - context.putChar(ANSI.GCH_V_LINE); + context.lineArt(ANSI.GCH_V_LINE); } } context.moveTo(j, sy + height - c - 2); - context.putChar(ANSI.GCH_LL_CORNER); + context.lineArt(ANSI.GCH_LL_CORNER); } else { for (int k = last; k < c; k ++) { context.moveTo(j, sy + height - k - 2); if (k == last) { - context.putChar(ANSI.GCH_LR_CORNER); + context.lineArt(ANSI.GCH_LR_CORNER); } else { - context.putChar(ANSI.GCH_V_LINE); + context.lineArt(ANSI.GCH_V_LINE); } } context.moveTo(j, sy + height - c - 2); - context.putChar(ANSI.GCH_UL_CORNER); + context.lineArt(ANSI.GCH_UL_CORNER); } last = c; j++; } context.moveTo(sx, sy + 1); - context.putChar(ANSI.GCH_CROSS); + context.lineArt(ANSI.GCH_CROSS); context.text(String.valueOf(max)); context.moveTo(sx, sy + height - 2); - context.putChar(ANSI.GCH_CROSS); + context.lineArt(ANSI.GCH_CROSS); context.text(String.valueOf(min)); - context.lineArt(false); } } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/HLine.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -44,20 +44,18 @@ try { context.bgColor(bgColor); context.fgColor(fgColor); - context.lineArt(true); context.moveTo(sx, sy); for (int i = 0; i < width; i++) { - context.putChar(ANSI.GCH_H_LINE); + context.lineArt(ANSI.GCH_H_LINE); } if (leftEndCap) { context.moveTo(sx - 1, sy); - context.putChar(ANSI.GCH_ML_CORNER); + context.lineArt(ANSI.GCH_ML_CORNER); } if (rightEndCap) { context.moveTo(sx + width, sy); - context.putChar(ANSI.GCH_MR_CORNER); + context.lineArt(ANSI.GCH_MR_CORNER); } - context.lineArt(false); } finally { context.unlock(); Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Screen.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Screen.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/Screen.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -39,9 +39,13 @@ public boolean init() throws IOException { if (!context.init()) { + logger.info("Terminal does not support ANSI escape sequences!"); return false; } int[] size = context.querySize(); + if (size == null) { + size = new int[] {80, 25}; + } setSize(size[0], size[1]); context.setScreen(this); context.clear(); Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VHCrossing.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VHCrossing.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VHCrossing.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -27,9 +27,7 @@ protected void draw(ANSIContext context) throws IOException { context.bgColor(bgColor); context.fgColor(fgColor); - context.lineArt(true); context.moveTo(sx, sy); - context.putChar(ANSI.GCH_CROSS); - context.lineArt(false); + context.lineArt(ANSI.GCH_CROSS); } } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VLine.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -42,19 +42,17 @@ protected void draw(ANSIContext context) throws IOException { context.bgColor(bgColor); context.fgColor(fgColor); - context.lineArt(true); for (int i = 0; i < height; i++) { context.moveTo(sx, sy + i); - context.putChar(ANSI.GCH_V_LINE); + context.lineArt(ANSI.GCH_V_LINE); } if (topEndCap) { context.moveTo(sx, sy - 1); - context.putChar(ANSI.GCH_UM_CORNER); + context.lineArt(ANSI.GCH_UM_CORNER); } if (bottomEndCap) { context.moveTo(sx, sy + height); - context.putChar(ANSI.GCH_LM_CORNER); + context.lineArt(ANSI.GCH_LM_CORNER); } - context.lineArt(false); } } Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VScrollbar.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VScrollbar.java 2012-07-12 17:50:22 UTC (rev 5828) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/VScrollbar.java 2012-07-12 21:03:37 UTC (rev 5829) @@ -37,10 +37,13 @@ protected void draw(ANSIContext context) throws IOException { context.bgColor(bgColor); context.fgColor(fgColor); - context.lineArt(true); - for (int i = 0; i < height; i++) { + context.moveTo(sx, sy); + context.lineArt(ANSI.GCH_ARROW_UP); + context.moveTo(sx, sy + height - 1); + context.lineArt(ANSI.GCH_ARROW_DOWN); + for (int i = 1; i < height - 1; i++) { context.moveTo(sx, sy + i); - context.putChar(backgroundChar); + context.lineArt(backgroundChar); } int pos = 0; if (total > 1) { @@ -50,15 +53,14 @@ if (current < 0) { current = 0; } - pos = (height - 1) * current / (total - 1); + pos = (height - 3) * current / (total - 1); } if (invertThumbColor) { context.bgColor(fgColor); context.fgColor(bgColor); } - context.moveTo(sx, sy + pos); - context.putChar(thumbChar); - context.lineArt(false); + context.moveTo(sx, sy + pos + 1); + context.lineArt(thumbChar); } public int getCurrent() { From hategan at ci.uchicago.edu Thu Jul 12 16:36:01 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Thu, 12 Jul 2012 16:36:01 -0500 (CDT) Subject: [Swift-commit] r5830 - trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui Message-ID: <20120712213601.05A4B9CCA2@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-12 16:36:00 -0500 (Thu, 12 Jul 2012) New Revision: 5830 Added: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/UnicodeDrawingScheme.java Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java Log: forgot UnicodeDrawingScheme and disable unicode if the output stream writer does not support UTF8 Modified: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java 2012-07-12 21:03:37 UTC (rev 5829) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/ANSIContext.java 2012-07-12 21:36:00 UTC (rev 5830) @@ -51,16 +51,17 @@ private UnicodeDrawingScheme uds; public ANSIContext(OutputStream os, InputStream is) { + unicode = "true".equals(System.getProperty("tui.use.unicode")); try { this.os = new OutputStreamWriter(os, "UTF8"); } catch (UnsupportedEncodingException e) { logger.warn("UTF8 not supported here"); this.os = new OutputStreamWriter(os); + unicode = false; } this.is = is; doubleBuffered = true; - unicode = "true".equals(System.getProperty("tui.use.unicode")); if (unicode) { uds = new UnicodeDrawingScheme.RoundedLight(); } Added: trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/UnicodeDrawingScheme.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/UnicodeDrawingScheme.java (rev 0) +++ trunk/src/org/griphyn/vdl/karajan/monitor/monitors/ansi/tui/UnicodeDrawingScheme.java 2012-07-12 21:36:00 UTC (rev 5830) @@ -0,0 +1,177 @@ +//---------------------------------------------------------------------- +//This code is developed as part of the Java CoG Kit project +//The terms of the license can be found at http://www.cogkit.org/license +//This message may not be removed or altered. +//---------------------------------------------------------------------- + +/* + * Created on Jul 12, 2012 + */ +package org.griphyn.vdl.karajan.monitor.monitors.ansi.tui; + +public interface UnicodeDrawingScheme { + char getChar(int code); + + + public static class ASCII implements UnicodeDrawingScheme { + @Override + public char getChar(int code) { + switch(code) { + case ANSI.GCH_LR_CORNER: + case ANSI.GCH_UR_CORNER: + case ANSI.GCH_UL_CORNER: + case ANSI.GCH_LL_CORNER: + case ANSI.GCH_CROSS: + case ANSI.GCH_H_LINE: + case ANSI.GCH_V_LINE: + case ANSI.GCH_ML_CORNER: + case ANSI.GCH_MR_CORNER: + case ANSI.GCH_LM_CORNER: + case ANSI.GCH_UM_CORNER: + case ANSI.GCH_HASH: + case ANSI.GCH_BULLET: + return (char) code; + case ANSI.GCH_ARROW_DOWN: + case ANSI.GCH_ARROW_UP: + return '-'; + case ANSI.GCH_ARROW_LEFT: + case ANSI.GCH_ARROW_RIGHT: + return '|'; + default: + return '.'; + } + } + } + + public static class SquareHeavy implements UnicodeDrawingScheme { + @Override + public char getChar(int code) { + switch(code) { + case ANSI.GCH_LR_CORNER: + return '\u251b'; + case ANSI.GCH_UR_CORNER: + return '\u2513'; + case ANSI.GCH_UL_CORNER: + return '\u250f'; + case ANSI.GCH_LL_CORNER: + return '\u2517'; + case ANSI.GCH_CROSS: + return '\u254b'; + case ANSI.GCH_H_LINE: + return '\u2501'; + case ANSI.GCH_V_LINE: + return '\u2503'; + case ANSI.GCH_ML_CORNER: + return '\u2523'; + case ANSI.GCH_MR_CORNER: + return '\u252b'; + case ANSI.GCH_LM_CORNER: + return '\u253b'; + case ANSI.GCH_UM_CORNER: + return '\u2533'; + case ANSI.GCH_HASH: + return '\u2592'; + case ANSI.GCH_BULLET: + return '\u2022'; + case ANSI.GCH_ARROW_DOWN: + return '\u21e9'; + case ANSI.GCH_ARROW_UP: + return '\u21e7'; + case ANSI.GCH_ARROW_LEFT: + return '\u21e6'; + case ANSI.GCH_ARROW_RIGHT: + return '\u21e8'; + default: + return '.'; + } + } + } + + public static class SquareLight implements UnicodeDrawingScheme { + @Override + public char getChar(int code) { + switch(code) { + case ANSI.GCH_LR_CORNER: + return '\u2518'; + case ANSI.GCH_UR_CORNER: + return '\u2510'; + case ANSI.GCH_UL_CORNER: + return '\u250c'; + case ANSI.GCH_LL_CORNER: + return '\u2514'; + case ANSI.GCH_CROSS: + return '\u253c'; + case ANSI.GCH_H_LINE: + return '\u2500'; + case ANSI.GCH_V_LINE: + return '\u2502'; + case ANSI.GCH_ML_CORNER: + return '\u251c'; + case ANSI.GCH_MR_CORNER: + return '\u2524'; + case ANSI.GCH_LM_CORNER: + return '\u2534'; + case ANSI.GCH_UM_CORNER: + return '\u252c'; + case ANSI.GCH_HASH: + return '\u2591'; + case ANSI.GCH_BULLET: + return '\u2022'; + case ANSI.GCH_ARROW_DOWN: + return '\u21e9'; + case ANSI.GCH_ARROW_UP: + return '\u21e7'; + case ANSI.GCH_ARROW_LEFT: + return '\u21e6'; + case ANSI.GCH_ARROW_RIGHT: + return '\u21e8'; + default: + return '.'; + } + } + } + + public static class RoundedLight implements UnicodeDrawingScheme { + @Override + public char getChar(int code) { + switch(code) { + case ANSI.GCH_LR_CORNER: + return '\u256f'; + case ANSI.GCH_UR_CORNER: + return '\u256e'; + case ANSI.GCH_UL_CORNER: + return '\u256d'; + case ANSI.GCH_LL_CORNER: + return '\u2570'; + case ANSI.GCH_CROSS: + return '\u253c'; + case ANSI.GCH_H_LINE: + return '\u2500'; + case ANSI.GCH_V_LINE: + return '\u2502'; + case ANSI.GCH_ML_CORNER: + return '\u251c'; + case ANSI.GCH_MR_CORNER: + return '\u2524'; + case ANSI.GCH_LM_CORNER: + return '\u2534'; + case ANSI.GCH_UM_CORNER: + return '\u252c'; + case ANSI.GCH_HASH: + return '\u2591'; + case ANSI.GCH_BULLET: + return '\u2263'; + case ANSI.GCH_ARROW_DOWN: + return '\u25bc'; + case ANSI.GCH_ARROW_UP: + return '\u25b2'; + case ANSI.GCH_ARROW_LEFT: + return '\u25c0'; + case ANSI.GCH_ARROW_RIGHT: + return '\u25b6'; + default: + return '.'; + } + } + } +} From swift at ci.uchicago.edu Sat Jul 14 01:10:05 2012 From: swift at ci.uchicago.edu (swift at ci.uchicago.edu) Date: Sat, 14 Jul 2012 01:10:05 -0500 (CDT) Subject: [Swift-commit] cog r3428 Message-ID: <20120714061006.349CC8D00DDA@bridled.ci.uchicago.edu> ------------------------------------------------------------------------ r3428 | hategan | 2012-07-14 01:05:34 -0500 (Sat, 14 Jul 2012) | 1 line fixed stack trace and made FlowNode.getTextualName public ------------------------------------------------------------------------ Index: modules/karajan/src/org/globus/cog/karajan/stack/LinkedStack.java =================================================================== --- modules/karajan/src/org/globus/cog/karajan/stack/LinkedStack.java (revision 3427) +++ modules/karajan/src/org/globus/cog/karajan/stack/LinkedStack.java (working copy) @@ -274,7 +274,7 @@ public VariableStack copy() { return new LinkedStack(this); } - + public String toString() { StringBuffer buf = new StringBuffer(); buf.append("Stack dump:\n"); @@ -364,9 +364,7 @@ if (caller != null) { l.add(caller); } - else { - crt = crt.prev; - } + crt = crt.prev; } return l; } Index: modules/karajan/src/org/globus/cog/karajan/stack/Trace.java =================================================================== --- modules/karajan/src/org/globus/cog/karajan/stack/Trace.java (revision 3427) +++ modules/karajan/src/org/globus/cog/karajan/stack/Trace.java (working copy) @@ -9,6 +9,9 @@ */ package org.globus.cog.karajan.stack; +import java.util.ArrayList; +import java.util.List; + import org.globus.cog.karajan.workflow.nodes.FlowElement; import org.globus.cog.karajan.workflow.nodes.FlowNode; @@ -16,31 +19,37 @@ public class Trace { public static final String ELEMENT = "#trace:element"; + public static List getAsList(VariableStack stack) { + List l = new ArrayList(); + boolean first = true; + for (int li = stack.frameCount() - 1; li >= 0; li--) { + StackFrame frame = stack.getFrame(li); + Object caller = frame.getRegs().getCaller(); + if (first) { + if (caller != null) { + l.add(caller); + first = false; + } + } + else { + if (frame.isDefined(ELEMENT)) { + l.add(frame.getVar(ELEMENT)); + } + else if (caller != null) { + l.add(caller); + } + } + } + return l; + } + public static String get(VariableStack stack) { StringBuffer buf = new StringBuffer(); - boolean first = true; - for (int li = stack.frameCount() - 1; li >= 0; li--) { - StackFrame frame = stack.getFrame(li); - if (first) { - if (frame.isDefined("#caller")) { - buf.append('\t'); - buf.append(frame.getVar("#caller")); - buf.append('\n'); - first = false; - } - } - else { - if (frame.isDefined(ELEMENT)) { - buf.append('\t'); - buf.append(frame.getVar(ELEMENT)); - buf.append('\n'); - } - else if (frame.isDefined("#caller")) { - buf.append('\t'); - buf.append(frame.getVar("#caller")); - buf.append('\n'); - } - } + List l = getAsList(stack); + for (Object o : l) { + buf.append('\t'); + buf.append(o); + buf.append('\n'); } return buf.toString(); } Index: modules/karajan/src/org/globus/cog/karajan/workflow/nodes/FlowNode.java =================================================================== --- modules/karajan/src/org/globus/cog/karajan/workflow/nodes/FlowNode.java (revision 3427) +++ modules/karajan/src/org/globus/cog/karajan/workflow/nodes/FlowNode.java (working copy) @@ -332,7 +332,7 @@ return sb.toString(); } - protected String getTextualName() { + public String getTextualName() { String tmp = getElementType(); if (tmp == null) { tmp = this.getClass().getName(); From hategan at ci.uchicago.edu Sat Jul 14 01:13:43 2012 From: hategan at ci.uchicago.edu (hategan at ci.uchicago.edu) Date: Sat, 14 Jul 2012 01:13:43 -0500 (CDT) Subject: [Swift-commit] r5831 - in trunk: libexec resources src/org/griphyn/vdl/engine src/org/griphyn/vdl/karajan src/org/griphyn/vdl/karajan/lib Message-ID: <20120714061343.0CA7D9CC82@svn.ci.uchicago.edu> Author: hategan Date: 2012-07-14 01:13:42 -0500 (Sat, 14 Jul 2012) New Revision: 5831 Added: trunk/src/org/griphyn/vdl/karajan/lib/UnitEnd.java trunk/src/org/griphyn/vdl/karajan/lib/UnitStart.java Modified: trunk/libexec/vdl-lib.xml trunk/resources/Karajan.stg trunk/resources/swiftscript.stg trunk/resources/swiftscript.xsd trunk/src/org/griphyn/vdl/engine/Karajan.java trunk/src/org/griphyn/vdl/karajan/ArrayIndexFutureList.java trunk/src/org/griphyn/vdl/karajan/DSHandleFutureWrapper.java trunk/src/org/griphyn/vdl/karajan/FuturePairIterator.java trunk/src/org/griphyn/vdl/karajan/HangChecker.java trunk/src/org/griphyn/vdl/karajan/Monitor.java trunk/src/org/griphyn/vdl/karajan/WaitingThreadsMonitor.java trunk/src/org/griphyn/vdl/karajan/lib/New.java Log: slightly nicer hang checker output (i.e. stack traces), print line where variables are declared when dumping them, and dependency cycle detection in the hang checker Modified: trunk/libexec/vdl-lib.xml =================================================================== --- trunk/libexec/vdl-lib.xml 2012-07-12 21:36:00 UTC (rev 5830) +++ trunk/libexec/vdl-lib.xml 2012-07-14 06:13:42 UTC (rev 5831) @@ -107,6 +107,9 @@ + + + Modified: trunk/resources/Karajan.stg =================================================================== --- trunk/resources/Karajan.stg 2012-07-12 21:36:00 UTC (rev 5830) +++ trunk/resources/Karajan.stg 2012-07-14 06:13:42 UTC (rev 5831) @@ -58,7 +58,7 @@ >> procedure(name,outputs,inputs,arguments,optargs,binding,declarations,statements,config,line,cleanups) ::= << - + $optargs:default_arg();separator="\n"$ $inputs:vdl_log_input();separator="\n"$ $outputs:vdl_log_output();separator="\n"$ @@ -72,14 +72,14 @@ >> compound(outputs,inputs,declarations,statements,config,name,cleanups) ::= << -STARTCOMPOUND thread={#thread} name=$name$ + $declarations;separator="\n"$ $if(statements)$ $parallel(statements=statements)$ $endif$ $outputs:vdl_closedataset();separator="\n"$ $cleanups:vdl_cleandataset();separator="\n"$ -ENDCOMPOUND thread={#thread} + >> proc_args(args) ::= << @@ -99,7 +99,7 @@ >> vdl_execute(outputs,inputs,attributes,application,name,line) ::= << - + $attributes$ $application.exec$ @@ -108,7 +108,7 @@ $vdl_arguments(attributes=application.attributes,arguments=application.arguments, stdin=application.stdin,stdout=application.stdout,stderr=application.stderr)$ $outputs:vdl_closedataset();separator="\n"$ - + >> vdl_log_input() ::= << @@ -145,6 +145,8 @@ >> +list() ::= <<$it.name$>> + vdl_arguments(attributes,arguments,stdin,stdout,stderr) ::= << $attributes$ @@ -202,8 +204,8 @@ // the 'function' template outputs a karajan code fragment // that calls a function in the 'swiftscript' namespace. -function(name, args, datatype) ::= << - +function(name, args, datatype, line) ::= << + $if(args)$ $args$ $endif$ >> @@ -231,15 +233,14 @@ $endif$ - -SCOPE thread={#thread} + $declarations;separator="\n"$ $if(statements)$ $parallel(statements=statements)$ $cleanups:vdl_cleandataset();separator="\n"$ $endif$ - + >> @@ -247,17 +248,17 @@ // they are not // $outputs:vdl_log_output();separator="\n"$ -callInternal(func, outputs, inputs) ::= << +callInternal(func, outputs, inputs, line) ::= << - + #thread -<$func$> +<$func$ _traceline="$line$"> $outputs:callInternal_log_output();separator="\n"$ $inputs:callInternal_log_input();separator="\n"$ - + >> @@ -287,8 +288,8 @@ >> -callUserDefined(func, outputs, inputs) ::= << -<$func$> +callUserDefined(func, outputs, inputs, line) ::= << +<$func$ _traceline="$line$"> $outputs;separator="\n"$ $inputs;separator="\n"$ @@ -312,19 +313,19 @@ >> -variable(name,type,expr,mapping,nil,file,waitfor,datatype,isGlobal) ::= << +variable(name,type,expr,mapping,nil,file,waitfor,datatype,isGlobal,line) ::= << $if(isGlobal)$$else$$endif$ $if(mapping)$ - + $vdl_mapping(mapping=mapping,file=file,waitfor=waitfor)$ $else$ $if(file)$ - + $vdl_mapping(mapping=mapping,file=file,waitfor=waitfor)$ $else$ - + $endif$ $endif$ $if(isGlobal)$$else$$endif$ @@ -445,12 +446,12 @@ $condition$ -SCOPE thread={#thread} + $vthen$ $if(velse)$ -SCOPE thread={#thread} + $velse$ $endif$ Modified: trunk/resources/swiftscript.stg =================================================================== --- trunk/resources/swiftscript.stg 2012-07-12 21:36:00 UTC (rev 5830) +++ trunk/resources/swiftscript.stg 2012-07-14 06:13:42 UTC (rev 5831) @@ -71,13 +71,13 @@ variable(type,name, sourcelocation, mapping, lfn, global) ::= << $if(lfn)$ - + $else$$if(mapping)$ - + $mapping$ $else$ -$endif$$endif$ +$endif$$endif$ >> mapping(descriptor,params,sourcelocation) ::= << @@ -140,25 +140,10 @@ parameter(type,name,outlink,defaultv,sourcelocation) ::= << $if(outlink)$ - $defaultv$$else$ xsi:nil="true"/>$endif$ $else$ - $defaultv$$else$ xsi:nil="true"/>$endif$ $endif$ - -name="$name$" type="$type$" - -$if(defaultv)$> -$defaultv$ - -$if(outlink)$ - -$else$ - -$endif$ - -$else$ - xsi:nil="true" /> -$endif$ >> app(exec,profiles,arguments,stdin,stdout,stderr,sourcelocation) ::= << @@ -193,7 +178,7 @@ >> functionInvocation(name,args,sourcelocation) ::= << - + $if(args)$ $args$ $endif$ Modified: trunk/resources/swiftscript.xsd =================================================================== --- trunk/resources/swiftscript.xsd 2012-07-12 21:36:00 UTC (rev 5830) +++ trunk/resources/swiftscript.xsd 2012-07-14 06:13:42 UTC (rev 5831) @@ -234,6 +234,8 @@ name of the mapping function + +