Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dev-sjones-euca-12266'
Browse files Browse the repository at this point in the history
  • Loading branch information
sjones4 committed May 2, 2016
2 parents 8986af0 + f4fa3f5 commit d880d6a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
Expand Up @@ -63,6 +63,7 @@
package com.eucalyptus.entities;

import java.lang.ref.WeakReference;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -117,7 +118,10 @@
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.engine.jdbc.spi.JdbcCoordinator;
import org.hibernate.engine.jdbc.spi.LogicalConnectionImplementor;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.engine.transaction.spi.TransactionCoordinator;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.LockAcquisitionException;
import org.hibernate.jpa.internal.EntityManagerFactoryImpl;
Expand Down Expand Up @@ -187,7 +191,7 @@ public static boolean hasTransaction( final Object obj ) {
final CascadingTx tx = txStateThreadLocal.get( ).get( ctx );
if ( tx == null ) {
return false;
} else if ( tx.isActive( ) ) {
} else if ( tx.isUsable( ) ) {
return true;
} else {
cleanStrandedTx( tx );
Expand Down Expand Up @@ -1281,7 +1285,39 @@ public void commit( ) throws RecoverablePersistenceException {
TxState getTxState( ) {
return this.txState;
}


boolean isUsable( ) {
final boolean active = isActive( );
final boolean fresh = ( System.currentTimeMillis( ) - record.getStartTime( ) ) < TimeUnit.MINUTES.toMillis( 1 );
return
active &&
( fresh || isConnected( ) );
}

boolean isConnected( ) {
boolean connected = false;
final TxState state = this.txState;
if ( state != null && state.getSession( ) instanceof SessionImplementor ) {
final SessionImplementor sessionImplementor = (SessionImplementor) state.getSession( );
final TransactionCoordinator txCoordinator = sessionImplementor.getTransactionCoordinator( );
if ( txCoordinator != null ) {
final JdbcCoordinator jdbcCoordinator = txCoordinator.getJdbcCoordinator( );
if ( jdbcCoordinator != null ) {
final LogicalConnectionImplementor logicalConnectionImplementor = jdbcCoordinator.getLogicalConnection( );
try {
connected =
logicalConnectionImplementor.isOpen( ) &&
logicalConnectionImplementor.isPhysicallyConnected( ) &&
!logicalConnectionImplementor.getConnection( ).isClosed( );
} catch ( SQLException e ) {
// not connected
}
}
}
}
return connected;
}

public EntityTransaction join( ) {
return new EntityTransaction( ) {
@Override public void setRollbackOnly( ) { }
Expand Down
Expand Up @@ -625,7 +625,7 @@ public static String currentStackRange( int start, int end ) {
}

public static String currentStackString( ) {
return currentStackRange( 0, Integer.MAX_VALUE );
return currentStackRange( 0, 1_000_000 );
}

private static final ConcurrentMap<String, Queue<?>> workers = Maps.newConcurrentMap( );
Expand Down

0 comments on commit d880d6a

Please sign in to comment.