Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
 Wed Oct 28 18:12:53 2015
@@ -19,20 +19,23 @@
 package org.apache.uima.ducc.database;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.UUID;
 
+import org.apache.uima.ducc.common.persistence.IDbProperty;
 import org.apache.uima.ducc.common.persistence.services.IStateServices;
 import org.apache.uima.ducc.common.persistence.services.StateServicesDirectory;
 import org.apache.uima.ducc.common.persistence.services.StateServicesSet;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccProperties;
 import org.apache.uima.ducc.common.utils.id.DuccId;
-import org.apache.uima.ducc.database.DbConstants.DbCategory;
-import org.apache.uima.ducc.database.DbConstants.DbVertex;
 
-import com.tinkerpop.blueprints.impls.orient.OrientVertex;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.SimpleStatement;
 
 public class StateServicesDb
     implements IStateServices
@@ -40,25 +43,45 @@ public class StateServicesDb
        private DuccLogger logger = null;
     private DbManager dbManager;
 
+    private static final String SVC_TABLE = "ducc." + 
SvcRegProps.TABLE_NAME.pname();
+    private static final String META_TABLE = "ducc." + 
SvcMetaProps.TABLE_NAME.pname();
+    // (My) db conventions are that everything must follow the conventions of 
IDbProperty.  SM
+    // uses properties directly.  Maybe we'll change this some time.  For now, 
we need to efficiently
+    // convert a Properties object into a Map keyed on IDbProperty; hence 
these two convenient maps
+    // from string to property.
+    Map<String, SvcRegProps> s2regProps = new HashMap<String, SvcRegProps>();
+    Map<String, SvcMetaProps> s2metaProps = new HashMap<String, 
SvcMetaProps>();
     public StateServicesDb()
     {
+        for ( SvcRegProps p : SvcRegProps.values() ) {
+            s2regProps.put(p.pname(), p);
+        }
+        for ( SvcMetaProps p : SvcMetaProps.values() ) {
+            s2metaProps.put(p.pname(), p);
+        }
     }
 
