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 <[email protected]> Authored: Mon Jun 6 12:23:46 2016 -0400 Committer: Dave Johnson <[email protected]> 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();
