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 2016/06/14 17:15:17 UTC

[38/44] usergrid git commit: Separate create vs. get column family logic.

Separate create vs. get column family logic.


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

Branch: refs/heads/usergrid-1268-akka-211
Commit: cc7a8678481dccda00d867fc363abc0d404f0c37
Parents: fcb347c
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Jun 6 12:23:46 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Jun 6 12:23:46 2016 -0400

----------------------------------------------------------------------
 .../cassandra/AstyanaxLockManagerImpl.java      | 87 ++++++++++++--------
 1 file changed, 53 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/cc7a8678/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
index 90b9d57..e26aed4 100644
--- a/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/locking/cassandra/AstyanaxLockManagerImpl.java
@@ -62,13 +62,13 @@ public class AstyanaxLockManagerImpl implements LockManager {
 
         this.cassandraFig = cassandraFig;
         this.cassandraCluster = cassandraCluster;
+        this.keyspace = cassandraCluster.getLocksKeyspace();
     }
 
 
     @Override
     public void setup() {
         try {
-            keyspace = cassandraCluster.getLocksKeyspace();
             createLocksKeyspace();
             columnFamily = createLocksColumnFamily();
         } catch (ConnectionException e) {
@@ -78,7 +78,7 @@ public class AstyanaxLockManagerImpl implements LockManager {
 
 
     @Override
-    public Lock createLock(final UUID applicationId, final String... path ){
+    public Lock createLock(final UUID applicationId, final String... path ) {
 
         String lockPath = LockPathBuilder.buildPath( applicationId, path );
 
@@ -114,7 +114,7 @@ public class AstyanaxLockManagerImpl implements LockManager {
 
 
         ColumnPrefixDistributedRowLock<String> lock =
-            new ColumnPrefixDistributedRowLock<>(keyspace, columnFamily, lockPath)
+            new ColumnPrefixDistributedRowLock<>(keyspace, getLocksColumnFamily(), lockPath)
                 .expireLockAfter( lockExpiration, TimeUnit.MILLISECONDS)
                 .withConsistencyLevel(consistencyLevel);
 
@@ -124,56 +124,75 @@ public class AstyanaxLockManagerImpl implements LockManager {
     }
 
 
+    private ColumnFamily getLocksColumnFamily() {
 
-    private ColumnFamily createLocksColumnFamily() throws ConnectionException {
+        if ( columnFamily == null ) {
 
-        ColumnFamily<String, String> CF_LOCKS = ColumnFamily.newColumnFamily(
-            CF_NAME, StringSerializer.get(), StringSerializer.get() );
+            columnFamily = ColumnFamily.newColumnFamily(
+                CF_NAME, StringSerializer.get(), StringSerializer.get() );
 
-        final KeyspaceDefinition keyspaceDefinition = keyspace.describeKeyspace();
-        final ColumnFamilyDefinition existing =
-            keyspaceDefinition.getColumnFamily( CF_LOCKS.getName() );
+            if ( logger.isDebugEnabled() ) {
 
+                try {
+                    final KeyspaceDefinition kd = keyspace.describeKeyspace();
+                    final ColumnFamilyDefinition cfd = kd.getColumnFamily( columnFamily.getName() );
+                    Map<String, Object> options = new HashMap<>( 1 );
+                    options.put( "gc_grace_seconds", cfd.getGcGraceSeconds() );
+                    options.put( "caching", cfd.getCaching() );
+                    options.put( "compaction_strategy", cfd.getCompactionStrategy() );
+                    options.put( "compaction_strategy_options", cfd.getCompactionStrategyOptions() );
+                    logger.debug( "Locks column family {} exists with options: {}", cfd.getName(), options);
+
+                } catch ( ConnectionException ce ) {
+                    logger.warn("Error connecting to Cassandra for debug column family info", ce);
+                }
+            }
+        }
 
-        if ( existing != null ) {
+        return columnFamily;
+    }
 
-            Map<String, Object> existingOptions = new HashMap<>(1);
-            existingOptions.put("gc_grace_seconds", existing.getGcGraceSeconds());
-            existingOptions.put("caching", existing.getCaching());
-            existingOptions.put("compaction_strategy", existing.getCompactionStrategy());
-            existingOptions.put("compaction_strategy_options", existing.getCompactionStrategyOptions());
 
-            logger.info( "Locks column family {} exists with options: {}", existing.getName(),
-                existingOptions.toString() );
+    private ColumnFamily createLocksColumnFamily() throws ConnectionException {
 
-            return CF_LOCKS;
-        }
+        ColumnFamily<String, String> cflocks = ColumnFamily.newColumnFamily(
+            CF_NAME, StringSerializer.get(), StringSerializer.get() );
 
-        MultiTenantColumnFamilyDefinition columnFamilyDefinition = new MultiTenantColumnFamilyDefinition(
-            CF_LOCKS,
-            BytesType.class.getSimpleName(),
-            UTF8Type.class.getSimpleName(),
-            BytesType.class.getSimpleName(),
-            MultiTenantColumnFamilyDefinition.CacheOption.ALL
-        );
+        final KeyspaceDefinition kd = keyspace.describeKeyspace();
+        final ColumnFamilyDefinition cfdef = kd.getColumnFamily( cflocks.getName() );
 
-        Map<String, Object> cfOptions = columnFamilyDefinition.getOptions();
+        if ( cfdef == null ) {
 
-        // Additionally set the gc grace low
-        cfOptions.put("gc_grace_seconds", 60);
+            // create only if does not already exist
 
+            MultiTenantColumnFamilyDefinition mtcfd = new MultiTenantColumnFamilyDefinition(
+                cflocks,
+                BytesType.class.getSimpleName(),
+                UTF8Type.class.getSimpleName(),
+                BytesType.class.getSimpleName(),
+                MultiTenantColumnFamilyDefinition.CacheOption.ALL
+            );
 
-        keyspace.createColumnFamily( columnFamilyDefinition.getColumnFamily() , cfOptions );
+            Map<String, Object> cfOptions = mtcfd.getOptions();
 
-        logger.info( "Created column family {}", columnFamilyDefinition.getOptions() );
+            // Additionally set the gc grace low
+            cfOptions.put( "gc_grace_seconds", 60 );
 
-        return columnFamilyDefinition.getColumnFamily();
-    }
+            keyspace.createColumnFamily( mtcfd.getColumnFamily(), cfOptions );
 
+            logger.info( "Created column family {}", mtcfd.getOptions() );
 
-    private void createLocksKeyspace() throws ConnectionException {
+            cflocks = mtcfd.getColumnFamily();
+
+        } else {
+            return getLocksColumnFamily();
+        }
+
+        return cflocks;
+    }
 
 
+    private void createLocksKeyspace() throws ConnectionException {
 
         ImmutableMap.Builder<String, Object> strategyOptions = getKeySpaceProps();