You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2018/04/30 19:21:22 UTC

svn commit: r1830625 - in /uima/uima-ducc/trunk: src/main/admin/ src/main/resources/ uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/ uima-ducc-common/src/main/java/org/apache/uima/duc...

Author: degenaro
Date: Mon Apr 30 19:21:21 2018
New Revision: 1830625

URL: http://svn.apache.org/viewvc?rev=1830625&view=rev
Log:
UIMA-5742 Reliable DUCC 

- support ducc.database.host.list in ducc.properties
- support --db-automanage and --db-host-list in ducc_post_install

Added:
    uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java   (with props)
Removed:
    uima/uima-ducc/trunk/src/main/admin/db_start
    uima/uima-ducc/trunk/src/main/admin/db_stop
Modified:
    uima/uima-ducc/trunk/src/main/admin/check_ducc
    uima/uima-ducc/trunk/src/main/admin/db_create
    uima/uima-ducc/trunk/src/main/admin/db_loader
    uima/uima-ducc/trunk/src/main/admin/db_util.py
    uima/uima-ducc/trunk/src/main/admin/ducc_post_install
    uima/uima-ducc/trunk/src/main/admin/ducc_util.py
    uima/uima-ducc/trunk/src/main/admin/rm_qoccupancy
    uima/uima-ducc/trunk/src/main/admin/start_ducc
    uima/uima-ducc/trunk/src/main/admin/stop_ducc
    uima/uima-ducc/trunk/src/main/resources/default.ducc.properties
    uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java
    uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbQuery.java
    uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesHelper.java
    uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesResolver.java
    uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/InetHelper.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbAlive.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbDuccWorks.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbLoader.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbManager.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbOrchestratorProperties.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmNodeState.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmQLoad.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmShareState.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java
    uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
    uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/part4/reliable.tex
    uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/reliable-ducc.tex
    uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorState.java
    uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorStateDbConversion.java
    uima/uima-ducc/trunk/uima-ducc-orchestrator/src/test/java/org/apache/uima/ducc/orchestrator/jd/scheduler/test/TestSuite.java
    uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java
    uima/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java

Modified: uima/uima-ducc/trunk/src/main/admin/check_ducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/check_ducc?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/check_ducc (original)
+++ uima/uima-ducc/trunk/src/main/admin/check_ducc Mon Apr 30 19:21:21 2018
@@ -287,6 +287,8 @@ class CheckDucc(DuccUtil):
             print "Head node is not initialized.  Have you run ducc_post_install?"
             return
 
+        self.check_properties()
+        
         if ( do_validate ):
             # if validating, ONLY validate, called via ssh usually
             self.validate(checkdate)

Modified: uima/uima-ducc/trunk/src/main/admin/db_create
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/db_create?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/db_create (original)
+++ uima/uima-ducc/trunk/src/main/admin/db_create Mon Apr 30 19:21:21 2018
@@ -70,22 +70,36 @@ class DbCreate(DuccUtil):
         print ""
         sys.exit(1) 
                                     
-    def main(self, argv):                    
-
+    def main(self, argv):     
+                   
+		self.database_automanage = False
+        self.database_host_list = None
+        self.database_user = None
         self.database_pw = None
 
         try:
-            opts, args = getopt.getopt(argv, 'd:n:h?', ['db-password=', 'help'])
+            opts, args = getopt.getopt(argv, 'a:o:u:d:n:h?', ['db-automanage=', 'db-host-list=', 'db-user=', 'db-password=', 'help'])
         except:
             self.usage("Invalid arguments " + ' '.join(argv))
 
 
         for ( o, a ) in opts:
+            if o in ('-a', '--db-automanage'):
+            	if(o in { 'True', 'T', 'true', 't'}):
+                    self.database_automanage = True
+                else:
+                    self.database_automanage = False
+            if o in ('-o', '--db-host-list'):
+                self.database_host_list = a
+            if o in ('-u', '--db-user'):
+                self.database_user = a
             if o in ('-d', '--db-password'):
                 self.database_pw = a
             elif o in ('-h', '-?', '--help'):
                 self.usage(None)
         
+ 
+        	
         # abort db create if db already running
         status = 'unknown'
         cmd = self.DUCC_HOME+'/cassandra-server/bin/nodetool'
@@ -103,6 +117,16 @@ class DbCreate(DuccUtil):
             print 'unsafe to proceed, database status: '+status
             return
     
+        if( self.database_host_list == None ) :
+        	self.database_host_list = self.ducc_properties.get("ducc.database.host.list")
+        if( self.database_host_list == None ) :
+        	self.database_host_list = self.ducc_properties.get("ducc.database.host")
+        if( self.database_host_list == None ) :
+        	self.database_host_list = self.ducc_properties.get("ducc.head")
+    
+    	 if ( self.database_user == None ):
+            self.database_user = 'ducc'
+    
         if ( self.database_pw == None ):
             self.database_pw = self.generate_pw()
 
@@ -111,14 +135,17 @@ class DbCreate(DuccUtil):
 
         # configure the database for local system and initialize the schema
         db_node = self.ducc_properties.get("ducc.head")
-        if ( dbu.configure_database(self.DUCC_HOME, db_node, self.jvm, self.database_pw)):
+        if ( dbu.configure_database(self.DUCC_HOME, self.ducc_head, self.jvm, self.database_automanage, self.database_host_list, self.database_user, db_pw) ):
             private_props_name = self.DUCC_HOME + '/resources.private/ducc.private.properties'
 
             print 'Writing database password to', private_props_name
             ducc_site_properties = Properties();
             site_props_name = self.DUCC_HOME + '/resources/site.ducc.properties'
             ducc_site_properties.load(site_props_name)
-            ducc_site_properties.put('ducc.database.host', db_node);
+            ducc_site_properties.put('ducc.database.automanage', str(self.database_automanage));
+            ducc_site_properties.delete('ducc.database.host');
+            ducc_site_properties.put('ducc.database.host.list', self.database_host_list);
+            ducc_site_properties.put('ducc.database.user', self.database_user);
             ducc_site_properties.put('ducc.service.persistence.impl', 'org.apache.uima.ducc.database.StateServicesDb'   , ['# Service manager persistence'])
             ducc_site_properties.put('ducc.job.history.impl'        , 'org.apache.uima.ducc.database.HistoryManagerDb'  , ['# History and checkpoint'])
             ducc_site_properties.put('ducc.rm.persistence.impl'     , 'org.apache.uima.ducc.database.RmStatePersistence', ['# RM state persistence'])

Modified: uima/uima-ducc/trunk/src/main/admin/db_loader
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/db_loader?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/db_loader (original)
+++ uima/uima-ducc/trunk/src/main/admin/db_loader Mon Apr 30 19:21:21 2018
@@ -92,9 +92,9 @@ class DbLoader(DuccUtil):
         if ( in_home == None ):
             self.usage("Missing input DUCC_HOME")
 
-        out_url = self.ducc_properties.get('ducc.database.host')
+        out_url = self.get_db_host()
         if ( out_url == None ):
-            self.usage("Cannot find 'ducc.database.host' in your properties file.");
+            self.usage("Database host not defined in ducc.properties file.");
 
         self.db_start()
 

