You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/08/19 05:21:13 UTC

usergrid git commit: Make schema creation more robust so parallel test execution doesn't overload the datastax driver's control connection.

Repository: usergrid
Updated Branches:
  refs/heads/master fe197af23 -> 320cf00d0


Make schema creation more robust so parallel test execution doesn't overload the datastax driver's control connection.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/320cf00d
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/320cf00d
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/320cf00d

Branch: refs/heads/master
Commit: 320cf00d0acd51ed9efc1ecd3a99dd9e5b2b1ae4
Parents: fe197af
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Aug 18 22:20:39 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Aug 18 22:20:39 2016 -0700

----------------------------------------------------------------------
 .../collection/guice/TestCollectionModule.java  | 22 +--------------
 .../core/datastax/DataStaxCluster.java          |  2 +-
 .../core/datastax/impl/DataStaxClusterImpl.java | 29 ++++++++++----------
 .../migration/schema/MigrationManagerImpl.java  | 25 ++++++++++++-----
 4 files changed, 34 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/320cf00d/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/guice/TestCollectionModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/guice/TestCollectionModule.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/guice/TestCollectionModule.java
index dd618a9..5bef2e0 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/guice/TestCollectionModule.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/guice/TestCollectionModule.java
@@ -20,8 +20,6 @@
 package org.apache.usergrid.persistence.collection.guice;
 
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import org.apache.usergrid.persistence.collection.serialization.impl.migration.EntityIdScope;
 import org.apache.usergrid.persistence.core.guice.CommonModule;
 import org.apache.usergrid.persistence.core.guice.TestModule;
@@ -30,8 +28,6 @@ import org.apache.usergrid.persistence.core.migration.data.TestMigrationDataProv
 
 import com.google.inject.TypeLiteral;
 
