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/06/03 14:46:09 UTC
[19/26] usergrid git commit: Move LockManager setup into normal setup
regime, don't cache EntityManagers with null application names,
and add logging to help debug issue USERGRID-1283.
Move LockManager setup into normal setup regime, don't cache EntityManagers with null application names, and add logging to help debug issue USERGRID-1283.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/59c538aa
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/59c538aa
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/59c538aa
Branch: refs/heads/release-2.1.1
Commit: 59c538aa8a6becf90573c815e68347036f1aca44
Parents: 61a35a0
Author: Dave Johnson <sn...@apache.org>
Authored: Tue May 31 09:34:48 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Tue May 31 09:34:48 2016 -0400
----------------------------------------------------------------------
.../corepersistence/CpEntityManagerFactory.java | 13 +++++-
.../apache/usergrid/locking/LockManager.java | 5 +++
.../cassandra/AstyanaxLockManagerImpl.java | 42 ++++++--------------
.../locking/noop/NoOpLockManagerImpl.java | 5 +++
.../usergrid/services/ServiceManager.java | 8 ++++
.../services/ServiceManagerFactory.java | 12 ++++++
6 files changed, 54 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index ee28765..622944b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -33,6 +33,7 @@ import org.apache.usergrid.corepersistence.service.CollectionService;
import org.apache.usergrid.corepersistence.service.ConnectionService;
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
import org.apache.usergrid.exception.ConflictException;
+import org.apache.usergrid.locking.LockManager;
import org.apache.usergrid.persistence.*;
import org.apache.usergrid.persistence.cassandra.CassandraService;
import org.apache.usergrid.persistence.cassandra.CounterUtils;
@@ -107,6 +108,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
private final ConnectionService connectionService;
private final GraphManagerFactory graphManagerFactory;
private final IndexSchemaCacheFactory indexSchemaCacheFactory;
+ private final LockManager lockManager;
public static final String MANAGEMENT_APP_INIT_MAXRETRIES= "management.app.init.max-retries";
public static final String MANAGEMENT_APP_INIT_INTERVAL = "management.app.init.interval";
@@ -127,6 +129,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
this.collectionService = injector.getInstance( CollectionService.class );
this.connectionService = injector.getInstance( ConnectionService.class );
this.indexSchemaCacheFactory = injector.getInstance( IndexSchemaCacheFactory.class );
+ this.lockManager = injector.getInstance( LockManager.class );
Properties properties = cassandraService.getProperties();
@@ -166,7 +169,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
}
// the management app is a special case
-
if ( CpNamingUtils.MANAGEMENT_APPLICATION_ID.equals( appId ) ) {
if ( app != null ) {
@@ -179,6 +181,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
}
}
+ // missing keyspace means we have not done bootstrap yet
final boolean missingKeyspace;
if ( throwable instanceof CollectionRuntimeException ) {
CollectionRuntimeException cre = (CollectionRuntimeException) throwable;
@@ -187,6 +190,13 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
missingKeyspace = false;
}
+ // work around for https://issues.apache.org/jira/browse/USERGRID-1291
+ // throw exception so that we do not cache
+ // TODO: determine how application name can intermittently be null
+ if ( app != null && app.getName() == null ) {
+ throw new RuntimeException( "Name is null for application " + appId, throwable );
+ }
+
if ( app == null && !missingKeyspace ) {
throw new RuntimeException( "Error getting application " + appId, throwable );
@@ -645,6 +655,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
@Override
public void setup() throws Exception {
getSetup().initSchema();
+ lockManager.setup();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/stack/core/src/main/java/org/apache/usergrid/locking/LockManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/locking/LockManager.java b/stack/core/src/main/java/org/apache/usergrid/locking/LockManager.java
index a2d37ab..4ed41d8 100644
--- a/stack/core/src/main/java/org/apache/usergrid/locking/LockManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/locking/LockManager.java
@@ -38,4 +38,9 @@ public interface LockManager {
* @throws UGLockException if the lock cannot be acquired
*/
public Lock createLock( final UUID applicationId, final String... path );
+
+ /**
+ * Setup lock persistence mechanism.
+ */
+ public void setup();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/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 6acce47..90b9d57 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
@@ -50,6 +50,7 @@ public class AstyanaxLockManagerImpl implements LockManager {
private final CassandraFig cassandraFig;
+ private final CassandraCluster cassandraCluster;
private Keyspace keyspace;
private ColumnFamily columnFamily;
private static final int MINIMUM_LOCK_EXPIRATION = 60000; // 1 minute
@@ -60,38 +61,19 @@ public class AstyanaxLockManagerImpl implements LockManager {
CassandraCluster cassandraCluster ) throws ConnectionException {
this.cassandraFig = cassandraFig;
+ this.cassandraCluster = cassandraCluster;
+ }
- // hold up construction until we can create the column family
- int maxRetries = cassandraFig.getLockManagerInitRetries();
- int retries = 0;
- boolean famReady = false;
- Set<Class> seenBefore = new HashSet<>(10);
- while ( !famReady && retries++ < maxRetries ) {
- try {
- keyspace = cassandraCluster.getLocksKeyspace();
- createLocksKeyspace();
- columnFamily = createLocksColumnFamily();
- famReady = true;
-
- } catch ( Throwable t ) {
- final String msg;
- if ( t instanceof PoolTimeoutException || t instanceof NoAvailableHostsException) {
- msg = retries + ": Cannot connect to Cassandra (" + t.getClass().getSimpleName() + ")";
- } else {
- msg = retries + ": Error (" + t.getClass().getSimpleName() + ") tries=" + retries;
- }
- if ( !seenBefore.contains( t.getClass() ) ) {
- logger.error( msg, t );
- } else {
- logger.error( msg );
- }
- seenBefore.add( t.getClass() );
- try {
- Thread.sleep( cassandraFig.getLockManagerInitInterval() );
- } catch (InterruptedException ignored) {}
- }
- }
+ @Override
+ public void setup() {
+ try {
+ keyspace = cassandraCluster.getLocksKeyspace();
+ createLocksKeyspace();
+ columnFamily = createLocksColumnFamily();
+ } catch (ConnectionException e) {
+ throw new RuntimeException( "Error setting up locks keyspace and column family", e );
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/stack/core/src/main/java/org/apache/usergrid/locking/noop/NoOpLockManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/locking/noop/NoOpLockManagerImpl.java b/stack/core/src/main/java/org/apache/usergrid/locking/noop/NoOpLockManagerImpl.java
index 6174890..ff14031 100644
--- a/stack/core/src/main/java/org/apache/usergrid/locking/noop/NoOpLockManagerImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/locking/noop/NoOpLockManagerImpl.java
@@ -38,4 +38,9 @@ public class NoOpLockManagerImpl implements LockManager {
public Lock createLock( UUID applicationId, String... path ) {
return new NoOpLockImpl();
}
+
+ @Override
+ public void setup() {
+ // no op
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java
index a9892f5..04e00e0 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManager.java
@@ -96,6 +96,14 @@ public class ServiceManager {
this.qm = qm;
this.properties = properties;
+ // additional logging to help debug https://issues.apache.org/jira/browse/USERGRID-1291
+ if ( em == null ) {
+ logger.error("EntityManager is null");
+ }
+ if ( qm == null ) {
+ logger.error("QueueManager is null");
+ }
+
if ( em != null ) {
try {
application = em.getApplication();
http://git-wip-us.apache.org/repos/asf/usergrid/blob/59c538aa/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java
index 5274336..2425b95 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceManagerFactory.java
@@ -23,6 +23,8 @@ import java.util.UUID;
import com.google.inject.Injector;
import org.apache.usergrid.locking.Lock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -35,6 +37,7 @@ import org.apache.usergrid.persistence.EntityManagerFactory;
public class ServiceManagerFactory implements ApplicationContextAware {
+ private static final Logger logger = LoggerFactory.getLogger( ServiceManagerFactory.class );
private ApplicationContext applicationContext;
@@ -59,6 +62,15 @@ public class ServiceManagerFactory implements ApplicationContextAware {
public ServiceManager getServiceManager( UUID applicationId ) {
+
+ // additional logging to help debug https://issues.apache.org/jira/browse/USERGRID-1291
+ if ( emf == null ) {
+ logger.error("EntityManagerFactory is null");
+ }
+ if ( qmf == null ) {
+ logger.error("QueueManagerFactory is null");
+ }
+
EntityManager em = null;
if ( emf != null ) {
em = emf.getEntityManager( applicationId );