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() {


Reply via email to