Modified: uima/uima-ducc/trunk/src/main/admin/db_util.py
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/db_util.py?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/db_util.py (original)
+++ uima/uima-ducc/trunk/src/main/admin/db_util.py Mon Apr 30 19:21:21 2018
@@ -141,15 +141,13 @@ def update_cassandra_config(DUCC_HOME, D
                 os.system(ch_head)
         
 
-
-def configure_database(DUCC_HOME, DUCC_HEAD, java, db_pw):
+def configure_database(DUCC_HOME, DUCC_HEAD, java, db_autostart=True, db_host=None, db_user=None, db_pw=None ):
     # for cassandra:
     # in ducc_runtime/cassandra-server/conf we need to update cassandra.yaml to establish
     # the data directories and db connection addresses
 
     # Note this is a bootstrap routine and doesn't try to use common code that may depend on
     # things being initialized correctly.
-    
 
     if ( db_pw == None ):
         db_pw = raw_input("Enter database password OR 'bypass' to bypass database support:")
@@ -160,21 +158,28 @@ def configure_database(DUCC_HOME, DUCC_H
     if ( db_pw == 'bypass' ):
         print 'Database support will be bypassed'
         return True
-        
-    if ( os.path.exists(DUCC_HOME + "/state/database/data") ):
-        print 'Database is already defined in', DUCC_HOME + '/database', '- but will try to rebuild.'
-
-    update_cassandra_config(DUCC_HOME, DUCC_HEAD)
-
-    here = os.getcwd()
-    os.chdir(DUCC_HOME + "/cassandra-server")
-    pidfile = DUCC_HOME + '/state/cassandra.pid'
-    print 'Starting the database.  This might take a few moments if it is the first time.'
-    CMD = "bin/cassandra -p "+  pidfile + " > /dev/null 2>&1";
-    os.system(CMD);
-    print "Database is started.  Waiting for initialization";
-    os.chdir(here) 
 
+    if(db_host == None):
+        db_host = DUCC_HEAD
+    
+    db_host = db_host.split()[0]
+    print "database host: "+str(db_host)
+    
+    if( db_autostart ):
+        if ( os.path.exists(DUCC_HOME + "/state/database/data") ):
+            print 'Database is already defined in', DUCC_HOME + '/database', '- but will try to rebuild.'
+        update_cassandra_config(DUCC_HOME, DUCC_HEAD)
+        here = os.getcwd()
+        os.chdir(DUCC_HOME + "/cassandra-server")
+        pidfile = DUCC_HOME + '/state/cassandra.pid'
+        print 'Starting the database.  This might take a few moments if it is the first time.'
+        CMD = "bin/cassandra -p "+  pidfile + " > /dev/null 2>&1";
+        os.system(CMD);
+        print "Database is started.  Waiting for initialization";
+        os.chdir(here) 
+    else:
+        print "Database is not auto-managed.";
+        
     # Now start the db and create the schema
     CLASSPATH = ''
     CLASSPATH = addToCp(CLASSPATH, DUCC_HOME + '/lib/cassandra/*')
@@ -186,13 +191,14 @@ def configure_database(DUCC_HOME, DUCC_H
     print os.environ['CLASSPATH']
 
     ret = True
-    CMD = [java, '-DDUCC_HOME=' + DUCC_HOME, 'org.apache.uima.ducc.database.DbCreate', DUCC_HEAD, 'ducc', db_pw]
+    CMD = [java, '-DDUCC_HOME=' + DUCC_HOME, 'org.apache.uima.ducc.database.DbCreate', db_host, db_user, db_pw]
     CMD = ' '.join(CMD)
     if ( execute(CMD) == 0 ):
         print 'Database is initialized.'
     else:
-        print 'Database started but the schema could not be defined. DB logs are in', DUCC_HEAD + '/cassandra-server/logs.'
+        print 'Database schema could not be defined.'
         ret = False
 
-    stop_database(pidfile)
+    if( db_autostart ):
+        stop_database(pidfile)
     return ret

Modified: uima/uima-ducc/trunk/src/main/admin/ducc_post_install
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/ducc_post_install?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/ducc_post_install (original)
+++ uima/uima-ducc/trunk/src/main/admin/ducc_post_install Mon Apr 30 19:21:21 2018
@@ -63,6 +63,15 @@ class PostInstall():
         print "   [-j, --jvm] <path to java executable>"
         print "        This is the full path to java command to be used to start DUCC; e.g., /usr/bin/java"
         print ""
+        print "   [-a, --db-automanage] <True|False>"
+        print "        Specify False if DUCC should not start/stop database."
+        print ""
+        print "   [-o, --db-host-list] host1 <host2 host3...>"
+        print "        The database host(s)."
+        print ""
+        print "   [-u, --db-user] <root user for database>"
+        print "        This is the user DUCC uses to manage the database."
+        print ""
         print "   [-d, --db-password] <root password for database>"
         print "        This is the password DUCC uses to manage the database."
         print ""
@@ -140,15 +149,14 @@ class PostInstall():
         if (db_pw == None):
             db_pw = self.get_pw(self.database_pw)
 
-        if ( db_pw == 'bypass' ):
-            print 'Database support will be disabled'
-            self.update_property('ducc.database.host', '--disabled--', '# Database support is disabled')
-            return True;
-            
-        if ( dbu.configure_database(self.DUCC_HOME, self.ducc_head, self.path_to_java, db_pw) ):
+        #if ( db_pw == 'bypass' ):
+        #    print 'Database support will be disabled'
+        #    self.update_property('ducc.database.host', '--disabled--', '# Database support is disabled')
+        #    return True;
+        
+        if ( dbu.configure_database(self.DUCC_HOME, self.ducc_head, self.path_to_java, self.database_automanage, self.database_host_list, self.database_user, db_pw) ):
             print 'Configuring DUCC to use the database.'
 
-            self.update_property('ducc.database.host', self.ducc_head, '# Database location')
             self.update_property('ducc.service.persistence.impl', 'org.apache.uima.ducc.database.StateServicesDb', '# Service manager persistence')
             self.update_property('ducc.job.history.impl', 'org.apache.uima.ducc.database.HistoryManagerDb', '# History and checkpoint')
             self.update_property('ducc.rm.persistence.impl', 'org.apache.uima.ducc.database.RmStatePersistence', '# RM state persistence')
@@ -330,6 +338,21 @@ class PostInstall():
 
         print "Ducc head is configured as", self.ducc_head, '\n'        
 
+    def setup_ducc_database(self):
+        # ducc.database.automanage
+        if(self.database_automanage == True):
+            self.update_property('ducc.database.automanage', 'True', '# Database start/stop managed by DUCC')
+        else:
+            self.update_property('ducc.database.automanage', 'False', '# Database start/stop not managed by DUCC')
+        # ducc.database.host.list
+        if ( self.database_host_list == None ):
+            self.database_host_list = self.ducc_head
+        self.update_property('ducc.database.host.list', self.database_host_list, '# Database host list') 
+    	# ducc.database.user
+        if ( self.database_user == None ):
+            self.database_user = 'ducc'
+        self.update_property('ducc.database.user', self.database_user, '# Database user') 
+    
     def mkbackup(self, fn):
         if ( os.path.exists(fn) ):
             bak = fn + '.bak'
@@ -410,18 +433,29 @@ class PostInstall():
         self.ducc_uid = None
         self.ducc_head = None
         self.keystore_pw = None
+        self.database_automanage = False
+        self.database_host_list = None
+        self.database_user = None
         self.database_pw = None
         self.path_to_java = None
 
         try:
-            opts, args = getopt.getopt(argv, 'd:j:k:n:h?', ['db-password=', 'jvm=', 'keystore=', 'head-node=', 'help'])
+            opts, args = getopt.getopt(argv, 'a:o:u:d:j:k:n:h?', ['db-automanage=', 'db-host-list=', 'db-user=', 'db-password=', 'jvm=', 'keystore=', 'head-node=', 'help'])
         except:
             self.usage("Invalid arguments " + ' '.join(argv))
 
-
         for ( o, a ) in opts:
             if o in ('-n', '--head-node'):
                 self.ducc_head = a
+            if o in ('-a', '--db-automanage'):
+                if(o in [ 'True', 'T', 'true', 't']):
+                    self.database_automanage = True
+                else:
+                    self.database_automanage = False
+            if o in ('-o', '--db-host-list'):
+                self.database_host_list = a
+            if o in ('-u', '--db-user'):
+                self.database_user = a
             if o in ('-d', '--db-password'):
                 self.database_pw = a
             if o in ('-k', '--keystore'):
@@ -460,6 +494,7 @@ class PostInstall():
 
         self.setup_ducc_uid()
         self.setup_ducc_head()
+        self.setup_ducc_database()
         self.check_nodes()
 
         # insure java is configured and installed

Modified: uima/uima-ducc/trunk/src/main/admin/ducc_util.py
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/ducc_util.py?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/ducc_util.py (original)
+++ uima/uima-ducc/trunk/src/main/admin/ducc_util.py Mon Apr 30 19:21:21 2018
@@ -195,10 +195,47 @@ class DuccUtil(DuccBase):
         print 'Merging', base_props, 'with', site_props, 'into', run_props
         os.system(CMD)
 
-
+    def check_properties(self):
+        database_host_list = self.ducc_properties.get('ducc.database.host.list')
+        database_host = self.ducc_properties.get('ducc.database.host')
+        database_jmx_host = self.ducc_properties.get('ducc.database.jmx.host')
+        if(database_host_list != None):
+            if(database_host != None):
+                text = 'ducc.database.host_list and ducc.database.host both specified.'
+                print 'Error: '+text
+                sys.exit(1)
+            if(database_jmx_host != None):
+                if(database_jmx_host != 'localhost'):
+                    text = 'ducc.database.host_list and ducc.database.jmx.host both specified.'
+                    print 'Error: '+text
+                    sys.exit(1)
+    
+    def get_db_host_list(self):
+        result = []
+        slist = self.ducc_properties.get('ducc.database.host.list')
+        if(slist == None):
+            slist = self.ducc_properties.get('ducc.database.host')
+        if(slist != None):
+            result = slist.split()
+        return result
+    
+    def get_db_host(self):
+        result = None
+        host_list = self.get_db_host_list()
+        if(host_list != None):
+            if(len(host_list) > 0):
+                result = host_list[0]
+        return result
+    
+    def is_db_disabled(self):
+        result = False
+        dbhost = self.get_db_host()
+        if(dbhost == self.db_disabled):
+            result = True
+        return result
+    
     def db_configure(self):
-        dbhost = self.ducc_properties.get('ducc.database.host')
-        if ( dbhost == self.db_disabled ):
+        if(self.is_db_disabled()):
             self.db_bypass = True
             return;
         else:
@@ -244,8 +281,7 @@ class DuccUtil(DuccBase):
             return self.db_alive_check(retry,verbose)
         
     def db_alive_check(self, retry=10, verbose=True):
-        dbnode = self.ducc_properties.get('ducc.database.host')
-        if ( dbnode == None ):
+        if(self.is_db_disabled()):
             if(verbose):
                 print 'No database location defined.'
             return False
@@ -257,6 +293,8 @@ class DuccUtil(DuccBase):
         # get our log4j config into the path to shut up noisy logging
         os.environ['CLASSPATH'] = os.environ['CLASSPATH'] + ':' + self.DUCC_HOME + '/resources'
         
+        dbnode = self.get_db_host()
+        
         CMD = [self.java(), 'org.apache.uima.ducc.database.DbAlive', dbnode, 'ducc', self.db_password, str(retry)]
 
         CMD = ' '.join(CMD)
@@ -273,11 +311,18 @@ class DuccUtil(DuccBase):
 
         # bypass all of this for the initial delivery
         if ( self.db_bypass == True) :
-            print '   (Bypass database start because ducc.database.host =', self.db_disabled + ')'
+            print '   (Bypass database start)'
             return True
-
+        
+        if(dbnode == None):
+            print '   (Bypass database start - no database configured)'
+            return False
+        
+        if(len(dbnode) > 1):
+            print '   (Bypass database start - database list not supported)'
+            return False
+        
         print 'Starting database'
-        dbnode = self.ducc_properties.get('ducc.database.host')
         dbu.update_cassandra_config(self.DUCC_HOME, dbnode)
 
         max_attempts = 5
@@ -318,9 +363,15 @@ class DuccUtil(DuccBase):
     def db_stop(self):
         try:
             if ( self.db_bypass == True) :
-                print '   (Bypass database stop because ducc.database.host =', self.db_disabled + ')'
+                print '   (Bypass database stop)'
                 return True
-            dbnode = self.ducc_properties.get('ducc.database.host')
+            dbnode = self.get_db_host()
+            if(dbnode == None):
+                print '   (Bypass database stop - no database configured)'
+                return False
+            if(len(dbnode) > 1):
+                print '   (Bypass database stop - database list not supported)'
+                return False
             dbnode = dbnode.strip()
             pidfile = os.path.join(DUCC_HOME,'state','database',dbnode,'cassandra.pid')
             cmd = [ 'less', '-FX', pidfile ]
@@ -1258,7 +1309,7 @@ class DuccUtil(DuccBase):
 
         os.environ['DUCC_NODENAME'] = self.localhost    # to match java code's implicit property so script and java match
 
-        dbhost = self.ducc_properties.get('ducc.database.host')
+        dbhost = self.get_db_host()
         if ( dbhost == None ):
             dbhost = self.ducc_properties.get('ducc.head')
         if ( dbhost == None ):

Modified: uima/uima-ducc/trunk/src/main/admin/rm_qoccupancy
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/rm_qoccupancy?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/rm_qoccupancy (original)
+++ uima/uima-ducc/trunk/src/main/admin/rm_qoccupancy Mon Apr 30 19:21:21 2018
@@ -120,7 +120,7 @@ class DuccRmQOccupancy(DuccUtil):
             sys.exit(1);
 
         DH = self.DUCC_HOME
-        dbn = self.ducc_properties.get('ducc.database.host')
+        dbn = self.get_db_host()
 
         guest_pw = self.db_password_guest
 

Modified: uima/uima-ducc/trunk/src/main/admin/start_ducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/start_ducc?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/start_ducc (original)
+++ uima/uima-ducc/trunk/src/main/admin/start_ducc Mon Apr 30 19:21:21 2018
@@ -239,6 +239,8 @@ class StartDucc(DuccUtil):
 
         self.verify_head()
 
+        self.check_properties()
+
         if ( not self.verify_jvm() ):
             sys.exit(1);
 

Modified: uima/uima-ducc/trunk/src/main/admin/stop_ducc
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/admin/stop_ducc?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/admin/stop_ducc (original)
+++ uima/uima-ducc/trunk/src/main/admin/stop_ducc Mon Apr 30 19:21:21 2018
@@ -193,6 +193,8 @@ class StopDucc(DuccUtil):
 
         self.verify_head()
 
+        self.check_properties()
+
         if ( len(argv) == 0 ):
             self.usage(None)
 
@@ -261,7 +263,7 @@ class StopDucc(DuccUtil):
 
 
 
-        # avaid confusion by insuring that if 'all', then nothing else is specified
+        # avoid confusion by insuring that if 'all', then nothing else is specified
         if ( all and ( do_components ) ):
             self.invalid("The --all option is mutually exclusive with --component")
         

Modified: uima/uima-ducc/trunk/src/main/resources/default.ducc.properties
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/src/main/resources/default.ducc.properties?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/src/main/resources/default.ducc.properties (original)
+++ uima/uima-ducc/trunk/src/main/resources/default.ducc.properties Mon Apr 30 19:21:21 2018
@@ -1020,13 +1020,13 @@ ducc.flow-controller.specifier=org.apach
 # | Database                                                                                         |
 # +==================================================================================================+
 
-# Name of the database host - initially disabled until database is created.
+# Name of the database host(s) - initially disabled until database is created.
 # Overridden in site.ducc.properties by ducc_post_install or db_create.
-# This is the name of the host where the database is run.  It usually defaults to the
+# This is the name of the host(s) where the database is run.  It usually defaults to the
 # same host as the ducc.head.  Those knowledgable of the database can install the 
-# database elsewhere.  Use this parameter to specify that location.
+# database elsewhere.  Use this parameter to specify that location(s).
 # To disable use of the database, set this parameter to the string --disabled--
-ducc.database.host            = --disabled--
+ducc.database.host.list       = --disabled--
 
 # Database JMX host. Default is to allow only local JMX access.  Specify the real name for remote access.
 ducc.database.jmx.host = localhost

Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/CliBase.java Mon Apr 30 19:21:21 2018
@@ -36,6 +36,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.uima.ducc.common.crypto.Crypto;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccProperties;
 import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.Utils;
@@ -499,11 +500,7 @@ public abstract class CliBase
      * If DB is disabled, then save specification to filesystem
      */
     private boolean isDbDisabled() {
-    	boolean retVal = false;
-    	String dbHost = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_database_host, "?");
-    	if(dbHost.equals(DuccPropertiesResolver.ducc_database_disabled)) {
-    		retVal = true;
-    	}
+    	boolean retVal = DbHelper.isDbEnabled();
     	return retVal;
     }
     

Added: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java?rev=1830625&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java Mon Apr 30 19:21:21 2018
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.common.db;
+
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
+import org.apache.uima.ducc.common.utils.id.DuccId;
+
+/*
+ * Class to help utilize database entries from ducc.properties file
+ */
+public class DbHelper {
+
+	public static final String ducc_database_host = "ducc.database.host";
+	
+	private static DuccLogger logger = DuccLogger.getLogger(DbHelper.class);
+	private static DuccId jobid = null;
+	
+	private static final DuccPropertiesResolver dpr = DuccPropertiesResolver.getInstance();
+	
+	// enabled if not == null and not == --disabled--
+	public static boolean isDbEnabled() {
+		boolean retVal = true;
+		
+		String value;
+		value = dpr.getProperty(DuccPropertiesResolver.ducc_database_host_list);
+		if(value != null) {
+			if(value.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
+				retVal = false;
+			}
+		}
+		else {
+			value = dpr.getProperty(ducc_database_host);
+			if(value != null) {
+				if(value.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
+					retVal = false;
+				}
+			}
+			else {
+				retVal = false;
+			}
+		}
+		return retVal;
+	}
+	
+	public static boolean isDbDisabled() {
+		return !isDbEnabled();
+	}
+	
+	public static String getHostListString() {
+		String retVal = dpr.getProperty(DuccPropertiesResolver.ducc_database_host_list);
+		if(retVal == null) {
+			dpr.getProperty(ducc_database_host);
+		}
+		return retVal;
+	}
+	
+	public static String getJxmHostString() {
+		String retVal = dpr.getProperty(DuccPropertiesResolver.ducc_database_jmx_host);
+		return retVal;
+	}
+	
+	public static String getJxmPortString() {
+		String retVal = dpr.getProperty(DuccPropertiesResolver.ducc_database_jmx_port);
+		return retVal;
+	}
+	
+	public static Integer getJxmPortInteger() {
+		String location = "getJxmPortInteger";
+		Integer retVal = new Integer(7199);
+		String jmx_port = dpr.getProperty(DuccPropertiesResolver.ducc_database_jmx_port);
+		try {
+			retVal = Integer.parseInt(jmx_port);
+		}
+		catch(Exception e) {
+			logger.error(location, jobid, e);
+		}
+		return retVal;
+	}
+	
+	private static String[] emptyList = new String[0];
+	
+	public static String[] getHostList() {
+		String[] retVal = emptyList;
+		String hostListString = getHostListString();
+		if(hostListString != null) {
+			retVal = stringToArray(hostListString);
+		}
+		return retVal;
+	}
+	
+    public static String[] stringToArray(String input) {
+    	String[] output = null;
+    	if(input == null) {
+    		output = new String[0];
+    	}
+    	else {
+    		output = input.split("\\s+");
+    	}
+    	return output;
+    }
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbQuery.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbQuery.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbQuery.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/db/DbQuery.java Mon Apr 30 19:21:21 2018
@@ -27,7 +27,6 @@ import org.apache.uima.ducc.common.main.
 import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
 import org.apache.uima.ducc.common.persistence.rm.RmPersistenceFactory;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 
 public class DbQuery {
@@ -55,14 +54,7 @@ public class DbQuery {
 	
 	private DbQuery() {
 		createLogger(this);
-		DuccPropertiesResolver dpr = DuccPropertiesResolver.getInstance();
-		String value;
-		value = dpr.getProperty(DuccPropertiesResolver.ducc_database_host);
-		if(value != null) {
-			if(value.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
-				enabled = false;
-			}
-		}
+		enabled = DbHelper.isDbEnabled();
 		String component = (String) MDC.get("COMPONENT");
 		persistence = RmPersistenceFactory.getInstance(this.getClass().getName(),component);
 	}

Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesHelper.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesHelper.java Mon Apr 30 19:21:21 2018
@@ -42,4 +42,15 @@ public class DuccPropertiesHelper {
 		return retVal;
 	}
 	
+	public static boolean isDatabaseAutomanaged() {
+		boolean retVal = true;
+		String key = DuccPropertiesResolver.ducc_database_automanage;
+		String value = DuccPropertiesResolver.get(key,defaultDuccHead);
+		if(value != null) {
+			Boolean bool = new Boolean(value);
+			retVal = bool.booleanValue();
+		}
+		return retVal;
+	}
+	
 }

Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesResolver.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesResolver.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesResolver.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/DuccPropertiesResolver.java Mon Apr 30 19:21:21 2018
@@ -108,7 +108,8 @@ public class DuccPropertiesResolver {
     public static final String ducc_broker_jmx_port = "ducc.broker.jmx.port";
     public static final String ducc_jms_provider = "ducc.jms.provider";
     
-    public static final String ducc_database_host = "ducc.database.host";
+    public static final String ducc_database_automanage = "ducc.database.automanage";
+    public static final String ducc_database_host_list = "ducc.database.host.list";
     public static final String ducc_database_disabled = "--disabled--";
     public static final String ducc_database_jmx_host = "ducc.database.jmx.host";
     public static final String ducc_database_jmx_port = "ducc.database.jmx.port";

Modified: uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/InetHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/InetHelper.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/InetHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/utils/InetHelper.java Mon Apr 30 19:21:21 2018
@@ -19,6 +19,8 @@
 package org.apache.uima.ducc.common.utils;
 
 import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
@@ -62,5 +64,35 @@ public class InetHelper {
 	public static String getHostName() {
 		return getShortHostName();
 	}
+	
+	/*
+	 * get list of corresponding IPs for given list of host names
+	 */
+	public static String[] getIP(String[] hostList) {
+		List<String> ipList = new ArrayList<String>();
+		try {
+			if(hostList != null) {
+				for(String hostName : hostList) {
+					InetAddress inetAddress = InetAddress.getByName(hostName);
+					StringBuffer sb = new StringBuffer();
+					byte[] byteAddress = inetAddress.getAddress();
+					if(byteAddress != null) {
+						for(int i=0; i<byteAddress.length; i++) {
+							if(i > 0) {
+								sb.append(".");
+							}
+							sb.append(byteAddress[i] & 0xFF);
+						}
+						ipList.add(sb.toString());
+					}
+				}
+			}
+		}
+		catch(Exception e) {
+			// Oh well...
+		}
+		return ipList.toArray(new String[0]);
+	}
+	
 
 }

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbAlive.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbAlive.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbAlive.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbAlive.java Mon Apr 30 19:21:21 2018
@@ -32,7 +32,7 @@ import com.datastax.driver.core.exceptio
 
 public class DbAlive
 {
-    String dburl;
+    String db_host_list;
     String adminid = null;
     String adminpw = null;
 
@@ -65,9 +65,9 @@ public class DbAlive
     private Cluster cluster;
     //private Session session;
 
-    public DbAlive(String dburl, String adminid, String adminpw)
+    public DbAlive(String db_host_list, String adminid, String adminpw)
     {
-        this.dburl = dburl;
+        this.db_host_list = db_host_list;
         this.adminid = adminid;
         this.adminpw = adminpw;
     }
@@ -80,7 +80,7 @@ public class DbAlive
             PlainTextAuthProvider auth = new PlainTextAuthProvider(adminid, adminpw);
             cluster = Cluster.builder()
                 .withAuthProvider(auth)
-                .addContactPoint(dburl)
+                .addContactPoints(db_host_list.split("\\s+"))
                 .build();
 
             Metadata metadata = cluster.getMetadata();

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java Mon Apr 30 19:21:21 2018
@@ -19,7 +19,10 @@
 
 package org.apache.uima.ducc.database;
 
+import java.net.InetSocketAddress;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import org.apache.uima.ducc.common.utils.DuccLogger;
@@ -42,7 +45,7 @@ public class DbCreate
     int RETRY = 10;
 
     DuccLogger logger = null;
-    String dburl;
+    String db_host_list;
     String adminid = null;
     String adminpw = null;
     boolean useNewPw = false;
@@ -51,17 +54,17 @@ public class DbCreate
     private Session session = null;
 
 
-    DbCreate(String dburl, DuccLogger logger, String adminid, String adminpw)
+    DbCreate(String db_host_list, DuccLogger logger, String adminid, String adminpw)
     {
-        this.dburl = dburl;
+        this.db_host_list = db_host_list;
         this.logger = logger;
         this.adminid = adminid;
         this.adminpw = adminpw;
     }
 
-    DbCreate(String dburl, String adminid, String adminpw)
+    DbCreate(String db_host_list, String adminid, String adminpw)
     {
-        this.dburl = dburl;
+        this.db_host_list = db_host_list;
         this.adminid = adminid;
         this.adminpw = adminpw;
     }
@@ -73,6 +76,21 @@ public class DbCreate
         cluster = null;
     }
 
+    private void recommendation() {
+    	doLog("Check cassandra.yaml for the following entries:");
+    	doLog("> authenticator: PasswordAuthenticator");
+    	doLog("> authorizer: org.apache.cassandra.auth.CassandraAuthorizer");
+    }
+    
+    private void show(NoHostAvailableException e) {
+    	e.printStackTrace();
+        Map<InetSocketAddress, Throwable> map = e.getErrors();
+        for(Entry<InetSocketAddress, Throwable> entry : map.entrySet()) {
+        	Throwable t = entry.getValue();
+        	t.printStackTrace();
+        }
+    }
+    
     boolean connect()
         throws Exception
     {
@@ -84,7 +102,7 @@ public class DbCreate
         }
 
         // If we're here, we must first of all get rid of the cassandra su and set up our own
-
+        doLog("database location(s): "+db_host_list);
 
         for ( int i = 0; i < RETRY; i++ ) {
             try {
@@ -92,7 +110,7 @@ public class DbCreate
                 AuthProvider auth = new PlainTextAuthProvider("cassandra", "cassandra");
                 cluster = Cluster.builder()
                     .withAuthProvider(auth)
-                    .addContactPoint(dburl)
+                    .addContactPoints(db_host_list.split("\\s+"))
                     .build();
                     
                 session = cluster.connect();
@@ -103,7 +121,7 @@ public class DbCreate
                 auth = new PlainTextAuthProvider(adminid, adminpw);
                 cluster = Cluster.builder()
                     .withAuthProvider(auth)
-                    .addContactPoint(dburl)
+                    .addContactPoints(db_host_list.split("\\s+"))
                     .build();
                 session = cluster.connect();
                     
@@ -114,6 +132,7 @@ public class DbCreate
                 break;
             } catch ( NoHostAvailableException e ) {
                 doLog("Waiting for database to boot ...");
+                show(e);
                 session = null;
                 cluster = null;
             } catch ( AuthenticationException e ) {
@@ -124,7 +143,7 @@ public class DbCreate
                     AuthProvider auth = new PlainTextAuthProvider(adminid, adminpw);
                     cluster = Cluster.builder()
                         .withAuthProvider(auth)
-                        .addContactPoint(dburl)
+                        .addContactPoints(db_host_list.split("\\s+"))
                         .build();
                     session = cluster.connect();                    
                     // if this works we assume the DB user base is ok and continue
@@ -137,6 +156,7 @@ public class DbCreate
                 cluster = null;
             } catch ( Exception e ) {
                 doLog("Unknown problem contacting database.");
+                recommendation();
                 session = null;
                 cluster = null;
                 e.printStackTrace();
@@ -147,6 +167,7 @@ public class DbCreate
             
         if ( cluster == null ) {
             doLog(methodName, "Excessive retries.  Database may not be initialized.");
+            recommendation();
             return false;
         }
         Metadata metadata = cluster.getMetadata();

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbDuccWorks.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbDuccWorks.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbDuccWorks.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbDuccWorks.java Mon Apr 30 19:21:21 2018
@@ -21,11 +21,11 @@ package org.apache.uima.ducc.database;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.persistence.or.IDbDuccWorks;
 import org.apache.uima.ducc.common.persistence.or.ITypedProperties;
 import org.apache.uima.ducc.common.persistence.or.TypedProperties;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 
 import com.datastax.driver.core.ResultSet;
@@ -57,13 +57,9 @@ public class DbDuccWorks implements IDbD
 	}
 	
 	private String messageDbDisabled = "db disabled";
-	private String dbHost = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_database_host, "?");
     
 	private boolean isDbDisabled() {
-    	boolean retVal = false;
-    	if(dbHost.equals(DuccPropertiesResolver.ducc_database_disabled)) {
-    		retVal = true;
-    	}
+    	boolean retVal = DbHelper.isDbDisabled();
     	return retVal;
     }
 	
@@ -149,8 +145,7 @@ public class DbDuccWorks implements IDbD
 			 logger.debug(location, jobid, messageDbDisabled);
 			 return;
 		 }
-	     String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-	     String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+	     String[] dbUrls = DbHelper.getHostList();
 	     init(dbUrls);
 	}
 

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbLoader.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbLoader.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbLoader.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbLoader.java Mon Apr 30 19:21:21 2018
@@ -34,6 +34,7 @@ import java.util.concurrent.LinkedBlocki
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.uima.ducc.common.Pair;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.persistence.services.IStateServices;
 import org.apache.uima.ducc.common.persistence.services.IStateServices.SvcMetaProps;
 import org.apache.uima.ducc.common.persistence.services.IStateServices.SvcRegProps;
@@ -140,8 +141,6 @@ public class DbLoader
         serviceRegistryHistory = from + serviceRegistryHistory;
         serviceRegistry        = from + serviceRegistry;
         checkpointFile         = from + checkpointFile;
-
-        System.setProperty(DbManager.URL_PROPERTY, state_url);
         
         this.nthreads = nthreads;
     }
@@ -566,7 +565,7 @@ public class DbLoader
         long now = System.currentTimeMillis();
         boolean run_test = false;
 
-        String[] dbUrls = DbUtil.dbServersStringToArray(state_url);
+        String[] dbUrls = DbHelper.getHostList();
         
         if ( run_test ) {
             try {

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbManager.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbManager.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbManager.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbManager.java Mon Apr 30 19:21:21 2018
@@ -43,7 +43,6 @@ import com.datastax.driver.core.policies
  */
 public class DbManager
 {
-    static final String URL_PROPERTY = "ducc.database.host";
     private static String db_id = null;
     private static String db_pw = null;
 

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbOrchestratorProperties.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbOrchestratorProperties.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbOrchestratorProperties.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbOrchestratorProperties.java Mon Apr 30 19:21:21 2018
@@ -21,6 +21,7 @@ package org.apache.uima.ducc.database;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 
@@ -123,8 +124,7 @@ public class DbOrchestratorProperties im
 	@Override
 	public void init(DuccLogger duccLogger) throws Exception {
 		 this.logger = duccLogger;
-		 String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-	     String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+	     String[] dbUrls = DbHelper.getHostList();
 	     init(dbUrls);
 	}
 

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java Mon Apr 30 19:21:21 2018
@@ -320,26 +320,4 @@ class DbUtil
         throw new IllegalArgumentException("Unrecognized type for schema: " + t);
     }
     
-    static private String[] stringToArray(String input) {
-    	String[] output = null;
-    	if(input == null) {
-    		output = new String[0];
-    	}
-    	else {
-    		output = input.split("\\s+");
-    	}
-    	return output;
-    }
-    
-    // temporary limit??
-    static private int max_db_servers = 1;
-    
-    static String[] dbServersStringToArray(String input) throws Exception {
-    	String[] output = stringToArray(input);
-    	if(output.length > max_db_servers) {
-    		throw new Exception();
-    	}
-    	return output;
-    }
-
 }

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java Mon Apr 30 19:21:21 2018
@@ -29,6 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.uima.ducc.common.Pair;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.node.metrics.ProcessGarbageCollectionStats;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
@@ -144,12 +145,17 @@ public class HistoryManagerDb
         return ret;
 	}
 
+	public boolean init(DuccLogger logger, String host) throws Exception {
+		this.logger = logger;
+		String[] dbUrls = { host };
+		return init(dbUrls, null);
+	}
+	
     public boolean init(DuccLogger logger)
         throws Exception
     {
         this.logger = logger;
-        String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-        String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+        String[] dbUrls = DbHelper.getHostList();
         return init(dbUrls, null);
     }
 
@@ -158,8 +164,7 @@ public class HistoryManagerDb
     	throws Exception
     {
     	this.logger = logger;
-        String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-        String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+    	String[] dbUrls = DbHelper.getHostList();
         return init(dbUrls, dbManager);
     }
 

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmNodeState.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmNodeState.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmNodeState.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmNodeState.java Mon Apr 30 19:21:21 2018
@@ -104,7 +104,6 @@ public class RmNodeState
             System.out.println("Usage: RmNodeState <dburl>");
             System.exit(1);
         }
-        System.setProperty(DbManager.URL_PROPERTY, args[0]);
 
         RmNodeState rns = new RmNodeState(args[0]);
         try {

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmQLoad.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmQLoad.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmQLoad.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmQLoad.java Mon Apr 30 19:21:21 2018
@@ -106,7 +106,6 @@ public class RmQLoad
             System.out.println("Usage: RmQLoad <dburl>");
             System.exit(1);
         }
-        System.setProperty(DbManager.URL_PROPERTY, args[0]);
 
         RmQLoad rns = new RmQLoad(args[0]);
         try {

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmShareState.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmShareState.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmShareState.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmShareState.java Mon Apr 30 19:21:21 2018
@@ -105,8 +105,7 @@ public class RmShareState
             System.out.println("Usage: RmShareState <dburl>");
             System.exit(1);
         }
-        System.setProperty(DbManager.URL_PROPERTY, args[0]);
-
+        
         RmShareState rns = new RmShareState(args[0]);
         try {
             rns.run();

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java Mon Apr 30 19:21:21 2018
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.persistence.rm.IDbJob;
 import org.apache.uima.ducc.common.persistence.rm.IDbShare;
 import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
@@ -98,8 +99,7 @@ public class RmStatePersistence
     	throws Exception
     {
     	this.logger = logger;
-    	String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-        String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+        String[] dbUrls = DbHelper.getHostList();
         init(dbUrls);
         DbHandle h = dbManager.open();
 

Modified: uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java Mon Apr 30 19:21:21 2018
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.UUID;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 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;
@@ -97,8 +98,7 @@ public class StateServicesDb
     	throws Exception
     {
     	this.logger = logger;
-        String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-        String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+        String[] dbUrls = DbHelper.getHostList();
         return init(dbUrls, null);
     }
 
@@ -107,8 +107,7 @@ public class StateServicesDb
     	throws Exception
     {
     	this.logger = logger;
-    	String dbUrlsString = System.getProperty(DbManager.URL_PROPERTY);
-        String[] dbUrls = DbUtil.dbServersStringToArray(dbUrlsString);
+    	String[] dbUrls = DbHelper.getHostList();
         return init(dbUrls, dbManager);
     }
 

Modified: uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/part4/reliable.tex
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/part4/reliable.tex?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/part4/reliable.tex (original)
+++ uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/part4/reliable.tex Mon Apr 30 19:21:21 2018
@@ -163,16 +163,6 @@
     ducc.database.jmx.host = dbhost123
     ducc.database.automanage = false
    	\end{verbatim}
-	
-	Two new convenience commands are available for DUCC administrators.  
-	When issued by the DUCC administrator, these commands will start and stop the database 
-	on the database host machine regardless of the value specified for 
-	{\em ducc.database.automanage} in {\em site.ducc.properties}.
-	
-	\begin{verbatim}
-	admin/db\_start
-	afmin/db\_stop
-   	\end{verbatim}
    	
    	The existing administrator commands {\em start\_ducc} and {\em stop\_ducc} will
    	honor the value specified for {\em ducc.database.automanage} in {\em site.ducc.properties}.

Modified: uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/reliable-ducc.tex
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/reliable-ducc.tex?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/reliable-ducc.tex (original)
+++ uima/uima-ducc/trunk/uima-ducc-duccdocs/src/site/tex/duccbook/reliable-ducc.tex Mon Apr 30 19:21:21 2018
@@ -193,16 +193,6 @@ This first major section describes suppo
     ducc.database.jmx.host = dbhost123
     ducc.database.automanage = false
    	\end{verbatim}
-	
-	Two new convenience commands are available for DUCC administrators.  
-	When issued by the DUCC administrator, these commands will start and stop the database 
-	on the database host machine regardless of the value specified for 
-	{\em ducc.database.automanage} in {\em site.ducc.properties}.
-	
-	\begin{verbatim}
-	admin/db\_start
-	afmin/db\_stop
-   	\end{verbatim}
    	
    	The existing administrator commands {\em start\_ducc} and {\em stop\_ducc} will
    	honor the value specified for {\em ducc.database.automanage} in {\em site.ducc.properties}.
@@ -240,9 +230,7 @@ publication.
   \item \textbf{ducc\_post\_install} - no need to create webserver request log directory
   \item \textbf{ducc\_util.py} - incorporate host name into cassandra.pid, cassandra.console path; broker host must be local host; head node must be eligible with respect to keepalived.conf; head node local components are all daemons except Database and Agents; fix remote db stop; honor ducc.database.automanage flag in site.ducc.properties
   \item \textbf{ducc.py} - incorporate host name into cassandra.pid, cassandra.console path
-  \item \textbf{start\_ducc.py} - head node local components must start on eligible local host
-  \item \textbf{db\_start} - (new) start DUCC database
-  \item \textbf{db\_stop} - (new) stop DUCC database
+  \item \textbf{start\_ducc.py} - head node local components must  on eligible local host
   \item \textbf{start\_sim} - (example) honor database autostart flag in ducc.properties
   item \textbf{stop\_sim} - (example) honor database autostart flag in ducc.properties
 \end{itemize}

Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorState.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorState.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorState.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorState.java Mon Apr 30 19:21:21 2018
@@ -18,8 +18,8 @@
 */
 package org.apache.uima.ducc.orchestrator.state;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 
 
@@ -43,13 +43,9 @@ public class OrchestratorState {
 	}
 	
 	private static String messageDbDisabled = "db disabled";
-	private static String dbHost = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_database_host, "?");
     
 	private static boolean isDbDisabled() {
-    	boolean retVal = false;
-    	if(dbHost.equals(DuccPropertiesResolver.ducc_database_disabled)) {
-    		retVal = true;
-    	}
+    	boolean retVal = DbHelper.isDbDisabled();
     	return retVal;
     }
 	

Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorStateDbConversion.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorStateDbConversion.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorStateDbConversion.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/main/java/org/apache/uima/ducc/orchestrator/state/OrchestratorStateDbConversion.java Mon Apr 30 19:21:21 2018
@@ -25,8 +25,8 @@ import java.io.FileReader;
 import java.lang.reflect.Type;
 import java.util.Properties;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.orchestrator.OrchestratorCommonArea;
 
@@ -86,15 +86,10 @@ public class OrchestratorStateDbConversi
 			logger.error(location, jobid, e);
 		}
 	}
