You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ch...@apache.org on 2013/02/21 17:06:37 UTC

svn commit: r1448701 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm: IServiceManager.java ServiceHandler.java ServiceManagerComponent.java ServiceSet.java

Author: challngr
Date: Thu Feb 21 16:06:37 2013
New Revision: 1448701

URL: http://svn.apache.org/r1448701
Log:
UIMA-2594
Save meta an svc properties for "implicit" service.  Must save it, update/resave, and
then clean up when the pinger is stopped for such a service.

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.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-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java?rev=1448701&r1=1448700&r2=1448701&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/IServiceManager.java Thu Feb 21 16:06:37 2013
@@ -18,6 +18,7 @@
 */
 package org.apache.uima.ducc.sm;
 
+import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.event.ServiceModifyEvent;
 import org.apache.uima.ducc.transport.event.ServiceQueryEvent;
 import org.apache.uima.ducc.transport.event.ServiceRegisterEvent;
@@ -54,4 +55,5 @@ public interface IServiceManager 
 
     public void publish(ServiceMap map);
 
+    public DuccId newId() throws Exception;
 }

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=1448701&r1=1448700&r2=1448701&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 Thu Feb 21 16:06:37 2013
@@ -19,7 +19,6 @@
 package org.apache.uima.ducc.sm;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -244,9 +243,9 @@ public class ServiceHandler
             ServiceSet sset = serviceStateHandler.getServiceByName(dep);                            
             if ( sset == null ) {                              // first time, so it's by reference only
                 try {
-                    sset = new ServiceSet(dep);
+                    sset = new ServiceSet(dep, serviceManager.newId());
                     serviceStateHandler.putServiceByName(dep, sset);
-                } catch ( IllegalArgumentException e ) {       // if 'dep' is invalid we throw
+                } catch ( Exception e ) {       // if 'dep' is invalid, or we can't get a duccid,  we throw
                     s.addMessage(dep, e.getMessage());
                     s.setState(ServiceState.NotAvailable);
                     fatal = true;
@@ -893,7 +892,7 @@ public class ServiceHandler
 
         if (serviceStateHandler.getServiceByName(key) == null ) {
             try {
-                props.store(new FileOutputStream(props_filename), "Service descriptor.");
+                sset.saveServiceProperties();
             } catch ( Exception e ) {
                 error = ("Internal error; unable to store service descriptor. " + key);
                 logger.error(methodName, id, e);
@@ -902,7 +901,7 @@ public class ServiceHandler
             
             try {
                 if ( ! must_deregister ) {
-                    meta.store(new FileOutputStream(meta_filename), "Meta descriptor");
+                    sset.saveMetaProperties();
                 }
             } catch ( Exception e ) {
                 error = ("Internal error; unable to store service meta-descriptor. " + key);
@@ -1028,17 +1027,19 @@ public class ServiceHandler
             serviceStateHandler.removeService(epname, friendly);
         }
 
-        String metafn =  sset.getMetaFilename();
-        String propsfn = sset.getPropsFilename();
+        sset.deleteProperties();
 
-        if ( metafn != null ) {
-            File mf = new File(metafn);
-            mf.delete();
-        }
-        if ( propsfn != null ) {
-            File pf = new File(propsfn);
-            pf.delete();
-        }
+        // String metafn =  sset.getMetaFilename();
+        // String propsfn = sset.getPropsFilename();
+
+        // if ( metafn != null ) {
+        //     File mf = new File(metafn);
+        //     mf.delete();
+        // }
+        // if ( propsfn != null ) {
+        //     File pf = new File(propsfn);
+        //     pf.delete();
+        // }
 
     }
 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java?rev=1448701&r1=1448700&r2=1448701&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java Thu Feb 21 16:06:37 2013
@@ -178,10 +178,16 @@ public class ServiceManagerComponent 
         sm_props = new DuccProperties();
         File sf = new File(state_file);
         int seq = 0;
+        FileInputStream fos;
         if ( sf.exists() ) {
-            sm_props.load(new FileInputStream(state_file));
-            String s = sm_props.getProperty(service_seqno);
-            seq = Integer.parseInt(s) + 1;
+            fos = new FileInputStream(state_file);
+            try {
+                sm_props.load(fos);
+                String s = sm_props.getProperty(service_seqno);
+                seq = Integer.parseInt(s) + 1;
+            } finally {
+                fos.close();
+            }
         } 
 
         idFactory = new DuccIdFactory(seq);
@@ -771,7 +777,7 @@ public class ServiceManagerComponent 
         //ev.setReply(ServiceCode.OK, "Service not implemented.", "no-endpoint", null);
     }
 
-    private synchronized DuccId newId()
+    public synchronized DuccId newId()
         throws Exception
     {
         DuccId id = idFactory.next();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java?rev=1448701&r1=1448700&r2=1448701&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceSet.java Thu Feb 21 16:06:37 2013
@@ -19,6 +19,7 @@
 package org.apache.uima.ducc.sm;
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -119,14 +120,17 @@ public class ServiceSet
     //
     // This is the constructor for an implicit service
     //
-    public ServiceSet(String key)
+    public ServiceSet(String key, DuccId id)
     {
         this.key = key;
+        this.id = id;
         parseEndpoint(key);
 
         this.service_type = ServiceType.UimaAs;
         this.service_class = ServiceClass.Implicit;
 
+        String state_dir = System.getProperty("DUCC_HOME") + "/state";
+
         // need job props and meta props so pinger works
         // job props: , service_ping_class, service_ping_classpath, working_directory, log_directory
         // meta props: endpoint, user
@@ -138,6 +142,8 @@ public class ServiceSet
         job_props.put("working_directory", System.getProperty("user.dir")); // whatever my current dir is
         job_props.put("log_directory", System.getProperty("user.dir") + "/../logs");
         job_props.put("service_ping_jvm_args", "-Xmx50M");
+        props_filename = state_dir + "/services/" + id.toString() + ".svc";
+        saveServiceProperties();
 
         meta_props = new DuccProperties();
         meta_props.put("user", System.getProperty("user.name"));
@@ -150,6 +156,8 @@ public class ServiceSet
         meta_props.put("service-alive",      "false");
         meta_props.put("service-healthy",    "false");
         meta_props.put("service-statistics", "N/A");
+        meta_filename = state_dir + "/services/" + id.toString() + ".meta";
+        saveMetaProperties();
     }
 
     //
@@ -271,6 +279,22 @@ public class ServiceSet
 
     }
 
+    void deleteProperties()
+    {
+        // note that we're NOT synchronized - be sure to call this in a context where that's ok
+        // we want to avoid synchronizing on file activity in case somethng hangs.  which probably
+        // hoses us anyway :(
+        if ( meta_filename != null ) {
+             File mf = new File(meta_filename);
+             mf.delete();
+         }
+
+         if ( props_filename != null ) {
+             File pf = new File(props_filename);
+             pf.delete();
+         }
+    }
+
     void setIncoming(ServiceSet sset)
     {
         predecessors.add(sset);
@@ -493,7 +517,7 @@ public class ServiceSet
         return instances;
     }
 
-    private void saveMetaProperties()
+    void saveMetaProperties()
     {
         String methodName = "saveMetaProperties";
         meta_props.put("stopped", ""+stopped);
@@ -512,13 +536,40 @@ public class ServiceSet
             }
         }
         
-        try {
-			meta_props.store(new FileOutputStream(meta_filename), "Meta descriptor");
+        FileOutputStream fos = null;
+        try {            
+			fos = new FileOutputStream(meta_filename);            
+			meta_props.store(fos, "Meta descriptor");
 		} catch (FileNotFoundException e) {
             logger.warn(methodName, id, "Cannot save meta properties, file does not exist.");
 		} catch (IOException e) {
             logger.warn(methodName, id, "I/O Error saving meta properties:", e);
-		}
+		} finally {
+            try {
+				if ( fos != null ) fos.close();
+			} catch (IOException e) {
+			}
+        }
+        return;
+    }
+
+    void saveServiceProperties()
+    {
+        String methodName = "saveServiceProperties";
+        FileOutputStream fos = null;
+        try {
+        	fos = new FileOutputStream(props_filename);
+			job_props.store(fos, "Service descriptor");
+		} catch (FileNotFoundException e) {
+            logger.warn(methodName, id, "Cannot save service properties, file does not exist.");
+		} catch (IOException e) {
+            logger.warn(methodName, id, "I/O Error saving service properties:", e);
+		} finally {
+            try {
+				if ( fos != null ) fos.close();
+			} catch (IOException e) {
+			}
+        }
         return;
     }
 
@@ -917,7 +968,11 @@ public class ServiceSet
                                                         // main state machine, and maybe ping restarted.
             serviceMeta = null;
         }
-        saveMetaProperties();
+        if ( isImplicit() ) {
+            deleteProperties();
+        } else {
+            saveMetaProperties();
+        }
     }
 
     public synchronized void stopPingThread()
@@ -928,7 +983,11 @@ public class ServiceSet
             serviceMeta.stop();
             serviceMeta = null;
         }
-        saveMetaProperties();
+        if ( isImplicit() ) {
+            deleteProperties();
+        } else {
+            saveMetaProperties();
+        }
     }
 
     synchronized void setResponsive()