Author: challngr Date: Tue Dec 1 21:44:49 2015 New Revision: 1717540 URL: http://svn.apache.org/viewvc?rev=1717540&view=rev Log: UIMA-4577 Retry DbCreate with supplied id/pw if default fail, to allow rerun of DbCreate.
Modified: uima/sandbox/uima-ducc/trunk/src/main/resources/cassandra.yaml uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java Modified: uima/sandbox/uima-ducc/trunk/src/main/resources/cassandra.yaml URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/src/main/resources/cassandra.yaml?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/src/main/resources/cassandra.yaml (original) +++ uima/sandbox/uima-ducc/trunk/src/main/resources/cassandra.yaml Tue Dec 1 21:44:49 2015 @@ -75,7 +75,7 @@ authenticator: PasswordAuthenticator # - AllowAllAuthorizer allows any action to any user - set it to disable authorization. # - CassandraAuthorizer stores permissions in system_auth.permissions table. Please # increase system_auth keyspace replication factor if you use this authorizer. -authorizer: AllowAllAuthorizer +authorizer: CassandraAuthorizer # Validity period for permissions cache (fetching permissions can be an # expensive operation depending on the authorizer, CassandraAuthorizer is Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbCreate.java Tue Dec 1 21:44:49 2015 @@ -39,12 +39,13 @@ public class DbCreate static final String DUCC_KEYSPACE = "ducc"; static final String PASSWORD_KEY = "db_password"; static final String PASSWORD_FILE = "ducc.private.properties"; - static final int RETRY = 10; + int RETRY = 10; DuccLogger logger = null; String dburl; String adminid = null; String adminpw = null; + boolean useNewPw = false; private Cluster cluster; private Session session = null; @@ -84,14 +85,16 @@ public class DbCreate // If we're here, we must first of all get rid of the cassandra su and set up our own - AuthProvider auth = new PlainTextAuthProvider("cassandra", "cassandra"); + for ( int i = 0; i < RETRY; i++ ) { try { + // First time, we nuke the default id / pw and install our own. + AuthProvider auth = new PlainTextAuthProvider("cassandra", "cassandra"); cluster = Cluster.builder() .withAuthProvider(auth) .addContactPoint(dburl) .build(); - + session = cluster.connect(); session.execute("CREATE USER IF NOT EXISTS " + adminid + " with password '" + adminpw + "' SUPERUSER"); cluster.close(); @@ -108,14 +111,28 @@ public class DbCreate session.execute("ALTER USER cassandra with password '" + uglypw + "' NOSUPERUSER"); doLog(methodName, "Changed default super user's password and revoked its superuser authority."); doLog(methodName, "From this point, this DB can only be accessed in super user mode by user 'ducc'"); - break; } catch ( NoHostAvailableException e ) { doLog("Waiting for database to boot ..."); session = null; cluster = null; } catch ( AuthenticationException e ) { - doLog("Waiting for default authentication ..."); + // The default userid/pw failed, so we try again with the user-supplied one + RETRY += i; // we'll extend the retry for a bit in case db took a while to start + doLog(methodName, "Initial DB connection failed with AuthorizationException. Retrying database connection with your supplied userid and password."); + try { + AuthProvider auth = new PlainTextAuthProvider(adminid, adminpw); + cluster = Cluster.builder() + .withAuthProvider(auth) + .addContactPoint(dburl) + .build(); + session = cluster.connect(); + // if this works we assume the DB user base is ok and continue + break; // no crash, we're outta here + } catch ( Exception ee ) { + doLog(methodName, "Authorization fails with both the default userid/password and the new userid/password."); + doLog(methodName, "Retrhying, as first-time database may take a few moments to initialize."); + } session = null; cluster = null; } catch ( Exception e ) { @@ -138,7 +155,6 @@ public class DbCreate for ( Host host : metadata.getAllHosts() ) { doLog(methodName, "Datatacenter:", host.getDatacenter(), "Host:", host.getAddress(), "Rack:", host.getRack()); } - session = cluster.connect(); return true; } @@ -184,6 +200,13 @@ public class DbCreate // A 'keyspace' is what we usually think of as a database. session.execute("CREATE KEYSPACE IF NOT EXISTS ducc WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};"); + session.execute("CREATE USER IF NOT EXISTS guest WITH PASSWORD 'guest' NOSUPERUSER"); + session.execute("GRANT SELECT ON KEYSPACE ducc TO guest"); + session.execute("REVOKE SELECT ON KEYSPACE system FROM guest"); + session.execute("REVOKE SELECT ON KEYSPACE system_auth FROM guest"); + session.execute("REVOKE SELECT ON KEYSPACE system_traces FROM guest"); + doLog(methodName, "Created user 'guest' with SELECT priveleges on DUCC tables."); + session.execute("USE " + DUCC_KEYSPACE); try { Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java Tue Dec 1 21:44:49 2015 @@ -76,7 +76,7 @@ class DbUtil List<String> ret = new ArrayList<String>(); for ( IDbProperty p : props ) { if ( p.isIndex() ) { - StringBuffer buf = new StringBuffer("CREATE INDEX "); + StringBuffer buf = new StringBuffer("CREATE INDEX IF NOT EXISTS "); buf.append(tablename); buf.append("_"); buf.append(p.pname()); Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/HistoryManagerDb.java Tue Dec 1 21:44:49 2015 @@ -24,6 +24,7 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -61,10 +62,10 @@ public class HistoryManagerDb PreparedStatement reservationPrepare = null; PreparedStatement servicePrepare = null; PreparedStatement ckptPrepare = null; - static final String JOB_TABLE = "ducc." + OrWorkProps.JOB_TABLE.pname(); - static final String RES_TABLE = "ducc." + OrWorkProps.RESERVATION_TABLE.pname(); - static final String SVC_TABLE = "ducc." + OrWorkProps.SERVICE_TABLE.pname(); - static final String CKPT_TABLE = "ducc." + OrCkptProps.CKPT_TABLE.pname(); + static final String JOB_TABLE = OrWorkProps.JOB_TABLE.pname(); + static final String RES_TABLE = OrWorkProps.RESERVATION_TABLE.pname(); + static final String SVC_TABLE = OrWorkProps.SERVICE_TABLE.pname(); + static final String CKPT_TABLE = OrCkptProps.CKPT_TABLE.pname(); public HistoryManagerDb() { @@ -138,8 +139,13 @@ public class HistoryManagerDb buf.append("WITH CLUSTERING ORDER BY (ducc_dbid desc)"); ret.add(new SimpleStatement(buf.toString())); - ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + tablename + "(ducc_dbid)")); - ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + tablename + "(history)")); + List<String> indexes = DbUtil.mkIndices(OrWorkProps.values(), tablename); + for ( String s : indexes ) { + ret.add(new SimpleStatement(s)); + } + + // ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + tablename + "(ducc_dbid)")); + // ret.add(new SimpleStatement("CREATE INDEX IF NOT EXISTS ON " + tablename + "(history)")); return ret; } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/RmStatePersistence.java Tue Dec 1 21:44:49 2015 @@ -164,7 +164,7 @@ public class RmStatePersistence buf.append(DbUtil.mkSchema(RmLoad.values())); buf.append(")"); ret.add(new SimpleStatement(buf.toString())); - indexes = DbUtil.mkIndices(RmShares.values(), RM_SHARE_TABLE); + indexes = DbUtil.mkIndices(RmShares.values(), RM_LOAD_TABLE); for ( String s : indexes ) { ret.add(new SimpleStatement(s)); } Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java?rev=1717540&r1=1717539&r2=1717540&view=diff ============================================================================== --- uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java (original) +++ uima/sandbox/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/common/history/IHistoryPersistenceManager.java Tue Dec 1 21:44:49 2015 @@ -91,11 +91,13 @@ public interface IHistoryPersistenceMana public String pname() { return "ducc_dbid"; } public Type type() { return Type.Long; } public boolean isPrimaryKey() { return true; } + public boolean isIndex() { return true; } }, history { - public String pname() { return "history"; } // to the future, is this a history or ckpt item? - public Type type() { return Type.Boolean; } + public String pname() { return "history"; } // to the future, is this a history or ckpt item? + public Type type() { return Type.Boolean; } + public boolean isIndex() { return true; } }, work {