-	
-	private static String dbHost = DuccPropertiesResolver.get(DuccPropertiesResolver.ducc_database_host, "?");
-    
+
 	private static boolean isDbDisabled() {
 		String location = "isDbDisabled";
-    	boolean retVal = false;
-    	if(dbHost.equals(DuccPropertiesResolver.ducc_database_disabled)) {
-    		retVal = true;
-    	}
+    	boolean retVal = DbHelper.isDbDisabled();
     	logger.info(location, jobid, retVal);
     	return retVal;
     }

Modified: uima/uima-ducc/trunk/uima-ducc-orchestrator/src/test/java/org/apache/uima/ducc/orchestrator/jd/scheduler/test/TestSuite.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-orchestrator/src/test/java/org/apache/uima/ducc/orchestrator/jd/scheduler/test/TestSuite.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-orchestrator/src/test/java/org/apache/uima/ducc/orchestrator/jd/scheduler/test/TestSuite.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-orchestrator/src/test/java/org/apache/uima/ducc/orchestrator/jd/scheduler/test/TestSuite.java Mon Apr 30 19:21:21 2018
@@ -175,7 +175,7 @@ public class TestSuite {
 		}
 	}
 	
-	@Test
+	//Test
 	public void testJdSchedulerStatic() {
 		try {
 			IDuccHead dh = DuccHead.getInstance();
@@ -233,7 +233,7 @@ public class TestSuite {
 		}
 	}
 	
-	@Test
+	//Test
 	public void testJdSchedulerDynamic() {
 		try {
 			DuccId jobId = new DuccId(999);

Modified: uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-rm/src/main/java/org/apache/uima/ducc/rm/scheduler/Scheduler.java Mon Apr 30 19:21:21 2018
@@ -37,6 +37,7 @@ import org.apache.uima.ducc.common.admin
 import org.apache.uima.ducc.common.admin.event.RmQueriedMachine;
 import org.apache.uima.ducc.common.admin.event.RmQueriedNodepool;
 import org.apache.uima.ducc.common.component.AbstractDuccComponent;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccProperties;
 import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
@@ -238,7 +239,7 @@ public class Scheduler
         logger.info(methodName, null, "                       class definition file   : ", class_definitions);
         logger.info(methodName, null, "                       default domain          : ", defaultDomain);      // UIMA-4142
         logger.info(methodName, null, "                       eviction policy         : ", evictionPolicy);
-        logger.info(methodName, null, "                       database enabled        : ", !System.getProperty("ducc.database.host").equals("--disabled--"));
+        logger.info(methodName, null, "                       database enabled        : ", DbHelper.isDbEnabled());
         logger.info(methodName, null, "                       database implementation : ", System.getProperty("ducc.rm.persistence.impl"));
         logger.info(methodName, null, "                       use prediction          : ", SystemPropertyResolver.getBooleanProperty("ducc.rm.prediction", true));
         logger.info(methodName, null, "                       prediction fudge factor : ", SystemPropertyResolver.getIntProperty("ducc.rm.prediction.fudge", 10000));

Modified: uima/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-sm/src/main/java/org/apache/uima/ducc/sm/ServiceManagerComponent.java Mon Apr 30 19:21:21 2018
@@ -35,6 +35,7 @@ import org.apache.uima.ducc.common.boot.
 import org.apache.uima.ducc.common.boot.DuccDaemonRuntimeProperties.DaemonName;
 import org.apache.uima.ducc.common.component.AbstractDuccComponent;
 import org.apache.uima.ducc.common.crypto.Crypto;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.head.IDuccHead;
 import org.apache.uima.ducc.common.head.IDuccHead.DuccHeadTransition;
 import org.apache.uima.ducc.common.main.DuccService;
@@ -336,7 +337,7 @@ public class ServiceManagerComponent
         logger.info(methodName, null, "    Service ping stability  : ", meta_ping_stability);
         logger.info(methodName, null, "    Default ping class      : ", default_ping_class);
         logger.info(methodName, null, "");
-        logger.info(methodName, null, "    database enabled        : ", !System.getProperty("ducc.database.host").equals("--disabled--"));
+        logger.info(methodName, null, "    database enabled        : ", DbHelper.isDbEnabled());
         logger.info(methodName, null, "    database implementation : ", System.getProperty("ducc.service.persistence.impl"));
         logger.info(methodName, null, "");
         logger.info(methodName, null, "    Init Failure Max        : ", init_failure_max);

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/db/DbQuery.java Mon Apr 30 19:21:21 2018
@@ -23,10 +23,10 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.apache.uima.ducc.common.Pair;
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.persistence.rm.IRmPersistence;
 import org.apache.uima.ducc.common.persistence.rm.RmPersistenceFactory;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.IDuccLoggerComponents;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.event.common.DuccWorkMap;
@@ -61,14 +61,7 @@ public class DbQuery {
 	}
 	
 	private DbQuery() {
-		DuccPropertiesResolver dpr = DuccPropertiesResolver.getInstance();
-		String value;
-		value = dpr.getProperty(DuccPropertiesResolver.ducc_database_host);
-		if(value != null) {
-			if(value.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
-				enabled = false;
-			}
-		}
+		enabled = DbHelper.isDbEnabled();
 		persistence = RmPersistenceFactory.getInstance(this.getClass().getName(),component);
 		history = HistoryFactory.getInstance(this.getClass().getName());
 	}

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DatabaseHelper.java Mon Apr 30 19:21:21 2018
@@ -21,8 +21,8 @@ package org.apache.uima.ducc.ws.helper;
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
 
+import org.apache.uima.ducc.common.db.DbHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.ws.db.DbQuery;
 
@@ -38,7 +38,7 @@ public class DatabaseHelper extends JmxH
 	}
 
 	protected boolean enabled = false;
-	protected String host = null;
+	protected String[] host_list = null;
 	
 	private DatabaseHelper() {
 		init();
@@ -47,34 +47,13 @@ public class DatabaseHelper extends JmxH
 	private void init() {
 		String location = "init";
 		try {
-			DuccPropertiesResolver dpr = DuccPropertiesResolver.getInstance();
-			host = dpr.getProperty(DuccPropertiesResolver.ducc_database_host);
-			if(host != null) {
-				setHost(host);
-				if(!host.equalsIgnoreCase(DuccPropertiesResolver.ducc_database_disabled)) {
-					enabled = true;
-				}
-			}
+			host_list = DbHelper.getHostList();
+			enabled = DbHelper.isDbEnabled();
 			if(enabled) {
-				String jmxHost = dpr.getProperty(DuccPropertiesResolver.ducc_database_jmx_host);
-				if(jmxHost != null) {
-					try {
-						setJmxHost(jmxHost);
-					}
-					catch(Exception e) {
-						logger.error(location, jobid, e);
-					}
-				}
-				setJmxPort(7199);  // default
-				String jmxPort = dpr.getProperty(DuccPropertiesResolver.ducc_database_jmx_port);
-				if(jmxPort != null) {
-					try {
-						setJmxPort(Integer.parseInt(jmxPort));
-					}
-					catch(Exception e) {
-						logger.error(location, jobid, e);
-					}
-				}
+				String jmx_host = DbHelper.getJxmHostString();
+				setJmxHost(jmx_host);
+				Integer jmx_port = DbHelper.getJxmPortInteger();
+				setJmxPort(jmx_port); 
 				jmxConnect();
 			}
 		}
@@ -83,6 +62,16 @@ public class DatabaseHelper extends JmxH
 		}
 	}
 	
+	public String getHostListString() {
+		StringBuffer sb = new StringBuffer();
+		for(String host : host_list) {
+			sb.append(host);
+			sb.append(" ");
+		}
+		String retVal = sb.toString().trim();
+		return retVal;
+	}
+	
 	public boolean isEnabled() {
 		return enabled;
 	}
@@ -91,14 +80,6 @@ public class DatabaseHelper extends JmxH
 		return !enabled;
 	}
 	
-	private void setHost(String value) {
-		host = value;
-	}
-	
-	public String getHost() {
-		return host;
-	}
-	
 	// Runtime Info //
 	
 	public boolean isAlive() {

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java Mon Apr 30 19:21:21 2018
@@ -924,6 +924,31 @@ public abstract class DuccAbstractHandle
         return sb.toString();
     }
 
+    public String tableize(String stringList) {
+    	String retVal = stringList;
+    	if(retVal != null) {
+    		String[] list = stringList.split("\\s+");
+    		retVal = tableize(list);
+    	}
+	    return retVal;
+    }
+    
+    public String tableize(String[] list) {
+    	StringBuffer sb = new StringBuffer();
+    	if(list != null) {
+    		sb.append("<table>");
+    		for(String item : list) {
+    			sb.append("<tr>");
+    			sb.append("<td>");
+    			sb.append(item);
+    			sb.append("</td>");
+    			sb.append("</tr>");
+    		}
+    		sb.append("</table>");
+    	}
+    	return sb.toString();
+    }
+    
 	protected String getMonitor(DuccId duccId, MonitorType monitorType) {
 		return getMonitor(duccId, monitorType, false);
 	}

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java Mon Apr 30 19:21:21 2018
@@ -48,8 +48,10 @@ import org.apache.uima.ducc.common.inter
 import org.apache.uima.ducc.common.utils.ComponentHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccProperties;
+import org.apache.uima.ducc.common.utils.DuccPropertiesHelper;
 import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.DuccSchedulerClasses;
+import org.apache.uima.ducc.common.utils.InetHelper;
 import org.apache.uima.ducc.common.utils.TimeStamp;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.orchestrator.jd.scheduler.JdReservation;
@@ -1487,10 +1489,31 @@ public class DuccHandlerClassic extends
 				else {
 					status = DuccHandlerUtils.down();
 				}
-				bootTime = getTimeStamp(DuccCookies.getDateStyle(request),databaseHelper.getStartTime());
-				hostName = useWS(wsHostName, databaseHelper.getHost());
-				hostIP = useWS(wsHostName, hostName, wsHostIP);
-				pid = ""+databaseHelper.getPID();
+				if(DuccPropertiesHelper.isDatabaseAutomanaged()) {
+					bootTime = getTimeStamp(DuccCookies.getDateStyle(request),databaseHelper.getStartTime());
+					hostName = useWS(wsHostName, databaseHelper.getHostListString());
+					hostIP = useWS(wsHostName, hostName, wsHostIP);
+					pid = ""+databaseHelper.getPID();
+				}
+				else {
+					bootTime = "-";
+					hostName = useWS(wsHostName, databaseHelper.getHostListString());
+					String[] hostList = hostName.split("\\s+");
+					String[] ipList = InetHelper.getIP(hostList);
+					StringBuffer sbuf = new StringBuffer();
+					if(ipList != null) {
+						for(String ip : ipList) {
+							sbuf.append(ip);
+							sbuf.append(" ");
+						}
+					}
+					hostIP = sbuf.toString();
+					pid = "-";
+				}
+				//
+				hostName = tableize(hostName);
+				hostIP = tableize(hostIP);
+				//
 				pubSizeLast = "-";
 				pubSizeMax = "-";
 				heartbeatLast = "";

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1830625&r1=1830624&r2=1830625&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Mon Apr 30 19:21:21 2018
@@ -48,8 +48,10 @@ import org.apache.uima.ducc.common.inter
 import org.apache.uima.ducc.common.utils.ComponentHelper;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.DuccProperties;
+import org.apache.uima.ducc.common.utils.DuccPropertiesHelper;
 import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
 import org.apache.uima.ducc.common.utils.DuccSchedulerClasses;
+import org.apache.uima.ducc.common.utils.InetHelper;
 import org.apache.uima.ducc.common.utils.TimeStamp;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.orchestrator.jd.scheduler.JdReservation;
@@ -2306,10 +2308,31 @@ public class DuccHandlerJsonFormat exten
 				else {
 					status = DuccHandlerUtils.down();
 				}
-				bootTime = getTimeStamp(DuccCookies.getDateStyle(request),databaseHelper.getStartTime());
-				hostName = useWS(wsHostName, databaseHelper.getHost());
-				hostIP = useWS(wsHostName, hostName, wsHostIP);
-				pid = ""+databaseHelper.getPID();
+				if(DuccPropertiesHelper.isDatabaseAutomanaged()) {
+					bootTime = getTimeStamp(DuccCookies.getDateStyle(request),databaseHelper.getStartTime());
+					hostName = useWS(wsHostName, databaseHelper.getHostListString());
+					hostIP = useWS(wsHostName, hostName, wsHostIP);
+					pid = ""+databaseHelper.getPID();
+				}
+				else {
+					bootTime = "-";
+					hostName = useWS(wsHostName, databaseHelper.getHostListString());
+					String[] hostList = hostName.split("\\s+");
+					String[] ipList = InetHelper.getIP(hostList);
+					StringBuffer sbuf = new StringBuffer();
+					if(ipList != null) {
+						for(String ip : ipList) {
+							sbuf.append(ip);
+							sbuf.append(" ");
+						}
+					}
+					hostIP = sbuf.toString();
+					pid = "-";
+				}
+				//
+				hostName = tableize(hostName);
+				hostIP = tableize(hostIP);
+				//
 				pubSizeLast = "-";
 				pubSizeMax = "-";
 				heartbeatLast = "";