Author: challngr Date: Tue Feb 12 17:27:47 2013 New Revision: 1445281 URL: http://svn.apache.org/r1445281 Log: UIMA-2658 Use -1 instead of flag for "no instances specified". Issue error from CLI on attempts to specify <= 0 instances.
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceModifyEvent.java uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStartEvent.java uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStopEvent.java Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java?rev=1445281&r1=1445280&r2=1445281&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccServiceApi.java Tue Feb 12 17:27:47 2013 @@ -473,16 +473,25 @@ public class DuccServiceApi throw new IllegalArgumentException("Invalid id; must be numeric or start with " + ServiceType.UimaAs.decode() + " or " + ServiceType.Custom.decode() + "."); } - private int getInstances(CommandLine cl, String deflt) + private int getInstances(CommandLine cl, int dflt) { - String nstncs = cl.getOptionValue(ServiceOptions.Instances.decode(), deflt); + String nstncs = cl.getOptionValue(ServiceOptions.Instances.decode()); + if ( nstncs == null ) { + return dflt; + } + int instances = 0; try { instances = Integer.parseInt(nstncs); } catch ( NumberFormatException e ) { - System.out.println ("--" + ServiceOptions.Instances.decode() + " " + nstncs + " is not numeric."); + System.out.println (ServiceOptions.Instances.decode() + " " + nstncs + " is not numeric."); doExit(1); } + if ( instances <= 0 ) { + System.out.println(ServiceOptions.Instances.decode() + " " + nstncs + " must be > 0"); + doExit(1); + } + return instances; } @@ -944,7 +953,7 @@ public class DuccServiceApi switch ( verb ) { case Register: props = getPropsFile(commandLine); - instances = getInstances(commandLine, "1"); + instances = getInstances(commandLine, 1); autostart = getAutostart(commandLine); reply = register(props, instances, autostart); break; @@ -954,19 +963,19 @@ public class DuccServiceApi break; case Start: id = getId(commandLine, verb); - instances = getInstances(commandLine, "0"); + instances = getInstances(commandLine, -1); update = getUpdate(commandLine); reply = start(id.first(), id.second(), instances, update); break; case Stop: id = getId(commandLine, verb); - instances = getInstances(commandLine, "0"); + instances = getInstances(commandLine, -1); update = getUpdate(commandLine); reply = stop(id.first(), id.second(), instances, update); break; case Modify: id = getId(commandLine, verb); - instances = getInstances(commandLine, "0"); + instances = getInstances(commandLine, -1); autostart = getAutostart(commandLine); activate = getActivate(commandLine); reply = modify(id.first(), id.second(), instances, autostart, activate); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java?rev=1445281&r1=1445280&r2=1445281&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceHandler.java Tue Feb 12 17:27:47 2013 @@ -738,7 +738,7 @@ public class ServiceHandler int registered = sset.getNInstances(); int wanted = 0; - if ( instances == 0 ) { + if ( instances == -1 ) { wanted = Math.max(0, registered - running); } else { wanted = instances; @@ -782,7 +782,7 @@ public class ServiceHandler int registered = sset.getNInstances(); int wanted = 0; - if ( instances == 0 ) { + if ( instances == -1 ) { wanted = Math.max(0, registered - running); } else { wanted = instances; @@ -822,16 +822,19 @@ public class ServiceHandler int running = sset.countImplementors(); int instances = ev.getInstances(); int tolose; - if ( instances == 0 ) { + if ( instances == -1 ) { tolose = running; } else { tolose = Math.min(instances, running); } - ApiHandler apih = new ApiHandler(ev, this); - Thread t = new Thread(apih); - t.start(); + if ( tolose > 0 ) { + ApiHandler apih = new ApiHandler(ev, this); + Thread t = new Thread(apih); + t.start(); + } + return new ServiceReplyEvent(ServiceCode.OK, "Service " + serviceIdString + " stop request accepted for [" + tolose + "] instances.", sset.getKey(), sset.getId()); } else { return new ServiceReplyEvent(ServiceCode.NOTOK, "Service " + friendly + " is not a registered service.", sset.getKey(), null); @@ -854,7 +857,7 @@ public class ServiceHandler int running = sset.countImplementors(); int tolose; - if ( instances == 0 ) { + if ( instances == -1 ) { tolose = running; } else { tolose = Math.min(instances, running); @@ -867,7 +870,7 @@ public class ServiceHandler if ( tolose == running ) { sset.stop(); // blind stop } else { - sset.stop(tolose); // selective stop (TODO: eventually) + sset.stop(tolose); // selective stop } } @@ -954,24 +957,27 @@ public class ServiceHandler if ( instances > 0 ) { sset.setNInstances(instances); // also persists instances + if ( activate ) { + int running = sset.countImplementors(); + int diff = instances - running; + + if ( diff > 0 ) { + while ( diff-- > 0 ) { + sset.start(); + } + } else if ( diff < 0 ) { + sset.stop(-diff); + } + } } if ( autostart != Trinary.Unset ) { sset.setAutostart(autostart.decode()); - } - - if ( activate && (instances >0) ) { - int running = sset.countImplementors(); - int diff = instances - running; - - if ( diff > 0 ) { - while ( diff-- > 0 ) { - sset.start(); - } - } else if ( diff < 0 ) { - sset.stop(-diff); + if ( activate ) { + sset.insuareAutostart(); } } + } public ServiceReplyEvent unregister(ServiceUnregisterEvent ev) Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceModifyEvent.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceModifyEvent.java?rev=1445281&r1=1445280&r2=1445281&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceModifyEvent.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceModifyEvent.java Tue Feb 12 17:27:47 2013 @@ -38,7 +38,7 @@ public class ServiceModifyEvent this.friendly = friendly; this.epname = epname; this.user = user; - this.instances = 0; + this.instances = -1; // default, instances aren't changed this.autostart = Trinary.Unset; this.activate = false; } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStartEvent.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStartEvent.java?rev=1445281&r1=1445280&r2=1445281&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStartEvent.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStartEvent.java Tue Feb 12 17:27:47 2013 @@ -34,6 +34,7 @@ public class ServiceStartEvent this.user = user; this.friendly = friendly; this.epname = epname; + this.instances = -1; // default, don't change number of instances } public int getFriendly() { Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStopEvent.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStopEvent.java?rev=1445281&r1=1445280&r2=1445281&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStopEvent.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ServiceStopEvent.java Tue Feb 12 17:27:47 2013 @@ -37,6 +37,7 @@ public class ServiceStopEvent this.friendly = friendly; this.epname = epname; this.user = user; + this.instances = -1; } public long getFriendly() {