You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/11/10 15:24:04 UTC
[22/50] [abbrv] incubator-usergrid git commit: [APIBAAS-1362]External
cassandra setup
[APIBAAS-1362]External cassandra setup
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/3275a709
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/3275a709
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/3275a709
Branch: refs/heads/two-dot-o
Commit: 3275a709d70e1dc7eebfed900262d87f7fe0ccd0
Parents: 46d6c05
Author: ryan bridges <rb...@apigee.com>
Authored: Thu Nov 6 12:39:39 2014 -0500
Committer: ryan bridges <rb...@apigee.com>
Committed: Thu Nov 6 13:43:22 2014 -0500
----------------------------------------------------------------------
.../usergrid/cassandra/CassandraResource.java | 136 +++++++++++++++----
1 file changed, 109 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3275a709/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/CassandraResource.java
----------------------------------------------------------------------
diff --git a/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/CassandraResource.java b/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/CassandraResource.java
index 96d0d74..0b4c083 100644
--- a/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/CassandraResource.java
+++ b/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/CassandraResource.java
@@ -33,15 +33,15 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.core.env.PropertySource;
import org.yaml.snakeyaml.Yaml;
-
import org.apache.cassandra.service.CassandraDaemon;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.RandomUtils;
-
/**
* A JUnit {@link org.junit.rules.ExternalResource} designed to start up Cassandra once in a TestSuite or test Class as
* a shared external resource across test cases and shut it down after the TestSuite has completed.
@@ -65,6 +65,7 @@ public class CassandraResource extends ExternalResource {
public static final int DEFAULT_STORAGE_PORT = 7000;
public static final int DEFAULT_SSL_STORAGE_PORT = 7001;
public static final int DEFAULT_NATIVE_TRANSPORT_PORT = 9042;
+ public static final String DEFAULT_HOST = "127.0.0.1";
public static final String PROPERTIES_FILE = "project.properties";
public static final String TARGET_DIRECTORY_KEY = "target.directory";
@@ -101,9 +102,9 @@ public class CassandraResource extends ExternalResource {
private static Properties properties = null;
private boolean forkCassandra = false;
+ private boolean externalCassandra = false;
-
- /**
+ /**
* Creates a Cassandra starting ExternalResource for JUnit test cases which uses the
* default SchemaManager for Cassandra.
*/
@@ -144,12 +145,15 @@ public class CassandraResource extends ExternalResource {
new ClassPathXmlApplicationContext( locations );
Properties properties = (Properties)appContext.getBean("properties");
+ properties.putAll(ArrayUtils.toMap(this.getProjectProperties().entrySet().toArray(new Object[]{})));
String forkString = properties.getProperty("cassandra.startup");
forkCassandra = "forked".equals( forkString );
+ externalCassandra = "external".equals( forkString );
} catch (Exception ex) {
throw new RuntimeException("Error getting properties", ex);
}
+// throw new RuntimeException("My debugging skills are terrible!");
}
@@ -288,15 +292,26 @@ public class CassandraResource extends ExternalResource {
if ( isReady() ) {
return;
}
-
+
if ( forkCassandra ) {
startCassandraForked();
- } else {
+ } else if (externalCassandra) {
+ startCassandraExternal();
+ }else {
+
startCassandraEmbedded();
}
}
}
+ private void addShutdownHook(){
+ Runtime.getRuntime().addShutdownHook( new Thread() {
+ @Override
+ public void run() {
+ after();
+ }
+ } );
+ }
private void startCassandraEmbedded() throws Throwable {
LOG.info( "-------------------------------------------------------------------");
@@ -366,13 +381,13 @@ public class CassandraResource extends ExternalResource {
cassandraDaemon = new CassandraDaemon();
cassandraDaemon.activate();
- Runtime.getRuntime().addShutdownHook( new Thread() {
- @Override
- public void run() {
- after();
- }
- } );
-
+// Runtime.getRuntime().addShutdownHook( new Thread() {
+// @Override
+// public void run() {
+// after();
+// }
+// } );
+ addShutdownHook();
String[] locations = { "usergrid-test-context.xml" };
applicationContext = new ClassPathXmlApplicationContext( locations );
@@ -501,13 +516,13 @@ public class CassandraResource extends ExternalResource {
}
}).start();
- Runtime.getRuntime().addShutdownHook( new Thread() {
- @Override
- public void run() {
- after();
- }
- } );
-
+// Runtime.getRuntime().addShutdownHook( new Thread() {
+// @Override
+// public void run() {
+// after();
+// }
+// } );
+ addShutdownHook();
// give C* time to start
Thread.sleep(5000);
@@ -519,13 +534,31 @@ public class CassandraResource extends ExternalResource {
LOG.info( "External Cassandra resource at {} is ready!", tempDir.toString() );
lock.notifyAll();
}
-
+ private void startCassandraExternal() throws Throwable {
+ LOG.info( "-------------------------------------------------------------------");
+ LOG.info( "Initializing External Cassandra");
+ LOG.info( "-------------------------------------------------------------------");
+ LOG.info("before() test, setting system properties for ports : "
+ + "[rpc, storage, sslStorage, native] = [{}, {}, {}, {}]",
+ new Object[] {rpcPort, storagePort, sslStoragePort, nativeTransportPort});
+ Thread.sleep(5000);
+ String[] locations = { "usergrid-test-context.xml" };
+ applicationContext = new ClassPathXmlApplicationContext( locations );
+// PropertySource ps=new PropertySource<String>();
+// applicationContext.getEnvironment().getPropertySources().addLast(ps);
+ applicationContext.refresh();
+ loadSchemaManager( schemaManagerName );
+ initialized = true;
+
+ LOG.info( "External Cassandra resource at {} is ready!", tempDir.toString() );
+ lock.notifyAll();
+
+ }
/** Stops Cassandra after a TestSuite or test Class executes. */
@Override
protected synchronized void after() {
super.after();
-
if ( process != null ) {
process.destroy();
}
@@ -534,11 +567,15 @@ public class CassandraResource extends ExternalResource {
@Override
public void run() {
try {
- Thread.currentThread().sleep( 100L );
+ Thread.currentThread();
+ Thread.sleep( 100L );
}
catch ( InterruptedException ignored ) {}
-
- LOG.info( "Shutting down Cassandra instance in {}", tempDir.toString() );
+ if(externalCassandra){
+ LOG.info( "Cleaning up external Cassandra instance");
+ }else{
+ LOG.info( "Shutting down Cassandra instance in {}", tempDir.toString() );
+ }
if ( schemaManager != null ) {
LOG.info( "Destroying schemaManager..." );
@@ -556,7 +593,7 @@ public class CassandraResource extends ExternalResource {
LOG.info( "ApplicationContext stopped..." );
try {
- if ( cassandraDaemon != null ) {
+ if ( !externalCassandra && cassandraDaemon != null ) {
LOG.info( "Deactivating CassandraDaemon..." );
cassandraDaemon.deactivate();
}
@@ -641,6 +678,51 @@ public class CassandraResource extends ExternalResource {
return instance;
}
}
+ public static CassandraResource newWithMavenAllocatedPorts() {
+ synchronized ( lock ) {
+ Properties props = new Properties();
+ try {
+ props.load(ClassLoader.getSystemResourceAsStream( "project.properties" ));
+
+ } catch (IOException e) {
+ LOG.error("Unable to load project properties: {}", e.getLocalizedMessage());
+ }
+ int rpcPort = Integer.parseInt(props.getProperty("cassandra.rpcPort", Integer.toString(CassandraResource.DEFAULT_RPC_PORT)));
+ int storagePort = Integer.parseInt(props.getProperty("cassandra.storagePort", Integer.toString(CassandraResource.DEFAULT_STORAGE_PORT))) ;
+ int sslStoragePort = Integer.parseInt(props.getProperty("cassandra.sslPort", Integer.toString(CassandraResource.DEFAULT_SSL_STORAGE_PORT)));
+ int nativeTransportPort = Integer.parseInt(props.getProperty("cassandra.nativeTransportPort", Integer.toString(CassandraResource.DEFAULT_NATIVE_TRANSPORT_PORT)));
+ String host = props.getProperty("cassandra.host", DEFAULT_HOST);
+// int rpcPort = CassandraResource.DEFAULT_RPC_PORT;
+// int storagePort = CassandraResource.DEFAULT_STORAGE_PORT ;
+// int sslStoragePort = CassandraResource.DEFAULT_SSL_STORAGE_PORT;
+// int nativeTransportPort = CassandraResource.DEFAULT_NATIVE_TRANSPORT_PORT;
+
+ System.setProperty( "cassandra.url", host+":" + Integer.toString( rpcPort ) );
+ System.setProperty( "cassandra.cluster", props.getProperty("cassandra.cluster","Test Cluster") );
+ System.setProperty( "cassandra-foreground", "true" );
+ System.setProperty( "log4j.defaultInitOverride", "true" );
+ System.setProperty( "log4j.configuration", "log4j.properties" );
+ System.setProperty( "cassandra.ring_delay_ms", "100" );
+
+ System.setProperty( "cassandra." + RPC_PORT_KEY, Integer.toString( rpcPort ) );
+ System.setProperty( "cassandra." + STORAGE_PORT_KEY, Integer.toString( storagePort ) );
+ System.setProperty( "cassandra." + SSL_STORAGE_PORT_KEY, Integer.toString( sslStoragePort ) );
+ System.setProperty( "cassandra." + NATIVE_TRANSPORT_PORT_KEY, Integer.toString( nativeTransportPort ) );
+
+ LOG.info("project.properties loaded properties for ports : "
+ + "[rpc, storage, sslStorage, native] = [{}, {}, {}, {}]",
+ new Object[] {rpcPort, storagePort, sslStoragePort, nativeTransportPort});
+
+
+ instance = new CassandraResource(
+ null, rpcPort, storagePort, sslStoragePort, nativeTransportPort );
+
+ LOG.info("Created a new instance of CassandraResource: {}", instance);
+ LOG.info("Cassandra using ports {} and {}", storagePort, sslStoragePort);
+
+ return instance;
+ }
+ }
/**
@@ -650,7 +732,7 @@ public class CassandraResource extends ExternalResource {
* @return a new CassandraResource with possibly non-default ports
*/
public static CassandraResource newWithAvailablePorts() {
- return newWithAvailablePorts( null );
+ return newWithMavenAllocatedPorts();
}