HHH-13577 LockTest.testContendedPessimisticLock and StatementIsClosedAfterALockExceptionTest.testStatementIsClosed tests fail on Sybase

HHH-13577 : Re-enable LockTest for SybaseASE15Dialect
This commit is contained in:
Andrea Boriero 2019-08-14 11:55:11 +01:00 committed by Gail Badner
parent cfd7db36c6
commit 210aff098c
3 changed files with 14 additions and 6 deletions

View File

@ -559,7 +559,6 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
@SkipForDialect(HSQLDialect.class)
// ASE15.5 will generate select...holdlock and fail at this test, but ASE15.7 passes it. Skip it for ASE15.5
// only.
@SkipForDialect(value = { SybaseASE15Dialect.class }, strictMatching = true, jiraKey = "HHH-6820")
@SkipForDialect(value = { SQLServerDialect.class })
public void testContendedPessimisticLock() throws Exception {
final CountDownLatch latch = new CountDownLatch( 1 );

View File

@ -32,6 +32,7 @@ import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.PostgreSQL81Dialect;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.dialect.SybaseASE15Dialect;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.jboss.logging.Logger;
@ -573,6 +574,12 @@ public class TransactionUtil {
st.execute(String.format( "SET TRANSACTION LOCK WAIT TIMEOUT %d", millis ));
}
}
else if( Dialect.getDialect() instanceof SybaseASE15Dialect) {
try (Statement st = connection.createStatement()) {
//Prepared Statements fail for SET commands
st.execute(String.format( "SET LOCK WAIT %d", millis/1000 ));
}
}
else {
try {
connection.setNetworkTimeout( Executors.newSingleThreadExecutor(), (int) millis );

View File

@ -79,11 +79,13 @@ public class ExceptionUtil {
else {
Throwable rootCause = ExceptionUtil.rootCause( e );
if (
rootCause != null && (
rootCause.getMessage().contains( "timeout" ) ||
rootCause.getMessage().contains( "timed out" ) ||
rootCause.getMessage().contains( "lock(s) could not be acquired" )
)
rootCause != null && (
rootCause.getMessage().contains( "timeout" ) ||
rootCause.getMessage().contains( "timed out" ) ||
rootCause.getMessage().contains( "lock(s) could not be acquired" ) ||
rootCause.getMessage().contains( "Could not acquire a lock" )
)
) {
return true;
}