-import java.util.HashMap;
-import java.util.Map;
 
 
 public class TestCollectionModule extends TestModule {
@@ -43,29 +39,13 @@ public class TestCollectionModule extends TestModule {
         install( new CollectionModule() {
             @Override
             public void configureMigrationProvider() {
-                //configure our migration data provider
 
+                //configure our migration data provider
                 TestMigrationDataProvider<EntityIdScope> migrationDataProvider = new TestMigrationDataProvider<>();
                 bind(new TypeLiteral< MigrationDataProvider<EntityIdScope>>(){}).toInstance( migrationDataProvider );
             }
         } );
 
-        /**
-         * Test modules
-         */
-//        install(new MaxMigrationModule());
-
-    }
-
-
-    private static Map<String, Injector> injectorsByName = new HashMap<>();
-
-    public static Injector getInjector( String name ) {
-        Injector i = injectorsByName.get( name );
-        if ( i == null ) {
-            i = Guice.createInjector( new TestCollectionModule() );
-        }
-        return i;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/320cf00d/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
index 768a7a2..ea76f92 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/DataStaxCluster.java
@@ -30,7 +30,7 @@ public interface DataStaxCluster {
 
     Session getApplicationSession();
 
-    void createOrUpdateKeyspace() throws Exception;
+    void createApplicationKeyspace() throws Exception;
 
     void waitForSchemaAgreement();
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/320cf00d/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
index ceb5f33..3146b65 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/datastax/impl/DataStaxClusterImpl.java
@@ -47,7 +47,7 @@ public class DataStaxClusterImpl implements DataStaxCluster {
         this.cluster = buildCluster();
 
         // always initialize the keyspaces
-        this.createOrUpdateKeyspace();
+        this.createApplicationKeyspace();
 
         logger.info("Initialized datastax cluster client. Hosts={}, Idle Timeout={}s,  Pool Timeout={}s",
             cluster.getMetadata().getAllHosts().toString(),
@@ -95,27 +95,26 @@ public class DataStaxClusterImpl implements DataStaxCluster {
      * @throws Exception
      */
     @Override
-    public void createOrUpdateKeyspace() throws Exception {
+    public void createApplicationKeyspace() throws Exception {
 
-        clusterSession = getClusterSession();
+        boolean exists = getClusterSession().getCluster().getMetadata()
+            .getKeyspace(CQLUtils.quote(cassandraFig.getApplicationKeyspace())) != null;
+
+        if(exists){
+            return;
+        }
 
         final String createApplicationKeyspace = String.format(
             "CREATE KEYSPACE IF NOT EXISTS %s WITH replication = %s",
             CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
-            CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
-
-        );
+            CQLUtils.getFormattedReplication(cassandraFig.getStrategy(), cassandraFig.getStrategyOptions())
 
-        final String updateApplicationKeyspace = String.format(
-            "ALTER KEYSPACE %s WITH replication = %s",
-            CQLUtils.quote(cassandraFig.getApplicationKeyspace()),
-            CQLUtils.getFormattedReplication( cassandraFig.getStrategy(), cassandraFig.getStrategyOptions() )
         );
 
-        clusterSession.execute(createApplicationKeyspace);
-        clusterSession.execute(updateApplicationKeyspace);
+        getClusterSession().execute(createApplicationKeyspace);
+        waitForSchemaAgreement();
 
-        logger.info("Created/Updated keyspace: {}", cassandraFig.getApplicationKeyspace());
+        logger.info("Created keyspace: {}", cassandraFig.getApplicationKeyspace());
 
     }
 
@@ -126,8 +125,7 @@ public class DataStaxClusterImpl implements DataStaxCluster {
     public void waitForSchemaAgreement() {
 
         while ( true ) {
-
-            if( getCluster().getMetadata().checkSchemaAgreement() ){
+            if( getClusterSession().getCluster().getMetadata().checkSchemaAgreement() ){
                 return;
             }
 
@@ -177,6 +175,7 @@ public class DataStaxClusterImpl implements DataStaxCluster {
         Cluster.Builder datastaxCluster = Cluster.builder()
             .withClusterName(cassandraFig.getClusterName())
             .addContactPoints(cassandraFig.getHosts().split(","))
+            .withMaxSchemaAgreementWaitSeconds(30)
             .withCompression(ProtocolOptions.Compression.LZ4)
             .withLoadBalancingPolicy(loadBalancingPolicy)
             .withPoolingOptions(poolingOptions)

http://git-wip-us.apache.org/repos/asf/usergrid/blob/320cf00d/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
index e95c2ae..d6f66c5 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/schema/MigrationManagerImpl.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.persistence.core.migration.schema;
 import java.util.Collection;
 import java.util.Set;
 
+import com.datastax.driver.core.KeyspaceMetadata;
 import org.apache.usergrid.persistence.core.CassandraFig;
 import org.apache.usergrid.persistence.core.datastax.CQLUtils;
 import org.apache.usergrid.persistence.core.datastax.DataStaxCluster;
@@ -72,7 +73,7 @@ public class MigrationManagerImpl implements MigrationManager {
 
         try {
 
-            dataStaxCluster.createOrUpdateKeyspace();
+            dataStaxCluster.createApplicationKeyspace();
 
             for ( Migration migration : migrations ) {
 
@@ -93,6 +94,9 @@ public class MigrationManagerImpl implements MigrationManager {
                     for (MultiTenantColumnFamilyDefinition cf : columnFamilies) {
                         testAndCreateColumnFamilyDef(cf);
                     }
+                    // creation of tables happens with the datastax driver and it auto checks schema on schema queries
+                    // the CF def creation uses Asytanax, so manually check the schema agreement
+                    dataStaxCluster.waitForSchemaAgreement();
                 }
 
 
@@ -107,8 +111,6 @@ public class MigrationManagerImpl implements MigrationManager {
 
             }
 
-            dataStaxCluster.waitForSchemaAgreement();
-
         }
         catch ( Throwable t ) {
             logger.error( "Unable to perform migration", t );
@@ -139,12 +141,21 @@ public class MigrationManagerImpl implements MigrationManager {
 
     private void createTable(TableDefinition tableDefinition ) throws Exception {
 
-        String CQL = CQLUtils.getTableCQL( cassandraFig, tableDefinition, CQLUtils.ACTION.CREATE );
-        if (logger.isDebugEnabled()){
-            logger.debug( CQL );
+        KeyspaceMetadata keyspaceMetadata = dataStaxCluster.getClusterSession().getCluster().getMetadata()
+            .getKeyspace(CQLUtils.quote(cassandraFig.getApplicationKeyspace()));
+
+        boolean exists =  keyspaceMetadata != null && keyspaceMetadata.getTable(tableDefinition.getTableName()) != null;
+
+        if( exists ){
+            return;
+        }
+
+        String CQL = CQLUtils.getTableCQL(cassandraFig, tableDefinition, CQLUtils.ACTION.CREATE);
+        if (logger.isDebugEnabled()) {
+            logger.debug(CQL);
         }
         dataStaxCluster.getApplicationSession()
-            .execute( CQL );
+            .execute(CQL);
 
         logger.info("Created table: {}", tableDefinition.getTableName());