-    private boolean init(String dburl)
+    private boolean init(String dburl, DbManager dbm)
         throws Exception
     {
+       String methodName = "init";
         // log4j issue - the caller must pass in a logger configured correctly 
for the component
         //               to which it belongs or it won't get sent to the right 
appender.
 
-        boolean ret = false;
-        try {
-            dbManager = new DbManager(dburl, logger);
-            dbManager.init();
-            ret = true;
-        } catch ( Exception e ) {
-            // logger.error("StateServicesDb", null, "Cannot open the service 
database:", e);
-            throw e;
+        boolean ret = true;
+        if ( dbm != null ) {
+            this.dbManager = dbm;
+        } else {
+            try {
+                dbManager = new DbManager(dburl, logger);
+                dbManager.init();
+                ret = true;
+            } catch ( Exception e ) {
+                logger.error(methodName, null, "Cannot open the state 
database:", e);
+                throw e;
+            }
         }
+
         return ret;
     }
 
@@ -67,60 +90,59 @@ public class StateServicesDb
     {
        this.logger = logger;
         String stateUrl = System.getProperty("ducc.state.database.url");
-        return init(stateUrl);
+        return init(stateUrl, null);
     }
 
-    /** 
-     * Helper for restoring service registrations.  This looks in the 
non-history part of the DB.
-     */
-    private List<Long> getListOfType(DbVertex type)
+    // package only, for the loader
+    boolean init(DuccLogger logger, DbManager dbManager)
+       throws Exception
     {
-        String methodName = "getSvcList";
-
-        if ( dbManager == null ) {
-            logger.error(methodName, null, "Service database is not 
initialized.");
-            return new ArrayList<Long>();    // avoid NPE in caller
-        }
-
-        List<Long> ret = null;
-        DbHandle h = null;
-               try {
-                       h = dbManager.open();
-            ret = h.listObjectsOfType(type, DbCategory.SmReg);
-               } catch (Throwable e) {
-            logger.error(methodName, null, e);
-               } finally {
-            if ( h != null ) h.close();
-        }
-
-        return ret;
+       this.logger = logger;
+        String stateUrl = System.getProperty("ducc.state.database.url");
+        return init(stateUrl, dbManager);
     }
 
-    /**
-     * Return a list of service property file names.  Must query the db every 
time.
-     */
-    public List<Long> getSvcList()
-    {
-        return getListOfType(DbVertex.ServiceReg);
-    }
-    
-    /**
-     * Return a list of sersvice meta file names.  Must query the db every 
time.
-     */
-    public List<Long> getMetaList()
+    private Map<Long, DuccProperties> getProperties(String tableid, 
IDbProperty[] props, boolean active)
+       throws Exception
     {
-        return getListOfType(DbVertex.ServiceMeta);
+       String methodName = "getProperties";
+        Map<Long, DuccProperties> ret = new HashMap<Long, DuccProperties>();
+        
+        SimpleStatement s = new SimpleStatement( "SELECT * FROM " + tableid + 
" WHERE is_archived=" + active);
+        s.setFetchSize(100);
+        DbHandle h = dbManager.open();
+        ResultSet rs = h.execute(s);
+        for ( Row r: rs ) {
+            long id = Long.parseLong(r.getString("numeric_id"));
+            DuccId did = new DuccId(id);
+            logger.debug(methodName, did, "Found properties in table", 
tableid);
+            DuccProperties dp = new DuccProperties();
+            for ( IDbProperty p : props ) {
+                String val = null;
+                if ( logger.isTrace() ) {
+                    logger.info(methodName, null, "Fetching", p.pname(), 
"from", tableid);
+                }
+                if ( !(p.isPrivate() || p.isMeta()) ) {    // collect 
non-private / non-meta properties into dp
+                    val = r.getString(p.columnName());                    
+                    if ( val != null ) {
+                        dp.put(p.pname(), val);
+                    }
+                }
+                if ( p.isPrimaryKey() ) {                  // once we find the 
key we set the dp int return val
+                       String k = null;
+                    if ( val == null ) {
+                        k = r.getString(p.columnName());
+                    } else {
+                        k = val;
+                    }
+                    ret.put(Long.parseLong(k), dp);
+                }
+            }
+        }
+       return ret;
     }
 
-    /**
-     * This is adapted from the file-based version and as such, perhaps should 
be named better.
-     *
-     * This reads the entire (live, non-history) service registration into an 
object called
-     * StateServicesDirectory.  This in turn contains a map of 
StateServicesSet objects.  Each
-     * StateServiceSet contains two properties files, one for the submitted 
properties, and one
-     * for the service meta properties (SM state).
-     */
-    public StateServicesDirectory getStateServicesDirectory()
+    StateServicesDirectory fetchServices(boolean isArchived)      // pkg 
protection, for db utilities to use
         throws Exception
     {
         String methodName = "getStateServicesDirectory";
@@ -133,30 +155,89 @@ public class StateServicesDb
             return ret;    // avoid NPE in caller
         }
 
-        DbHandle h = dbManager.openNoTx();
+        DbHandle h = null;
         try {
-            Map<Long, Properties> svcset  = 
h.getPropertiesForTypeSel(DbVertex.ServiceReg , DbCategory.SmReg);
-            Map<Long, Properties> metaset = 
h.getPropertiesForTypeSel(DbVertex.ServiceMeta, DbCategory.SmReg);
-
+            h = dbManager.open();
+            Map<Long, DuccProperties> svcset  = getProperties(SVC_TABLE, 
IStateServices.SvcRegProps.values(), isArchived);
+            Map<Long, DuccProperties> metaset = getProperties(META_TABLE, 
IStateServices.SvcMetaProps.values(), isArchived);
+            
             for ( Long k : svcset.keySet() ) {
                 logger.trace(methodName, null, "Handling key", k);
-                DuccProperties sp = new DuccProperties(svcset.get(k));         
       
-                DuccProperties mp = new DuccProperties(metaset.get(k));
+                DuccProperties sp = svcset.get(k);                
+                DuccProperties mp = metaset.get(k);
                 StateServicesSet sss = new StateServicesSet();
                 sss.put(svc, sp);
                 sss.put(meta, mp);
                 
                 ret.put(k, sss);            
             }
-        } finally {
-            if ( h != null ) h.close();
+        } catch ( Exception e ) {
+            logger.error(methodName, null, "Cannot read service directory:", 
e);
         }
-        
+
         logger.info(methodName, null, "Time to read service registy", 
System.currentTimeMillis() - now);
         return ret;
     }
 
     /**
+     * This is adapted from the file-based version and as such, perhaps should 
be named better.
+     *
+     * This reads the entire (live, non-history) service registration into an 
object called
+     * StateServicesDirectory.  This in turn contains a map of 
StateServicesSet objects.  Each
+     * StateServiceSet contains two properties files, one for the submitted 
properties, and one
+     * for the service meta properties (SM state).
+     */
+    public StateServicesDirectory getStateServicesDirectory()
+       throws Exception
+    {
+        return fetchServices(false);          // get the non-archived stsuff
+    }
+
+    Map<IDbProperty, Object> mkMap(DuccId did, String table, Map<String, ? 
extends IDbProperty> converter, Properties props)
+    {
+       String methodName = "mkMap";
+
+        // hmmm  - some old registrations didn't seem to get converted - we'll 
do it now
+        String kk = "process_failures_limit";
+        if ( props.containsKey(kk) ) {
+            Object v = props.remove(kk);
+            kk = SvcRegProps.instance_failures_limit.columnName();
+            props.put(kk, v);
+        }
+        kk = "process_DD";
+        if ( props.containsKey(kk) ) {
+            Object v = props.remove(kk);
+            kk = SvcRegProps.process_dd.columnName();
+            props.put(kk, v);
+        }
+        kk = "process_classpath";
+        if ( props.containsKey(kk) ) {
+            Object v = props.remove(kk);
+            kk = SvcRegProps.classpath.columnName();
+            props.put(kk, v);
+        }
+        kk = "jvm_args";
+        if ( props.containsKey(kk) ) {
+            Object v = props.remove(kk);
+            kk = SvcRegProps.process_jvm_args.columnName();
+            props.put(kk, v);
+        }
+        
+        Map<IDbProperty, Object> ret = new HashMap<IDbProperty, Object>();
+        for ( Object k : props.keySet() ) {
+            IDbProperty p = converter.get((String) k);
+            if (p == null ) {
+                logger.error(methodName, did, "Unrecognized property", k, "for 
table", table);
+                continue;
+            }
+            String val = (String) props.get(k);
+            val = val.replace("'", "''");          // must escape single 
quotes - this is how CQL and SQL do it
+            ret.put(p, val);
+        }
+        return ret;
+    }
+
+    /**
      * Save the src and meta propeties into the non-history part of the DB. 
      *
      * @param serviceID The SM-assigned duccid for the service registration.
@@ -169,146 +250,203 @@ public class StateServicesDb
      *       equivalent in the Java interface?  If so, we should modify this 
to use it
      *       and can then eliminate the 'safe' flag.
      */
-    boolean storePropertiesInternal (DuccId serviceId, Properties svc_props, 
Properties meta_props, boolean safe, DbCategory category) 
+    public boolean storeProperties (DuccId serviceId, Properties svc_props, 
Properties meta_props)
     {
         String methodName = "storePropertiesInternal";
         DbHandle h = null;
 
+        boolean ret = false;
+        long now = System.currentTimeMillis();
         try {
-            if ( safe ) {
-                h = dbManager.open(); 
-            } else {
-                h = dbManager.openNoTx();
-            }
-
-            if ( meta_props.containsKey("meta_dbid")) return false; // if it's 
assigned, it came from the db so we know it's already there            
-
-            Long id = serviceId.getFriendly();            
-            OrientVertex ov_svc = h.createProperties(DbConstants.DUCCID, id, 
DbVertex.ServiceReg , category, svc_props);
-            OrientVertex ov_meta = h.createProperties(DbConstants.DUCCID, id, 
DbVertex.ServiceMeta, category, meta_props);
-
-            Object dbid = ov_svc.getId();
-            meta_props.put("svc_dbid", dbid);
-            ov_meta.setProperty("svc_dbid", dbid);
-
-            dbid = ov_meta.getId();
-            meta_props.put("meta_dbid", dbid);
-            ov_meta.setProperty("meta_dbid", dbid);
-
-            h.commit();
-            return true;
+            h = dbManager.open();
+            long numeric = serviceId.getFriendly();
+            UUID uuid =    serviceId.getUUID();
+            // the utils want Maps of IDbProperty which give hints how to form 
the cql; properties don't
+            Map<IDbProperty, Object> svc_map = mkMap(serviceId, SVC_TABLE, 
s2regProps, svc_props);
+            Map<IDbProperty, Object> meta_map = mkMap(serviceId, META_TABLE, 
s2metaProps, meta_props);
+            svc_map.put(SvcRegProps.numeric_id, numeric);
+            svc_map.put(SvcRegProps.uuid, uuid.toString());
+
+            svc_map.put(SvcRegProps.is_archived, "false");        // never 
archived when first put into db
+            meta_map.put(SvcMetaProps.is_archived, "false");
+            
+            // in Cassandra, we use "batch" mode to get multiple inserts 
managed as a single transaction
+            String cql = "";
+            StringBuffer buf = new StringBuffer("BEGIN BATCH ");
+            cql = DbUtil.mkInsert(SVC_TABLE, svc_map);
+            buf.append(cql);
+            buf.append("; ");
+            cql = DbUtil.mkInsert(META_TABLE, meta_map);
+            buf.append(cql);
+            buf.append("; ");
+            buf.append("APPLY BATCH");
+            h.execute(buf.toString());
+            
         } catch ( Exception e ) {
-            logger.error(methodName, serviceId, "ROLLBACK: ", e);
-            if ( h != null ) h.rollback();
-            return false;
+            logger.error(methodName, null, "Error storing props for new 
registration:", e);
+            ret = false;
         } finally {
-            if ( h != null ) h.close();
+            logger.info(methodName, serviceId, "Time to create (2) proeprties 
files:", System.currentTimeMillis() - now);
         }
+        return ret;
     }
-
-    /**
-     * Save the props into the database, don't check to see if they're there 
already.  Used by the
-     * loader for converting old registries to the db.
-     */
-    public boolean storePropertiesUnsafe(DuccId serviceId, Properties 
svc_props, Properties meta_props, DbCategory category) 
-    {
-        return storePropertiesInternal(serviceId, svc_props, meta_props, 
false, category);
-    }
-
-    /**
-     * Save the props into the db.  If the object exists don't overwrite it, 
and return an error.
-     * The only non-error return is if the object doesn't already exist, and 
it is safely committed.
-     *
-     * This is used by the SM on initial service registration only.
-     */
-    public boolean storeProperties(DuccId serviceId, Properties svc_props, 
Properties meta_props) 
-    {
-        return storePropertiesInternal(serviceId, svc_props, meta_props, true, 
DbCategory.SmReg);
-    }
-
+    
 
     /**
      * The registration is removed, move it to the history part of the DB.
      */
-    public void  moveToHistory(DuccId serviceId, Properties job_props, 
Properties meta_props)
+    public boolean  moveToHistory(DuccId serviceId, Properties job_props, 
Properties meta_props)
     {
-        // All we need to do is re-sync the final properties, and be sure to 
set DUCC_HISTORY to false
+       // All we need to do is re-sync the final properties, and be sure to 
set DUCC_HISTORY to false
         String methodName = "moveToHistory";
         DbHandle h = null;
         try {
-        
+            
             h = dbManager.open();        // get new connection from the pool
-            Object svc_dbid = meta_props.get("svc_dbid");
-            Object meta_dbid = meta_props.get("meta_dbid");
-            OrientVertex obj_reg  = h.updateProperties(svc_dbid, job_props);
-            OrientVertex obj_meta = h.updateProperties(meta_dbid, meta_props);
-
-            h.changeCategory(obj_reg,  DbCategory.History);
-            h.changeCategory(obj_meta, DbCategory.History);
-            h.commit();
 
-            // h.syncProperties(job_props, DbVertex.ServiceReg, id, 
DbCategory.History);
-            // h.syncProperties(meta_props, DbVertex.ServiceMeta, id, 
DbCategory.History);
+            job_props.put(SvcRegProps.is_archived.pname(), "true");
+            meta_props.put(SvcRegProps.is_archived.pname(), "true");
+            StringBuffer buf = new StringBuffer("BEGIN BATCH ");
+            buf.append("UPDATE ");
+            buf.append(SVC_TABLE);
+            buf.append(" SET ");
+            buf.append(SvcRegProps.is_archived.columnName());
+            buf.append("=true WHERE numeric_id='");
+            buf.append(Long.toString(serviceId.getFriendly()));
+            buf.append("';");
+
+            buf.append("UPDATE ");
+            buf.append(META_TABLE);
+            buf.append(" SET ");
+            buf.append(SvcMetaProps.is_archived.columnName());
+            buf.append("=true WHERE numeric_id='");
+            buf.append(Long.toString(serviceId.getFriendly()));
+            buf.append("';");
+
+            buf.append("APPLY BATCH");
+            h.execute(buf.toString());
+
+            return true;
         }  catch ( Exception e ) {
-            logger.error(methodName, serviceId, "ROLLBACK: ", e);
-            if ( h != null ) h.rollback();
-        } finally {
-            if ( h != null ) h.close();
-        }
+            logger.error(methodName, serviceId, "Error moving registration to 
history:", e);
+            return false;
+        } 
     }
     
     /**
      * Helper method to Update the indicated properties file, in the 
non-history part of the db.
      * This is most often called by SM to update the service meta after state 
changes.
      *
-     * @param serviceId The SM-assigned DUCC ID for the service registration.
+     * @param keyField - the IDbProperty identifying the row key
+     * @parem table    - the String name of the table
+     * @param key      - the String value of the key identifying the row
+     * @param converter - either s2regProps or s2metaProps, identifying the 
String - to - IDbProperty converter
      * @param props The properties file to save.  Usually it's just the meta 
but if
-     *              the service is being modified, it could also be the 
registration.
-     * @param type The type enum, ususally Service or ServiceMeta.
+     *              the service is being modified, it could also be the 
registration being updated.
      */
-    private boolean updateProperties(Object dbid, DuccId serviceId, Properties 
props, DbVertex type)
+    private boolean updateProperties(DuccId serviceId, String table, String 
key, Map<String, ? extends IDbProperty> converter, Properties props)
     {
         String methodName = "updatePropeties";
         DbHandle h = null;
         try {            
             h = dbManager.open();
-            h.updateProperties(dbid, props);
-            // h.synchronizeProperties(DbConstants.DUCCID, 
serviceId.getFriendly(), type,  DbCategory.SmReg, props);
-            // h.synchronizeProperties(dbid, props);
-
-            h.commit();
-            // h.syncProperties(props, type, serviceId.getFriendly(), 
DbCategory.SmReg);            
+            Map<IDbProperty, Object> map = mkMap(serviceId, table, converter, 
props);
+            Object[] updates = new Object[props.size()*2];
+            int i = 0;
+            for ( IDbProperty k : map.keySet() ) {
+               logger.info(methodName, null, "Updating", k.columnName(), 
"with", map.get(k));
+                updates[i++] = k;
+                updates[i++] = map.get(k);
+            }
+            
+            h.updateProperties(table, key, updates);            
             return true;
         } catch ( Exception e ) {
-            logger.error(methodName, serviceId, "ROLLBACK:", e);
-            if ( h != null ) h.rollback();
+            logger.error(methodName, null, "Unable to update properties for 
service", key, "table", table, ":", e);
             return false;            
-        } finally {            
-            if ( h != null ) h.close();
-        }
+        } 
     }
     
     /**
      * Update the service registration.
      */
-    public boolean updateJobProperties(Object dbid, DuccId serviceId, 
Properties props) 
+    public boolean updateJobProperties(DuccId serviceId, Properties props) 
     {
-        return updateProperties(dbid, serviceId, props, DbVertex.ServiceReg);
+        return updateProperties(serviceId, SVC_TABLE, "numeric_id='" + 
Long.toString(serviceId.getFriendly()) + "'", s2regProps, props);
     }
 
     /**
      * Update the service meta data.
      */
-    public boolean updateMetaProperties(Object dbid, DuccId serviceId, 
Properties props) 
+    public boolean updateMetaProperties(DuccId serviceId, Properties props) 
     {
-        return updateProperties(dbid, serviceId, props, DbVertex.ServiceMeta);
+        return updateProperties(serviceId, META_TABLE, "numeric_id='" + 
Long.toString(serviceId.getFriendly()) + "'", s2metaProps, props);
     }
 
-    /**
-     * Close and discard the database connection pool.
-     */
-    public void shutdown() 
+    public void shutdown()
     {
         dbManager.shutdown();
-    } 
+    }
+
+    static List<SimpleStatement> mkSchema()
+       throws Exception
+    {
+        List<SimpleStatement> ret = new ArrayList<SimpleStatement>();
+
+
+        StringBuffer buf = new StringBuffer("CREATE TABLE IF NOT EXISTS " + 
SVC_TABLE + " (");
+        buf.append(DbUtil.mkSchema(SvcRegProps.values()));
+        buf.append(")");    
+        ret.add(new SimpleStatement(buf.toString()));
+        ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + 
SVC_TABLE + "(" + SvcRegProps.is_archived.columnName() + ")"));
+
+        buf = new StringBuffer("CREATE TABLE IF NOT EXISTS " + META_TABLE + " 
(");
+        buf.append(DbUtil.mkSchema(SvcMetaProps.values()));
+        buf.append(")");    
+        ret.add(new SimpleStatement(buf.toString()));
+        ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + 
META_TABLE + "(" + SvcMetaProps.is_archived.columnName() +")"));
+
+        return ret;
+    }
+
+    // static String[] mkSchemaForReg()
+    // {
+
+    //     int size = SvcRegProps.values().length;
+    //     String[] ret = new String[size];
+
+    //     int ndx = 0;
+
+    //     for ( SvcRegProps p: SvcRegProps.values() ) {
+    //         String s = p.pname();
+    //         s = s + " " + DbUtil.typeToString(p.type());
+    //         if ( p.isPrimaryKey() ) {
+    //             s = s + " PRIMARY KEY";
+    //         }
+    //         ret[ndx++] = s;
+    //     }
+    //     return ret;
+
+    // }
+
+    // static String[] mkSchemaForMeta()
+    // {
+    //     int size = SvcMetaProps.values().length;
+    //     String[] ret = new String[size];
+
+    //     int ndx = 0;
+
+    //     for ( SvcMetaProps p: SvcMetaProps.values() ) {
+    //         String s = p.pname();
+    //         s = s + " " + DbUtil.typeToString(p.type());
+    //         if ( p.isPrimaryKey() ) {
+    //             s = s + " PRIMARY KEY";
+    //         }
+    //         ret[ndx++] = s;
+    //     }
+
+    //     return ret;
+
+    // }
+
 }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorCheckpoint.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorCheckpoint.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorCheckpoint.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/OrchestratorCheckpoint.java
 Wed Oct 28 18:12:53 2015
