From c2d4786ba3eb76f9056e331d3111bac39e959fd4 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Mon, 15 Apr 2019 18:11:07 +0000 Subject: [PATCH] SW-685: Propagate database port/user/password from jOTDBserver command line to OTDB wrapper. Draw credentials from dbcredentials in OTB server startup script. --- LCS/PyCommon/dbcredentials.py | 15 +++++++++++++-- SAS/OTB/OTB/dist-src/OTB | 11 +++++------ .../lofar/sas/otb/jotdb3/jOTDBaccess.java | 11 ++++++++--- .../lofar/sas/otb/jotdb3/jOTDBconnection.java | 8 ++++---- .../lofar/sas/otb/jotdb3/jOTDBserver.java | 19 +++++++++++++++++-- ...on_lofar_sas_otb_jotdb3_jOTDBconnection.cc | 6 ++++-- SubSystems/CCU_MAC/CMakeLists.txt | 3 ++- 7 files changed, 53 insertions(+), 20 deletions(-) diff --git a/LCS/PyCommon/dbcredentials.py b/LCS/PyCommon/dbcredentials.py index 3aa88c3112f..55e79a73cbc 100644 --- a/LCS/PyCommon/dbcredentials.py +++ b/LCS/PyCommon/dbcredentials.py @@ -285,7 +285,9 @@ if __name__ == "__main__": parser = OptionParser("%prog [options]") parser.add_option("-D", "--database", dest="database", type="string", default="", - help="Name of the database") + help="Print credentials of a specific database") + parser.add_option("-S", "--shell", dest="shell", action="store_true", default=False, + help="Use machine-readable output for use in shell scripts") parser.add_option("-L", "--list", dest="list", action="store_true", default=False, help="List known databases") parser.add_option("-F", "--files", dest="files", action="store_true", default=False, @@ -313,5 +315,14 @@ if __name__ == "__main__": sys.exit(0) """ Print credentials of a specific database. """ - print(str(dbc.get(options.database))) + creds = dbc.get(options.database) + + if options.shell: + print("DBUSER=%s" % (creds.user,)) + print("DBPASSWORD=%s" % (creds.password,)) + print("DBDATABASE=%s" % (creds.database,)) + print("DBHOST=%s" % (creds.host,)) + print("DBPORT=%s" % (creds.port,)) + else: + print(str(creds)) diff --git a/SAS/OTB/OTB/dist-src/OTB b/SAS/OTB/OTB/dist-src/OTB index 0db62fb307c..19e84c2ed5f 100755 --- a/SAS/OTB/OTB/dist-src/OTB +++ b/SAS/OTB/OTB/dist-src/OTB @@ -161,12 +161,11 @@ echo "Logging serverlogs to file $logfile" serverpid=0 ps -ef | grep -v grep | grep java | grep server | grep $port1 2>&1 1>/dev/null if [ $? -ne 0 ]; then - if [ "$LOFARENV" == "TEST" ]; then - dbhost=sasdbtest - else - dbhost=sasdb - fi - $JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.jotdb3.jOTDBserver -s `hostname` -d $dbhost -p $port1 -o $port2 2>&1 1>&$logfile & + # use dbcredentials.py to extract OTDB credentials in shell form + source /opt/lofar/lofarinit.sh + declare `python3 -m lofar.common.dbcredentials -D OTDB -S` + + $JAVA_HOME/bin/java -cp $CLASSPATH nl.astron.lofar.sas.otb.jotdb3.jOTDBserver -s `hostname` -d $DBHOST -P $DBPORT -p $port1 -o $port2 -U $DBUSER -W "$DBPASSWORD" 2>&1 1>&$logfile & serverpid=$! echo Started server with PID: $serverpid else diff --git a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBaccess.java b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBaccess.java index 60f661d3a1b..2b04cf3123a 100644 --- a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBaccess.java +++ b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBaccess.java @@ -40,9 +40,11 @@ public class jOTDBaccess implements jOTDBaccessInterface private Logger logger = Logger.getLogger(jOTDBaccess.class); private static int seqNr = 0; private String itsDBname=""; - private String itsDBpwd=""; + private String itsDBuser=""; + private String itsDBpassword=""; private String itsDB=""; private String itsDBhost=""; + private String itsDBport=0; private String itsRMIhost=""; private int itsRMIobjectPort=0; private int itsRMIport = 0; @@ -59,9 +61,12 @@ public class jOTDBaccess implements jOTDBaccessInterface - public jOTDBaccess( String aDBhost, String anRMIhost,int anRMIport, int anRMIobjectPort,Registry aLocalRegistry) throws RemoteException + public jOTDBaccess( String aDBhost, String aDBport, String aDBuser, String aDBpassword, String anRMIhost,int anRMIport, int anRMIobjectPort,Registry aLocalRegistry) throws RemoteException { itsDBhost=aDBhost; + itsDBport=aDBport; + itsDBuser=aDBuser; + itsDBpassword=aDBpassword; itsRMIhost=anRMIhost; itsRMIport=anRMIport; itsRMIobjectPort=anRMIobjectPort; @@ -185,7 +190,7 @@ public class jOTDBaccess implements jOTDBaccessInterface try { // Export jOTDBconnection - jOTDBconnection aC = new jOTDBconnection("paulus", "boskabouter", dbName,itsDBhost,ext); + jOTDBconnection aC = new jOTDBconnection(itsDBuser, itsDBpassword, dbName, itsDBhost, itsDBport, ext); connection.put(serviceName,aC); //A custom port was specified, export the object using the port specified diff --git a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBconnection.java b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBconnection.java index b7bcc71d5c3..a029df31b1f 100644 --- a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBconnection.java +++ b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBconnection.java @@ -38,11 +38,11 @@ public class jOTDBconnection implements jOTDBinterface } // Just creates an object and registers the connection parameters. - public jOTDBconnection (String username, String passwd, String database, String hostname, String ext) + public jOTDBconnection (String username, String passwd, String database, String hostname, String port, String ext) { try { itsName=ext; - initOTDBconnection (username, passwd, database, hostname); + initOTDBconnection (username, passwd, database, hostname, port); } catch (Exception ex) { System.out.println("Error during connection init :" + ex); } @@ -52,7 +52,7 @@ public class jOTDBconnection implements jOTDBinterface { try { itsName="_test_1"; - initOTDBconnection("paulus", "boskabouter", "otdbtest" , "dop50.astron.nl"); + initOTDBconnection("paulus", "boskabouter", "otdbtest" , "dop50.astron.nl", 5432); } catch (Exception ex) { System.out.println("Error during connection init :" + ex); } @@ -61,7 +61,7 @@ public class jOTDBconnection implements jOTDBinterface // Create a OTDBconnection instance - private native void initOTDBconnection (String username, String passwd, String database, String hostname) throws Exception; + private native void initOTDBconnection (String username, String passwd, String database, String hostname, int port) throws Exception; // To test if we are (still) connected. @Override diff --git a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java index c2aec3fdf85..16d53906f9b 100644 --- a/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java +++ b/SAS/OTB/jOTDB3/src/nl/astron/lofar/sas/otb/jotdb3/jOTDBserver.java @@ -118,6 +118,9 @@ public class jOTDBserver { String dbHostName = ""; + String dbPort = 5432; + String dbUser = "postgres"; + String dbPassword = ""; String serverHostName = ""; int rmiPort = 0; int rmiObjectPort = 0; @@ -128,6 +131,9 @@ public class jOTDBserver { GetOptDesc options[] = { new GetOptDesc('s', "serverHostName", true), new GetOptDesc('d', "dbHostName", true), + new GetOptDesc('P', "dbPort", true), + new GetOptDesc('U', "dbUser", true), + new GetOptDesc('W', "dbPassword", true), new GetOptDesc('p', "rmiPort", true), new GetOptDesc('o', "rmiObjectPort", true), new GetOptDesc('h', "help", false) @@ -146,6 +152,15 @@ public class jOTDBserver { case 'd': dbHostName = (String)optionsFound.get(key); break; + case 'P': + dbPort = (String)optionsFound.get(key); + break; + case 'U': + dbUser = (String)optionsFound.get(key); + break; + case 'W': + dbPassword = (String)optionsFound.get(key); + break; case 'p': rmiPort = Integer.parseInt((String)optionsFound.get(key)); break; @@ -161,7 +176,7 @@ public class jOTDBserver { } } if (errs) { - System.out.println("Usage: java -jar jOTDBnewServer.jar -p rmiPort -o rmiObjectPort [-s server] [-d database server] [-h]"); + System.out.println("Usage: java -jar jOTDBnewServer.jar -p rmiPort -o rmiObjectPort [-s server] [-d database server] [-P database port] [-U database user] [-W database password] [-h]"); System.out.println(""); System.out.println(" The rmi port is needed for rmi traffic and must be unique fior each server"); System.out.println(" The rmiObjectPort is needed for firewall/tunneling java objects and must be unique for each server"); @@ -203,7 +218,7 @@ public class jOTDBserver { } logger.info("jOTDBserver setting up RMI server objects on port "+rmiObjectPort+" ..."); - access = new jOTDBaccess(dbHostName, serverHostName, rmiPort, rmiObjectPort, registry); + access = new jOTDBaccess(dbHostName, dbPort, dbUser, dbPassword, serverHostName, rmiPort, rmiObjectPort, registry); jOTDBaccessInterface stub = (jOTDBaccessInterface) UnicastRemoteObject.exportObject(access, rmiObjectPort); diff --git a/SAS/OTB/jOTDB3/src/nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection.cc b/SAS/OTB/jOTDB3/src/nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection.cc index 54f6c30acf5..bd3ca98d780 100644 --- a/SAS/OTB/jOTDB3/src/nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection.cc +++ b/SAS/OTB/jOTDB3/src/nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection.cc @@ -51,20 +51,22 @@ using namespace std; * Method: initOTDBconnection * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;); */ -JNIEXPORT void JNICALL Java_nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection_initOTDBconnection(JNIEnv *env, jobject jOTDBconnection, jstring username, jstring passwd, jstring database, jstring hostname) { +JNIEXPORT void JNICALL Java_nl_astron_lofar_sas_otb_jotdb3_jOTDBconnection_initOTDBconnection(JNIEnv *env, jobject jOTDBconnection, jstring username, jstring passwd, jstring database, jstring hostname, jstring port) { const char* user = env->GetStringUTFChars(username, 0); const char* pass = env->GetStringUTFChars(passwd, 0); const char* db = env->GetStringUTFChars(database, 0); const char* hn = env->GetStringUTFChars(hostname, 0); + const char* pt = env->GetStringUTFChars(port, 0); const string u (user); const string p (pass); const string d (db); const string h (hn); + const string prt (pt); const char* n(0); jstring str(0); try { - OTDBconnection* aPtr = new OTDBconnection(u, p, d, h); + OTDBconnection* aPtr = new OTDBconnection(u, p, d, h, prt); if ( !aPtr) { env->ThrowNew(env->FindClass("java/lang/Exception"),"Error creating OTDBconnection"); return; diff --git a/SubSystems/CCU_MAC/CMakeLists.txt b/SubSystems/CCU_MAC/CMakeLists.txt index e8ddd38992d..c5b0a47f02b 100644 --- a/SubSystems/CCU_MAC/CMakeLists.txt +++ b/SubSystems/CCU_MAC/CMakeLists.txt @@ -1,5 +1,6 @@ # $Id$ +# PyCommon is needed for OTB, which uses dbcredentials. OTB is installed in parallel to this subsystem. lofar_package(CCU_MAC - DEPENDS CEPCU CUDaemons CURTDBDaemons StaticMetaData MessageDaemons) + DEPENDS CEPCU CUDaemons CURTDBDaemons StaticMetaData MessageDaemons PyCommon) -- GitLab