@@ -24,9 +24,11 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.uima.ducc.common.Pair;
 import org.apache.uima.ducc.common.internationalization.Messages;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
@@ -249,12 +251,16 @@ public class OrchestratorCheckpoint {
                                try
                                {
                                        logger.info(methodName, null, 
messages.fetchLabel("restoring from")+fileName);
-                    DuccWorkMap work = new DuccWorkMap();
-                    ConcurrentHashMap<DuccId, DuccId> processToJob = new 
ConcurrentHashMap<DuccId, DuccId>();
-                    Checkpointable checkpointable = new Checkpointable(work, 
processToJob);
-                    retVal = saver.restore(work, processToJob);
-                                       
orchestratorCommonArea.setCheckpointable(checkpointable);
-                                       logger.info(methodName, null, 
messages.fetch("restored"));
+                    Pair<DuccWorkMap, Map<DuccId, DuccId>> ret = 
saver.restore();
+                    if ( ret.first() != null ) {
+                        //Checkpointable checkpointable = new 
Checkpointable(ret.first(), (ConcurrentHashMap<DuccId, DuccId>) ret.second());
+                        Checkpointable checkpointable = new 
Checkpointable(ret.first(), (ConcurrentHashMap<DuccId, DuccId>) ret.second());
+                        
+                        
orchestratorCommonArea.setCheckpointable(checkpointable);
+                        logger.info(methodName, null, 
messages.fetch("restored"));
+                    } else {
+                        logger.info(methodName, null, "No checkpoint found.");
+                    }
                                }
                                catch(ClassNotFoundException e)
                                {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-parent/pom.xml
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-parent/pom.xml?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-parent/pom.xml (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-parent/pom.xml Wed Oct 28 18:12:53 
2015
@@ -134,7 +134,7 @@
                <org.apache.camel.version>2.10.1</org.apache.camel.version>
                <!-- org.apache.uima.version>2.6.0</org.apache.uima.version 
Same as uima-as-->
                <org.apache.uima.as.version>2.6.0</org.apache.uima.as.version>
-               <com.google.guava.version>r09</com.google.guava.version>
+               <com.google.guava.version>14.0.1</com.google.guava.version>     
   <!-- updated from r09 for cassandra -->
                <commons.cli.version>1.2</commons.cli.version>
                <joda.time.version>2.1</joda.time.version>
                <jsch.version>0.1.29</jsch.version>
@@ -146,7 +146,7 @@
                <commons.lang.version>2.6</commons.lang.version>
                <commons.math.version>2.0</commons.math.version>
                <log4j.version>1.2.16</log4j.version>
-               <slf4j.version>1.6.4</slf4j.version>
+               <slf4j.version>1.7.6</slf4j.version>                <!-- 
updated from 1.6.4 for cassandra -->
                <xmlbeans.version>2.5.0</xmlbeans.version>
                <junit.version>4.8.2</junit.version>
                <servlet.api.version>2.5</servlet.api.version>
@@ -165,8 +165,16 @@
                <jetty.version>7.4.4.v20110707</jetty.version>
                
<orbit-org-apache-jasper.version>2.1.0.v201110031002</orbit-org-apache-jasper.version>
                <servlet-api.version>2.5</servlet-api.version>
-        <orientdb.version>2.1.2</orientdb.version>
-        <orientdb.studio.version>2.0-M3</orientdb.studio.version>
+
+        <!-- These are all cassandra client -->
+        <cassandra.driver.version>2.1.8</cassandra.driver.version>
+        <netty.version>4.0.27.Final</netty.version>
+        <hdr.version>2.1.4</hdr.version>
+        <metrics.version>3.0.2</metrics.version>
+        <snappy.version>1.0.5</snappy.version>
+        <lz4.version>1.2.0</lz4.version>
+        <hdr.version>2.1.4</hdr.version>
+        <!-- end of cassandra client -->
         
                <http.commons.client.version>4.3.5</http.commons.client.version>
                
<http.commons.client-cache.version>4.3.5</http.commons.client-cache.version>
@@ -391,6 +399,39 @@ ${uimaDUCCNoticeText}
                                <version>${joda.time.version}</version>
                        </dependency>
 
+            <!-- cassandra RT -->
+            <dependency>
+              <groupId>io.netty</groupId>
+              <artifactId>netty-handler</artifactId>
+              <version>${netty.version}</version>
+            </dependency>
+
+            <dependency>
+              <groupId>com.codahale.metrics</groupId>
+              <artifactId>metrics-core</artifactId>
+              <version>${metrics.version}</version>
+            </dependency>
+            
+            <dependency>
+                 <groupId>org.xerial.snappy</groupId>
+                 <artifactId>snappy-java</artifactId>
+              <version>${snappy.version}</version>
+            </dependency>
+            
+            <dependency>
+              <groupId>net.jpountz.lz4</groupId>
+              <artifactId>lz4</artifactId>
+              <version>${lz4.version}</version>
+            </dependency>
+            
+            <dependency>
+              <groupId>org.hdrhistogram</groupId>
+              <artifactId>HdrHistogram</artifactId>
+              <version>${hdr.version}</version>
+            </dependency>
+
+            <!-- end of cassandra RT -->
+
                        <dependency>
                                <groupId>org.apache.uima</groupId>
                                <artifactId>uimaj-core</artifactId>
@@ -695,7 +736,7 @@ ${uimaDUCCNoticeText}
 
                  <!-- Get SVN revision number and include in the manifest.
                       Disable the check for local changes and the svn update 
-->
-                 <plugin>
+                 <!-- plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>buildnumber-maven-plugin</artifactId>
                        <version>1.3</version>
@@ -711,7 +752,7 @@ ${uimaDUCCNoticeText}
                          <doCheck>false</doCheck>
                          <doUpdate>false</doUpdate>
                        </configuration>
-                 </plugin>
+                 </plugin -->
 
                        <plugin>
                                <artifactId>maven-compiler-plugin</artifactId>

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Machine.java
 Wed Oct 28 18:12:53 2015
@@ -26,7 +26,7 @@ import org.apache.uima.ducc.common.NodeI
 import org.apache.uima.ducc.common.admin.event.RmQueriedMachine;
 import org.apache.uima.ducc.common.admin.event.RmQueriedShare;
 import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
-import org.apache.uima.ducc.common.persistence.rm.IRmPersistence.RmPropName;
+import org.apache.uima.ducc.common.persistence.rm.IRmPersistence.RmProperty;
 import org.apache.uima.ducc.common.persistence.rm.RmPersistenceFactory;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
@@ -76,7 +76,6 @@ public class Machine
 
     private HashMap<Share, Share> activeShares = new HashMap<Share, Share>();
     private IRmPersistence persistence = null;
-    Object dbid = null;
 
     public Machine(Node node)
     {
@@ -175,7 +174,7 @@ public class Machine
         if ( heartbeats == 0 ) return;               // no need to rereset it
         try {
             logger.info(methodName, null, "Reset heartbeat to 0");
-                       persistence.setProperty(dbid, id, 
RmPropName.Heartbeats, 0);
+                       persistence.setProperty(id, RmProperty.Heartbeats, 0);
             logger.info(methodName, null, "Time to reset heartbeat", 
System.currentTimeMillis() - now);
                } catch (Exception e) {
             logger.warn(methodName, null, "Cannot update heartbeat count in 
database:", e);
@@ -191,23 +190,13 @@ public class Machine
         try {
             heartbeats = c;
             logger.info(methodName, null, "Missed heartbeat count", c);
-                       persistence.setProperty(dbid, id, 
RmPropName.Heartbeats, c);
+                       persistence.setProperty(id, RmProperty.Heartbeats, c);
             logger.info(methodName, null, "Time to record misssed heartbeat", 
System.currentTimeMillis() - now);
                } catch (Exception e) {
             logger.warn(methodName, null, "Cannot update heartbeat count in 
database:", e);
                }
     }
 
-    Object getDbId()
-    {
-        return this.dbid;
-    }
-
-    void setDbId(Object dbid)
-    {
-        this.dbid = dbid;
-    }
-
     public NodeIdentity getNodeIdentity()
     {
         return node.getNodeIdentity();
@@ -328,7 +317,7 @@ public class Machine
         activeShares.put(s, s);
         shares_left -= s.getShareOrder();
         try {
-                       persistence.setProperties(dbid, id, 
RmPropName.Assignments.pname(), activeShares.size(), 
RmPropName.SharesLeft.pname(), shares_left);
+                       persistence.setProperties(id, RmProperty.Assignments, 
activeShares.size(), RmProperty.SharesLeft, shares_left);
             logger.info(methodName, null, "Time to assign share in db", 
System.currentTimeMillis() - now);
                } catch (Exception e) {
             logger.warn(methodName, null, "Cannot save state; shares_left", 
shares_left);
@@ -345,7 +334,7 @@ public class Machine
         nodepool.removeShare(s);
         shares_left += s.getShareOrder();
         try {
-                       persistence.setProperties(dbid, id, 
RmPropName.Assignments.pname(), activeShares.size(), 
RmPropName.SharesLeft.pname(), shares_left);
+                       persistence.setProperties(id, RmProperty.Assignments, 
activeShares.size(), RmProperty.SharesLeft, shares_left);
             logger.info(methodName, null, "Time to remove share in db", 
System.currentTimeMillis() - now);
                } catch (Exception e) {
             logger.warn(methodName, null, "Cannot save state; shares_left", 
shares_left);

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/NodePool.java
 Wed Oct 28 18:12:53 2015
@@ -27,12 +27,11 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 
 import org.apache.uima.ducc.common.Node;
 import org.apache.uima.ducc.common.NodeIdentity;
 import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
-import org.apache.uima.ducc.common.persistence.rm.IRmPersistence.RmPropName;
+import org.apache.uima.ducc.common.persistence.rm.IRmPersistence.RmProperty;
 import org.apache.uima.ducc.common.persistence.rm.RmPersistenceFactory;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.transport.event.common.IDuccTypes.DuccType;
@@ -995,35 +994,35 @@ class NodePool
     }
 
 
-    void signalDb(Machine m, RmPropName key, Object value)
+    void signalDb(Machine m, RmProperty key, Object value)
     {
        String methodName = "signalDb";
         try {
-                       persistence.setProperty(m.getDbId(), 
m.getNode().getNodeIdentity().getName(), key, value);
+                       
persistence.setProperty(m.getNode().getNodeIdentity().getName(), key, value);
                } catch (Exception e) {
                        logger.warn(methodName, null, "Cannot update DB 
property", key, "for machine", m);
                }
     }
 
-    Properties initDbProperties(Machine m)
+    Map<RmProperty, Object> initDbProperties(Machine m)
     {
         Node n = m.getNode();
         NodeIdentity nid = n.getNodeIdentity();
         
-        Properties props = new Properties();
-        props.setProperty(RmPropName.Name.pname(), nid.getName());
-        props.setProperty(RmPropName.Ip.pname(), nid.getIp());
-        props.setProperty(RmPropName.Nodepool.pname(), id);
-        props.put(RmPropName.Quantum.pname(), share_quantum);
+        Map<RmProperty, Object> props = new HashMap<RmProperty, Object>();
+        props.put(RmProperty.Name, nid.getName());
+        props.put(RmProperty.Ip, nid.getIp());
+        props.put(RmProperty.Nodepool, id);
+        props.put(RmProperty.Quantum, share_quantum);
         
-        props.put(RmPropName.Memory.pname()       , m.getMemory());
-        props.put(RmPropName.ShareOrder.pname()  , m.getShareOrder());
-        props.put(RmPropName.Blacklisted.pname()  , m.isBlacklisted());
+        props.put(RmProperty.Memory       , m.getMemory());
+        props.put(RmProperty.ShareOrder  , m.getShareOrder());
+        props.put(RmProperty.Blacklisted  , m.isBlacklisted());
 
         // init these here, but must be maintained by machine
-        props.put(RmPropName.Heartbeats.pname()   , 0);
-        props.put(RmPropName.SharesLeft.pname()   , m.countFreeShares());     
// qshares remaining
-        props.put(RmPropName.Assignments.pname()  , m.countProcesses());      
// processes
+        props.put(RmProperty.Heartbeats   , 0);
+        props.put(RmProperty.SharesLeft   , m.countFreeShares());     // 
qshares remaining
+        props.put(RmProperty.Assignments  , m.countProcesses());      // 
processes
         
         return props;
     }
@@ -1100,7 +1099,7 @@ class NodePool
 
         if ( offlineMachines.containsKey(node) ) {               // if it's 
offline it can't be restored like this.
             Machine m = offlineMachines.get(node);
-            signalDb(m, RmPropName.Responsive, true);
+            signalDb(m, RmProperty.Responsive, true);
             logger.trace(methodName, null, "Node ", m.getId(), " is offline, 
not activating.");
             return m;
         }
@@ -1125,7 +1124,7 @@ class NodePool
             mlist.put(m.key(), m);     
    
             total_shares += order;     //      UIMA-3939
-            signalDb(m, RmPropName.Responsive, true);
+            signalDb(m, RmProperty.Responsive, true);
             logger.info(methodName, null, "Nodepool:", id, "Host reactivated 
", m.getId(), String.format("shares %2d total %4d:", order, total_shares), 
m.toString());
             return m;
         }
@@ -1153,12 +1152,11 @@ class NodePool
                     String.format("shares %2d total %4d:", order, 
total_shares), machine.toString()); 
         updated++;
 
-        Properties props = initDbProperties(allMachines.get(key));
-        props.put(RmPropName.Responsive.pname(), true);
-        props.put(RmPropName.Online.pname(), true);
+        Map<RmProperty, Object> props = initDbProperties(allMachines.get(key));
+        props.put(RmProperty.Responsive, true);
+        props.put(RmProperty.Online, true);
         try {
-                       Object dbid = 
persistence.createMachine(machine.getId(), props);
-            machine.setDbId(dbid);
+                       persistence.createMachine(machine.getId(), props);
                } catch (Exception e) {
                        logger.warn(methodName, null, "Cannot write machine to 
DB:", machine.getId(), e);
                }
@@ -1233,7 +1231,7 @@ class NodePool
     void nodeLeaves(Machine m)
     {
         disable(m, unresponsiveMachines);
-        signalDb(m, RmPropName.Responsive, false);
+        signalDb(m, RmProperty.Responsive, false);
     }
 
     // UIMA-4142
@@ -1274,7 +1272,7 @@ class NodePool
                     Node key = mm.key();
                     iter.remove();
                     offlineMachines.put(key, mm);
-                    signalDb(m, RmPropName.Online, false);
+                    signalDb(m, RmProperty.Online, false);
                     return "VaryOff: Nodepool " + id + " - Unresponsive 
machine, marked offline: " + node;
                 }
             }
@@ -1283,7 +1281,7 @@ class NodePool
         }
 
         disable(m, offlineMachines);
-        signalDb(m, RmPropName.Online, false);
+        signalDb(m, RmProperty.Online, false);
         return "VaryOff: " + node + " - OK.";
     }
 
@@ -1302,7 +1300,7 @@ class NodePool
             Machine mm = iter.next();
             if ( mm.getId().equals(node) ) {
                 iter.remove();
-                signalDb(mm, RmPropName.Online, true);
+                signalDb(mm, RmProperty.Online, true);
                 return "VaryOn: Nodepool " + id + " - Machine marked online: " 
+ node;
             }
         }
@@ -1311,7 +1309,7 @@ class NodePool
         while ( iter.hasNext() ) {
             Machine mm = iter.next();
             if ( mm.getId().equals(node) ) {
-                signalDb(mm, RmPropName.Online, true);
+                signalDb(mm, RmProperty.Online, true);
                 return "VaryOn: Nodepool " + id + " - Machine is online but 
not responsive: " + node;
             }
         }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceInstance.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceInstance.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceInstance.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceInstance.java
 Wed Oct 28 18:12:53 2015
@@ -199,7 +199,7 @@ class ServiceInstance
 
         logger.info(methodName, sset.getId(), "START INSTANCE");
         setStopped(false);
-        this.user = 
meta_props.getProperty(IStateServices.SvcProps.user.pname());
+        this.user = 
meta_props.getProperty(IStateServices.SvcMetaProps.user.pname());
 
         // Simple use of ducc_ling, just submit as the user.  The 
specification will have the working directory
         // and classpath needed for the service, handled by the Orchestrator 
and Job Driver.
@@ -307,10 +307,10 @@ class ServiceInstance
 
         if ( ! started ) {
             logger.warn(methodName, sset.getId(), "Request to start service " 
+ sset.getId().toString() + " failed.");
-            meta_props.put(IStateServices.SvcProps.submit_error.pname(), 
submit_buffer.toString());
+            meta_props.put(IStateServices.SvcMetaProps.submit_error.pname(), 
submit_buffer.toString());
             sset.log_errors(stdout_lines, stderr_lines);
         } else {
-            meta_props.remove(IStateServices.SvcProps.submit_error.pname());
+            
meta_props.remove(IStateServices.SvcMetaProps.submit_error.pname());
             state = JobState.Received;
         }
         logger.info(methodName, sset.getId(), "START INSTANCE COMPLETE");

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=1711088&r1=1711087&r2=1711088&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
 Wed Oct 28 18:12:53 2015
@@ -38,7 +38,7 @@ import org.apache.uima.ducc.common.crypt
 import org.apache.uima.ducc.common.crypto.Crypto.AccessType;
 import org.apache.uima.ducc.common.main.DuccService;
 import org.apache.uima.ducc.common.persistence.services.IStateServices;
-import 
org.apache.uima.ducc.common.persistence.services.IStateServices.SvcProps;
+import 
org.apache.uima.ducc.common.persistence.services.IStateServices.SvcMetaProps;
 import org.apache.uima.ducc.common.persistence.services.StateServicesDirectory;
 import org.apache.uima.ducc.common.persistence.services.StateServicesFactory;
 import org.apache.uima.ducc.common.persistence.services.StateServicesSet;
@@ -117,7 +117,7 @@ public class ServiceManagerComponent
     private String state_file = null;
 
     private DuccProperties sm_props = null;
-    private String service_seqno = SvcProps.service_seqno.pname();
+    private String service_seqno = IStateServices.sequenceKey;
     private DuccIdFactory idFactory = new DuccIdFactory();
     
     private boolean signature_required = true;
@@ -827,18 +827,18 @@ public class ServiceManagerComponent
         props.put(UiOption.LogDirectory.pname(), logdir);
 
         DuccProperties meta = new DuccProperties();
-        meta.setProperty(SvcProps.user.pname(), user);
-        meta.setProperty(SvcProps.instances.pname(), ""+instances);
-        meta.setProperty(SvcProps.endpoint.pname(), endpoint);
-        meta.setProperty(SvcProps.numeric_id.pname(), id.toString());
-        meta.setProperty(SvcProps.uuid.pname(), id.getUnique());
-        meta.setProperty(SvcProps.registration_date_millis.pname(), 
Long.toString(regdate));
-        meta.setProperty(SvcProps.registration_date.pname(), regdate_readable);
+        meta.setProperty(SvcMetaProps.user.pname(), user);
+        meta.setProperty(SvcMetaProps.instances.pname(), ""+instances);
+        meta.setProperty(SvcMetaProps.endpoint.pname(), endpoint);
+        meta.setProperty(SvcMetaProps.numeric_id.pname(), id.toString());
+        meta.setProperty(SvcMetaProps.uuid.pname(), id.getUnique());
+        meta.setProperty(SvcMetaProps.registration_date_millis.pname(), 
Long.toString(regdate));
+        meta.setProperty(SvcMetaProps.registration_date.pname(), 
regdate_readable);
 
         if ( autostart == Trinary.True ) {            
-            meta.setProperty(SvcProps.autostart.pname(), "true");
+            meta.setProperty(SvcMetaProps.autostart.pname(), "true");
         } else {
-            meta.setProperty(SvcProps.autostart.pname(), "false");
+            meta.setProperty(SvcMetaProps.autostart.pname(), "false");
         }
 
         ServiceReplyEvent reply = handler.register(id, props, meta, false);

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=1711088&r1=1711087&r2=1711088&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
 Wed Oct 28 18:12:53 2015
@@ -82,8 +82,8 @@ public class ServiceSet
     // For a registered service, here is my registered id
     DuccId id;
     HashMap<Long, DuccId> friendly_ids = new HashMap<Long, DuccId>();
-    String history_key = IStateServices.SvcProps.work_instances.pname();
-    String implementors_key = IStateServices.SvcProps.implementors.pname();
+    String history_key = IStateServices.SvcMetaProps.work_instances.pname();
+    String implementors_key = IStateServices.SvcMetaProps.implementors.pname();
 
     // incoming nodes, for dup checking
     List<ServiceSet> predecessors = new ArrayList<ServiceSet>();
@@ -163,8 +163,8 @@ public class ServiceSet
 
     String[] coOwners = null;
 
-    String archive_key  = IStateServices.archive_key;
-    String archive_flag = IStateServices.archive_flag;
+    String archive_key  = "true";
+    String archive_flag = IStateServices.SvcMetaProps.is_archived.columnName();
 
     //
     // Constructor for a registered service
@@ -179,19 +179,19 @@ public class ServiceSet
 
         this.service_state = ServiceState.Stopped;
         this.linger_time = 
props.getLongProperty(UiOption.ServiceLinger.pname(), linger_time);
-        this.key = meta.getProperty(IStateServices.SvcProps.endpoint.pname());
+        this.key = 
meta.getProperty(IStateServices.SvcMetaProps.endpoint.pname());
 
         parseEndpoint(key);
 
-        this.user = meta.getProperty(IStateServices.SvcProps.user.pname());
-        this.instances = 
meta.getIntProperty(IStateServices.SvcProps.instances.pname(), 1);
+        this.user = meta.getProperty(IStateServices.SvcMetaProps.user.pname());
+        this.instances = 
meta.getIntProperty(IStateServices.SvcMetaProps.instances.pname(), 1);
         this.registered_instances = this.instances;
-        this.autostart = 
meta.getBooleanProperty(IStateServices.SvcProps.autostart.pname(), false);
-        this.ping_only = 
meta.getBooleanProperty(IStateServices.SvcProps.ping_only.pname(), false);
-        this.enabled   = 
meta.getBooleanProperty(IStateServices.SvcProps.enabled.pname(), enabled);
+        this.autostart = 
meta.getBooleanProperty(IStateServices.SvcMetaProps.autostart.pname(), false);
+        this.ping_only = 
meta.getBooleanProperty(IStateServices.SvcMetaProps.ping_only.pname(), false);
+        this.enabled   = 
meta.getBooleanProperty(IStateServices.SvcMetaProps.enabled.pname(), enabled);
         this.service_class = ServiceClass.Registered;
-        this.init_failure_max = 
props.getIntProperty(IStateServices.SvcProps.instance_init_failures_limit.pname(),
 init_failure_max);
-        this.reference_start = 
meta.getBooleanProperty(IStateServices.SvcProps.reference.pname(), 
this.reference_start);
+        this.init_failure_max = 
props.getIntProperty(IStateServices.SvcRegProps.instance_init_failures_limit.pname(),
 init_failure_max);
+        this.reference_start = 
meta.getBooleanProperty(IStateServices.SvcMetaProps.reference.pname(), 
this.reference_start);
 
         
         
@@ -208,28 +208,28 @@ public class ServiceSet
 
         parseIndependentServices();
 
-        meta_props.remove(IStateServices.SvcProps.references.pname());         
 // Will get refreshred in upcoming OR state messages
-        meta_props.remove(IStateServices.SvcProps.stopped.pname());            
 // obsolete flag, clean out of older registrations
+        meta_props.remove(IStateServices.SvcMetaProps.references.pname());     
     // Will get refreshred in upcoming OR state messages
+        meta_props.remove(IStateServices.SvcMetaProps.stopped.pname());        
     // obsolete flag, clean out of older registrations
 
-        meta_props.put(IStateServices.SvcProps.service_class.pname(), 
""+service_class.decode());
-        meta_props.put(IStateServices.SvcProps.service_type.pname(), 
""+service_type.decode());
-        meta_props.put(IStateServices.SvcProps.enabled.pname(), "" + enabled); 
        // may not have been there in the first place
-        meta_props.put(IStateServices.SvcProps.service_state.pname(), 
""+getState());
-        meta_props.put(IStateServices.SvcProps.ping_active.pname(), "false");
-        meta_props.put(IStateServices.SvcProps.service_alive.pname(),      
"false");
-        meta_props.put(IStateServices.SvcProps.service_healthy.pname(),    
"false");
-        meta_props.put(IStateServices.SvcProps.service_statistics.pname(), 
"N/A");
+        meta_props.put(IStateServices.SvcMetaProps.service_class.pname(), 
""+service_class.decode());
+        meta_props.put(IStateServices.SvcMetaProps.service_type.pname(), 
""+service_type.decode());
+        meta_props.put(IStateServices.SvcMetaProps.enabled.pname(), "" + 
enabled);         // may not have been there in the first place
+        meta_props.put(IStateServices.SvcMetaProps.service_state.pname(), 
""+getState());
+        meta_props.put(IStateServices.SvcMetaProps.ping_active.pname(), 
"false");
+        meta_props.put(IStateServices.SvcMetaProps.service_alive.pname(),      
"false");
+        meta_props.put(IStateServices.SvcMetaProps.service_healthy.pname(),    
"false");
+        meta_props.put(IStateServices.SvcMetaProps.service_statistics.pname(), 
"N/A");
         setReferenced(this.reference_start);
 
-        
setLastUse(meta_props.getLongProperty(IStateServices.SvcProps.last_use.pname(), 
0L));
-        
setLastPing(meta_props.getLongProperty(IStateServices.SvcProps.last_ping.pname(),
 0L));
-        
setLastRunnable(meta_props.getLongProperty(IStateServices.SvcProps.last_runnable.pname(),
 0L));
+        
setLastUse(meta_props.getLongProperty(IStateServices.SvcMetaProps.last_use.pname(),
 0L));
+        
setLastPing(meta_props.getLongProperty(IStateServices.SvcMetaProps.last_ping.pname(),
 0L));
+        
setLastRunnable(meta_props.getLongProperty(IStateServices.SvcMetaProps.last_runnable.pname(),
 0L));
 
         if ( (!job_props.containsKey(UiOption.ProcessExecutable.pname())) && 
(service_type != ServiceType.UimaAs) ) {
-            meta_props.put(IStateServices.SvcProps.ping_only.pname(), "true");
+            meta_props.put(IStateServices.SvcMetaProps.ping_only.pname(), 
"true");
             this.ping_only = true;
         } else {
-            meta_props.put(IStateServices.SvcProps.ping_only.pname(), "false");
+            meta_props.put(IStateServices.SvcMetaProps.ping_only.pname(), 
"false");
             this.ping_only = false;
         }
 
@@ -439,8 +439,15 @@ public class ServiceSet
     Map<Long, ServiceInstance> pendingImplementors = new HashMap<Long, 
ServiceInstance>();
     void bootImplementor(DuccId id, JobState state)
     {
+       String methodName = "bootImplementor";
         ServiceInstance si = new ServiceInstance(this);
 
+        if ( ! pending_instances.containsKey(id.getFriendly()) ) {
+            logger.warn(methodName, id, "Incoming Orchestrator state indicates 
active service instance but it is not in my meta data.");
+            logger.warn(methodName, id, "Instance ignored.  This is usally 
caused by system or database failure.");
+            return;
+        }
+
         si.setState(state);
         si.setId(id.getFriendly());
         si.setStopped(false);
@@ -567,11 +574,11 @@ public class ServiceSet
     synchronized void setLastUse(long lu)
     {
         this.last_use = lu;
-        meta_props.put(IStateServices.SvcProps.last_use.pname(), 
Long.toString(lu));
+        meta_props.put(IStateServices.SvcMetaProps.last_use.pname(), 
Long.toString(lu));
         if ( last_use == 0 ) {
-            meta_props.put(IStateServices.SvcProps.last_use_readable.pname(), 
"Unknown");
+            
meta_props.put(IStateServices.SvcMetaProps.last_use_readable.pname(), 
"Unknown");
         } else {
-            meta_props.put(IStateServices.SvcProps.last_use_readable.pname(), 
(new Date(lu)).toString());
+            
meta_props.put(IStateServices.SvcMetaProps.last_use_readable.pname(), (new 
Date(lu)).toString());
         }
     }
 
@@ -579,11 +586,11 @@ public class ServiceSet
     synchronized void setLastPing(long lp)
     {
         this.last_ping = lp;
-        meta_props.put(IStateServices.SvcProps.last_ping.pname(), 
Long.toString(lp));
+        meta_props.put(IStateServices.SvcMetaProps.last_ping.pname(), 
Long.toString(lp));
         if ( last_ping == 0 ) {
-            meta_props.put(IStateServices.SvcProps.last_ping_readable.pname(), 
"Unknown");
+            
meta_props.put(IStateServices.SvcMetaProps.last_ping_readable.pname(), 
"Unknown");
         } else {
-            meta_props.put(IStateServices.SvcProps.last_ping_readable.pname(), 
(new Date(lp)).toString());
+            
meta_props.put(IStateServices.SvcMetaProps.last_ping_readable.pname(), (new 
Date(lp)).toString());
         }
     }
 
@@ -591,11 +598,11 @@ public class ServiceSet
     synchronized void setLastRunnable(long lr)
     {
         this.last_runnable = lr;
-        meta_props.put(IStateServices.SvcProps.last_runnable.pname(), 
Long.toString(lr));
+        meta_props.put(IStateServices.SvcMetaProps.last_runnable.pname(), 
Long.toString(lr));
         if ( last_runnable == 0 ) {
-            
meta_props.put(IStateServices.SvcProps.last_runnable_readable.pname(), 
"Unknown");
+            
meta_props.put(IStateServices.SvcMetaProps.last_runnable_readable.pname(), 
"Unknown");
         } else {
-            
meta_props.put(IStateServices.SvcProps.last_runnable_readable.pname(), (new 
Date(lr)).toString());
+            
meta_props.put(IStateServices.SvcMetaProps.last_runnable_readable.pname(), (new 
Date(lr)).toString());
         }
     }
 
@@ -604,13 +611,13 @@ public class ServiceSet
         run_failures = 0;
         ping_failures = 0;
         init_failures = 0;
-        meta_props.remove(IStateServices.SvcProps.submit_error.pname());
+        meta_props.remove(IStateServices.SvcMetaProps.submit_error.pname());
         excessiveRunFailures = false;
     }
 
     synchronized void setAutostart(boolean auto)
     {
-        meta_props.setProperty(IStateServices.SvcProps.autostart.pname(), auto 
? "true" : "false");
+        meta_props.setProperty(IStateServices.SvcMetaProps.autostart.pname(), 
auto ? "true" : "false");
         this.autostart = auto;
         if ( auto ) {
             // turning this on gives benefit of the doubt on failure management
@@ -696,13 +703,13 @@ public class ServiceSet
 
     synchronized void disable(String reason)
     {
-        meta_props.put(IStateServices.SvcProps.disable_reason.pname(), reason);
+        meta_props.put(IStateServices.SvcMetaProps.disable_reason.pname(), 
reason);
         this.enabled = false;
     }
 
     synchronized void enable()
     {
-        meta_props.remove(IStateServices.SvcProps.disable_reason.pname());
+        meta_props.remove(IStateServices.SvcMetaProps.disable_reason.pname());
         resetRuntimeErrors();
         this.enabled = true;
     }
@@ -714,7 +721,7 @@ public class ServiceSet
 
     synchronized String getDisableReason()
     {
-        return 
meta_props.getStringProperty(IStateServices.SvcProps.disable_reason.pname(), 
"Unknown");
+        return 
meta_props.getStringProperty(IStateServices.SvcMetaProps.disable_reason.pname(),
 "Unknown");
     }
 
     /**
@@ -817,8 +824,8 @@ public class ServiceSet
         if ( ! isRecovered ) {       // if not recovery, no need to mess with 
the record
             stateHandler.storeProperties(id, job_props, meta_props);
         } else {                
-            stateHandler.updateJobProperties(meta_props.get("svc_dbid"), id, 
(Properties) job_props);
-            stateHandler.updateMetaProperties(meta_props.get("meta_dbid"), id, 
meta_props);
+            stateHandler.updateJobProperties(id, (Properties) job_props);
+            stateHandler.updateMetaProperties(id, meta_props);
         }
     }
 
@@ -828,7 +835,7 @@ public class ServiceSet
         // no more changes
         if ( isDeregistered() ) return;
 
-        stateHandler.updateJobProperties(meta_props.get("svc_dbid"), id, 
(Properties) job_props);
+        stateHandler.updateJobProperties(id, (Properties) job_props);
     }
 
     synchronized void updateMetaProperties()
@@ -839,7 +846,7 @@ public class ServiceSet
         // if ( isDeregistered() ) return;
 
         prepareMetaProperties();
-        stateHandler.updateMetaProperties(meta_props.get("meta_dbid"), id, 
meta_props);
+        stateHandler.updateMetaProperties(id, meta_props);
     }
 
     void prepareMetaProperties()
@@ -872,27 +879,27 @@ public class ServiceSet
         }
 
         
-        meta_props.put(IStateServices.SvcProps.reference.pname(), 
isReferencedStart() ? "true" : "false");
-        meta_props.put(IStateServices.SvcProps.autostart.pname(), 
isAutostart()       ? "true" : "false");
+        meta_props.put(IStateServices.SvcMetaProps.reference.pname(), 
isReferencedStart() ? "true" : "false");
+        meta_props.put(IStateServices.SvcMetaProps.autostart.pname(), 
isAutostart()       ? "true" : "false");
 
-        meta_props.put(IStateServices.SvcProps.enabled.pname(), ""+enabled);
-        meta_props.put(IStateServices.SvcProps.service_state.pname(), ""+ 
getState());
-        meta_props.put(IStateServices.SvcProps.ping_active.pname(), "" + 
(serviceMeta != null));
-        meta_props.put(IStateServices.SvcProps.service_alive.pname(),      
"false");
-        meta_props.put(IStateServices.SvcProps.service_healthy.pname(),    
"false");
+        meta_props.put(IStateServices.SvcMetaProps.enabled.pname(), 
""+enabled);
+        meta_props.put(IStateServices.SvcMetaProps.service_state.pname(), ""+ 
getState());
+        meta_props.put(IStateServices.SvcMetaProps.ping_active.pname(), "" + 
(serviceMeta != null));
+        meta_props.put(IStateServices.SvcMetaProps.service_alive.pname(),      
"false");
+        meta_props.put(IStateServices.SvcMetaProps.service_healthy.pname(),    
"false");
 
         if ( excessiveFailures() ) {
-            meta_props.put(IStateServices.SvcProps.submit_error.pname(), 
"Service stopped by exessive failures.  Initialization failures[" + 
init_failures + "], Runtime failures[" + run_failures + "]");
+            meta_props.put(IStateServices.SvcMetaProps.submit_error.pname(), 
"Service stopped by exessive failures.  Initialization failures[" + 
init_failures + "], Runtime failures[" + run_failures + "]");
         } else {
-            meta_props.put(IStateServices.SvcProps.service_statistics.pname(), 
"N/A");
+            
meta_props.put(IStateServices.SvcMetaProps.service_statistics.pname(), "N/A");
         }
         
         if ( serviceMeta != null ) {
             IServiceStatistics ss = serviceMeta.getServiceStatistics();
             if ( ss != null ) {
-                meta_props.put(IStateServices.SvcProps.service_alive.pname(),  
    "" + ss.isAlive());
-                
meta_props.put(IStateServices.SvcProps.service_healthy.pname(),    "" + 
ss.isHealthy());
-                
meta_props.put(IStateServices.SvcProps.service_statistics.pname(), "" + 
ss.getInfo());
+                
meta_props.put(IStateServices.SvcMetaProps.service_alive.pname(),      "" + 
ss.isAlive());
+                
meta_props.put(IStateServices.SvcMetaProps.service_healthy.pname(),    "" + 
ss.isHealthy());
+                
meta_props.put(IStateServices.SvcMetaProps.service_statistics.pname(), "" + 
ss.getInfo());
 
                 if ( ss.isAlive() ) {                    // UIMA-4309
                     setLastPing(System.currentTimeMillis());
@@ -916,7 +923,7 @@ public class ServiceSet
 
     synchronized void updateRegisteredInstances(int n)
     {
-        meta_props.setProperty(IStateServices.SvcProps.instances.pname(), 
Integer.toString(n));
+        meta_props.setProperty(IStateServices.SvcMetaProps.instances.pname(), 
Integer.toString(n));
         registered_instances = n;
     }
 
@@ -978,7 +985,7 @@ public class ServiceSet
         String methodName = "persistReferences";
 
         if ( references.size() == 0 ) {
-            meta_props.remove(IStateServices.SvcProps.references.pname());
+            meta_props.remove(IStateServices.SvcMetaProps.references.pname());
         } else {
             StringBuffer sb = new StringBuffer();
             for ( DuccId id : references.keySet() ) {
@@ -986,7 +993,7 @@ public class ServiceSet
                 sb.append(" ");
             }
             String s = sb.toString().trim();
-            meta_props.setProperty(IStateServices.SvcProps.references.pname(), 
s);
+            
meta_props.setProperty(IStateServices.SvcMetaProps.references.pname(), s);
         }
         try {
             updateMetaProperties();
@@ -1079,19 +1086,19 @@ public class ServiceSet
     public void setErrorString(String s)
        throws Exception
     {
-        meta_props.put(IStateServices.SvcProps.submit_error.pname(), s);
+        meta_props.put(IStateServices.SvcMetaProps.submit_error.pname(), s);
         updateMetaProperties();
     }
 
     public String getErrorString()
     {
-        return 
meta_props.getProperty(IStateServices.SvcProps.submit_error.pname()); 
+        return 
meta_props.getProperty(IStateServices.SvcMetaProps.submit_error.pname()); 
     }
 
     void setReferenced(boolean r)
     {
         this.reference_start = r;
-        meta_props.put(IStateServices.SvcProps.reference.pname(), 
Boolean.toString(this.reference_start));
+        meta_props.put(IStateServices.SvcMetaProps.reference.pname(), 
Boolean.toString(this.reference_start));
     }
 
     public synchronized void reference(DuccId id)
@@ -1808,7 +1815,7 @@ public class ServiceSet
 
             if ( isPingOnly() && (ping_failures > ping_failure_max) ) {
                 logger.warn(methodName, id, "Stopping ping-only service due to 
excessive falutes:", ping_failure_max);
-                meta_props.put(IStateServices.SvcProps.submit_error.pname(), 
"Stopping ping-only service due to excessive falutes: " + ping_failure_max);
+                
meta_props.put(IStateServices.SvcMetaProps.submit_error.pname(), "Stopping 
ping-only service due to excessive falutes: " + ping_failure_max);
 
                 stop(-1L);        // must be -lL Long to get the right overload
                 implementors.remove(-1L);
@@ -2160,13 +2167,13 @@ public class ServiceSet
         sd.setLinger(linger_time);
         sd.setId(id.getFriendly());
         sd.setUser(user);
-        
sd.setDisableReason(meta_props.getStringProperty(IStateServices.SvcProps.disable_reason.pname(),
 null));
+        
sd.setDisableReason(meta_props.getStringProperty(IStateServices.SvcMetaProps.disable_reason.pname(),
 null));
         sd.setLastUse(last_use);
         sd.setLastPing(last_ping);            // UIMA-4309
         sd.setLastRunnable(last_runnable);    // UIMA-4309
-        
sd.setRegistrationDate(meta_props.getStringProperty(IStateServices.SvcProps.registration_date.pname(),
 ""));
+        
sd.setRegistrationDate(meta_props.getStringProperty(IStateServices.SvcMetaProps.registration_date.pname(),
 ""));
         sd.setReferenceStart(reference_start);
-        
sd.setErrorString(meta_props.getStringProperty(IStateServices.SvcProps.submit_error.pname(),
 null));
+        
sd.setErrorString(meta_props.getStringProperty(IStateServices.SvcMetaProps.submit_error.pname(),
 null));
 
         if ( serviceMeta != null ) {
             sd.setQueueStatistics(serviceMeta.getServiceStatistics());

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/pom.xml
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/pom.xml?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/pom.xml (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/pom.xml Wed Oct 28 
18:12:53 2015
@@ -75,44 +75,7 @@
                        <artifactId>uima-ducc-container</artifactId>
                        <scope>compile</scope>
                </dependency>
-
-        <dependency>
-          <groupId>com.orientechnologies</groupId>
-          <artifactId>orientdb-graphdb</artifactId>
-             <version>${orientdb.version}</version>
-        </dependency>
-        
-        <dependency>
-             <groupId>com.tinkerpop.blueprints</groupId>
-             <artifactId>blueprints-core</artifactId>
-             <version>2.6.0</version>
-        </dependency>
         
-        <dependency>
-          <groupId>com.googlecode.concurrentlinkedhashmap</groupId>
-          <artifactId>concurrentlinkedhashmap-lru</artifactId>
-             <version>1.4.2</version>
-        </dependency>
-
-        <dependency>
-             <groupId>com.tinkerpop.gremlin</groupId>
-             <artifactId>gremlin-groovy</artifactId>
-             <version>2.6.0</version>
-        </dependency>
-
-        <dependency>
-             <groupId>com.orientechnologies</groupId>
-             <artifactId>orientdb-lucene</artifactId>
-             <version>${orientdb.version}</version>
-        </dependency>
-        
-        <dependency>
-             <groupId>org.webjars</groupId>
-             <artifactId>orientdb-studio</artifactId>
-             <version>${orientdb.studio.version}</version>
-        </dependency>
-
-
 
         <!-- dependency>
             <groupId>commons-httpclient</groupId>

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryFactory.java
 Wed Oct 28 18:12:53 2015
@@ -68,7 +68,7 @@ public class HistoryFactory
             @SuppressWarnings("unchecked")
                                Class<IStateServices> iss = 
(Class<IStateServices>) Class.forName(clname);
             instance = (IHistoryPersistenceManager) iss.newInstance();
-            instance.setLogger(logger);
+            instance.init(logger);
         } catch ( Throwable t ) {
             logger.error(methodName, null, "Cannot instantiate service 
persistence class", clname, ":", t);
             instance = new NullHistoryManager();

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/HistoryPersistenceManager.java
 Wed Oct 28 18:12:53 2015
@@ -32,6 +32,7 @@ import java.util.Map;
 
 import org.apache.uima.ducc.common.DuccEnvironmentHelper;
 import org.apache.uima.ducc.common.IDuccEnv;
+import org.apache.uima.ducc.common.Pair;
 import org.apache.uima.ducc.common.main.DuccService;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.IOHelper;
@@ -66,9 +67,10 @@ public class HistoryPersistenceManager i
         mkdirs();
     }
     
-    public void setLogger(DuccLogger logger)
+    public boolean init(DuccLogger logger)
     {
        this.logger = logger;
+       return true;
     }
     
     private void mkdirs() {
@@ -560,10 +562,10 @@ public class HistoryPersistenceManager i
         return false;
     }
 
-    public boolean restore(DuccWorkMap m, Map<DuccId, DuccId> processToJob)
+    public Pair<DuccWorkMap, Map<DuccId, DuccId>> restore()
         throws Exception
     {
-        return false;
+        return null;
     }
 
     private static int doJobs(HistoryPersistenceManager hpm) 

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java
 Wed Oct 28 18:12:53 2015
@@ -21,6 +21,8 @@ package org.apache.uima.ducc.transport.e
 import java.util.List;
 import java.util.Map;
 
+import org.apache.uima.ducc.common.Pair;
+import org.apache.uima.ducc.common.persistence.IDbProperty;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.event.common.DuccWorkMap;
@@ -44,9 +46,104 @@ public interface IHistoryPersistenceMana
        public List<IDuccWorkService>     restoreServices(long max)             
        throws Exception;
 
     public boolean checkpoint(DuccWorkMap work, Map<DuccId, DuccId> 
processToJob)   throws Exception;
-    public boolean restore(DuccWorkMap work, Map<DuccId, DuccId> processToJob) 
     throws Exception;
+    public Pair<DuccWorkMap, Map<DuccId, DuccId>>  restore()                   
     throws Exception;
+
+    /**
+     * Establish a logger and anything else the persistence may need.
+     *
+     * @param logger This is the logger to be used.  It is usually
+     *        the same logger as the client of persistence, e.g.
+     *        org.apache.uima.ducc.rm.  The implementor is required
+     *        to adjust itself to use this logger to insure 
+     *        messages are logged into the right log.
+     */
+    public boolean init(DuccLogger logger) throws Exception;
+
+    public enum OrWorkProps    // properties for the OR work map 
+        implements IDbProperty
+    {
+       JOB_TABLE {
+            public String pname()      { return "job_history"; } 
+            public boolean isPrivate() { return true; }                
+            public boolean isMeta()    { return true; }                
+       },
+
+       RESERVATION_TABLE {
+            public String pname()      { return "res_history"; } 
+            public boolean isPrivate() { return true; }                
+            public boolean isMeta()    { return true; }                
+       },
+
+       SERVICE_TABLE {
+            public String pname()      { return "svc_history"; } 
+            public boolean isPrivate() { return true; }                
+            public boolean isMeta()    { return true; }                
+       },
+
+
+        // The order of the primary keys is important here as the Db assigns 
semantics to the first key in a compound PK
+        type {
+            public String pname()         { return "type"; }     // "job", 
"reservation", "service", ...
+            public boolean isPrimaryKey() { return true; }
+        },
+
+        ducc_dbid {
+            public String pname()         { return "ducc_dbid"; }
+            public Type type()            { return Type.Long; }
+            public boolean isPrimaryKey() { return true; }
+        },
+
+        history {
+            public String pname()  { return "history"; }        // to the 
future, is this a history or ckpt item?
+            public Type type()     { return Type.Boolean; }
+        },
+
+        work {
+            public String pname() { return "work"; };
+            public Type type()    { return Type.Blob; }
+        },
+
+        ;
+        public Type type() { return Type.String; }
+        public boolean isPrimaryKey() { return false; }
+        public boolean isPrivate()  { return false; }
+        public boolean isMeta()  { return false; }
+        public String columnName() { return pname(); }
+
+     };
+
+    public enum OrCkptProps    // properties for the OR checkpoint
+        implements IDbProperty
+    {
+        CKPT_TABLE {
+            public String pname()      { return "orckpt"; } 
+            public boolean isPrivate() { return true; }                
+            public boolean isMeta()    { return true; }                
+       },
+
+        id {
+            public String pname()      { return "id"; }
+            public boolean isPrimaryKey() { return true; }
+            public Type type()         { return Type.Integer; }
+        },
+
+        work {
+            public String pname() { return "work"; };
+        },
+
+        p2jmap {
+            public String pname() { return "p2jmap"; };
+        },
+
+        ;
+        public Type type() { return Type.Blob; }
+        public boolean isPrimaryKey() { return false; }
+        public boolean isPrivate()  { return false; }
+        public boolean isMeta()  { return false; }
+        public String columnName() {return pname(); }
+
+     };
 
-    public void setLogger(DuccLogger logger);
        //public void serviceSaveConditional(IDuccWorkService duccWorkService) 
throws Exception;
        // public void serviceSave(IDuccWorkService duccWorkService) throws 
Exception;
        //public IDuccWorkService serviceRestore(String fileName);

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/NullHistoryManager.java
 Wed Oct 28 18:12:53 2015
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.uima.ducc.common.Pair;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.event.common.DuccWorkMap;
@@ -38,7 +39,7 @@ public class NullHistoryManager
     {
        }
        
-       public void setLogger(DuccLogger logger) {}
+       public boolean init(DuccLogger logger) {return true;}
        
        public void saveJob(IDuccWorkJob duccWorkJob) 
         throws Exception 
@@ -126,6 +127,6 @@ public class NullHistoryManager
        }
 
     public boolean checkpoint(DuccWorkMap work, Map<DuccId, DuccId> 
processToJob)   throws Exception { return false; }
-    public boolean restore(DuccWorkMap work, Map<DuccId, DuccId> processToJob) 
     throws Exception { return false; }
+    public Pair<DuccWorkMap, Map<DuccId, DuccId>> restore()                    
     throws Exception { return null; }
        
 }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/IServicesRegistry.java
 Wed Oct 28 18:12:53 2015
@@ -26,28 +26,28 @@ public class IServicesRegistry {
        public static final String svc = IStateServices.svc;
        
        // meta
-       public static final String autostart = 
IStateServices.SvcProps.autostart.pname();
-       public static final String reference = 
IStateServices.SvcProps.reference.pname();
-       public static final String enabled = 
IStateServices.SvcProps.enabled.pname();
-       public static final String disable_reason = 
IStateServices.SvcProps.disable_reason.pname();
-       public static final String endpoint = 
IStateServices.SvcProps.endpoint.pname();
-       public static final String implementors = 
IStateServices.SvcProps.implementors.pname();
-       public static final String instances = 
IStateServices.SvcProps.instances.pname();
-       public static final String numeric_id = 
IStateServices.SvcProps.numeric_id.pname();
-       public static final String ping_active = 
IStateServices.SvcProps.ping_active.pname();
-       public static final String ping_only = 
IStateServices.SvcProps.ping_only.pname();
-       public static final String service_alive = 
IStateServices.SvcProps.service_alive.pname();
-       public static final String service_class = 
IStateServices.SvcProps.service_class.pname();
-       public static final String service_dependency = 
IStateServices.SvcProps.service_dependency.pname();
-       public static final String service_healthy = 
IStateServices.SvcProps.service_healthy.pname();
-       public static final String service_state = 
IStateServices.SvcProps.service_state.pname();
-       public static final String last_use = 
IStateServices.SvcProps.last_use.pname();
-       public static final String service_statistics = 
IStateServices.SvcProps.service_statistics.pname();
-       public static final String service_type = 
IStateServices.SvcProps.service_type.pname();
-       public static final String submit_error = 
IStateServices.SvcProps.submit_error.pname();
-       public static final String user = IStateServices.SvcProps.user.pname();
+       public static final String autostart = 
IStateServices.SvcMetaProps.autostart.pname();
+       public static final String reference = 
IStateServices.SvcMetaProps.reference.pname();
+       public static final String enabled = 
IStateServices.SvcMetaProps.enabled.pname();
+       public static final String disable_reason = 
IStateServices.SvcMetaProps.disable_reason.pname();
+       public static final String endpoint = 
IStateServices.SvcMetaProps.endpoint.pname();
+       public static final String implementors = 
IStateServices.SvcMetaProps.implementors.pname();
+       public static final String instances = 
IStateServices.SvcMetaProps.instances.pname();
+       public static final String numeric_id = 
IStateServices.SvcMetaProps.numeric_id.pname();
+       public static final String ping_active = 
IStateServices.SvcMetaProps.ping_active.pname();
+       public static final String ping_only = 
IStateServices.SvcMetaProps.ping_only.pname();
+       public static final String service_alive = 
IStateServices.SvcMetaProps.service_alive.pname();
+       public static final String service_class = 
IStateServices.SvcMetaProps.service_class.pname();
+       public static final String service_dependency = 
IStateServices.SvcMetaProps.service_dependency.pname();
+       public static final String service_healthy = 
IStateServices.SvcMetaProps.service_healthy.pname();
+       public static final String service_state = 
IStateServices.SvcMetaProps.service_state.pname();
+       public static final String last_use = 
IStateServices.SvcMetaProps.last_use.pname();
+       public static final String service_statistics = 
IStateServices.SvcMetaProps.service_statistics.pname();
+       public static final String service_type = 
IStateServices.SvcMetaProps.service_type.pname();
+       public static final String submit_error = 
IStateServices.SvcMetaProps.submit_error.pname();
+       public static final String user = 
IStateServices.SvcMetaProps.user.pname();
        
-       public static final String service_type_CUSTOM = 
IStateServices.SvcProps.CUSTOM.pname();
+       public static final String service_type_CUSTOM = IStateServices.CUSTOM;
        
        public static final String constant_Available = "Available";
        public static final String constant_true = "true";
@@ -60,9 +60,9 @@ public class IServicesRegistry {
        public static final String constant_OK = "OK";
        
        // svc
-       public static final String description = 
IStateServices.SvcProps.description.pname();
-       public static final String process_memory_size = 
IStateServices.SvcProps.process_memory_size.pname();
-       public static final String scheduling_class = 
IStateServices.SvcProps.scheduling_class.pname();
-       public static final String log_directory = 
IStateServices.SvcProps.log_directory.pname();
+       public static final String description = 
IStateServices.SvcRegProps.description.pname();
+       public static final String process_memory_size = 
IStateServices.SvcRegProps.process_memory_size.pname();
+       public static final String scheduling_class = 
IStateServices.SvcRegProps.scheduling_class.pname();
+       public static final String log_directory = 
IStateServices.SvcRegProps.log_directory.pname();
        
 }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java?rev=1711088&r1=1711087&r2=1711088&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/registry/sort/ServicesSortCache.java
 Wed Oct 28 18:12:53 2015
@@ -62,11 +62,11 @@ public class ServicesSortCache {
                        for(Entry<SortableService, IServiceAdapter> entry : 
map.entrySet()) {
                                IServiceAdapter payload = entry.getValue();
                                Properties meta = payload.getMeta();
-                               String key = 
IStateServices.SvcProps.numeric_id.pname();
+                               String key = 
IStateServices.SvcMetaProps.numeric_id.pname();
                                String value = meta.getProperty(key);
                                int numeric_id = Integer.parseInt(value);
                                if(numeric_id == id) {
-                                       
meta.setProperty(IStateServices.SvcProps.enabled.pname(), 
Boolean.toString(bool));
+                                       
meta.setProperty(IStateServices.SvcMetaProps.enabled.pname(), 
Boolean.toString(bool));
                                        payload.setMeta(meta);
                                        break;
                                }


Reply via email to