Skip to content

Commit

Permalink
LPS-128873 Fix log assertion by adding expected log on BatchingBatch …
Browse files Browse the repository at this point in the history
…because SQLExceptions in BatchingBatch are logged twice -- see hibernate/hibernate-orm#1544
  • Loading branch information
dantewang committed Mar 17, 2022
1 parent 3571506 commit 2984c6f
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 124 deletions.
Expand Up @@ -30,6 +30,7 @@
import com.liferay.portal.test.rule.ExpectedDBType;
import com.liferay.portal.test.rule.ExpectedLog;
import com.liferay.portal.test.rule.ExpectedLogs;
import com.liferay.portal.test.rule.ExpectedMultipleLogs;
import com.liferay.portal.test.rule.ExpectedType;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;

Expand All @@ -49,6 +50,7 @@

import javax.persistence.PersistenceException;

import org.hibernate.engine.jdbc.batch.internal.BatchingBatch;
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.GenericJDBCException;
Expand Down Expand Up @@ -81,70 +83,84 @@ public void setUp() {
LockLocalServiceUtil.unlock("className", "key");
}

@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Error for batch element",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Batch failure.",
expectedType = ExpectedType.CONTAINS
),
@ExpectedLog(
expectedDBType = ExpectedDBType.HYPERSONIC,
expectedLog = "integrity constraint violation: unique constraint or index violation: IX_228562AD",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.ORACLE,
expectedLog = "ORA-00001: unique constraint",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "Batch entry 0 insert into Lock_ ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "ERROR: duplicate key value violates unique constraint ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SQLSERVER,
expectedLog = "Cannot insert duplicate key row in object",
expectedType = ExpectedType.PREFIX
@ExpectedMultipleLogs(
expectedMultipleLogs = {
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Error for batch element",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Batch failure.",
expectedType = ExpectedType.CONTAINS
),
@ExpectedLog(
expectedDBType = ExpectedDBType.HYPERSONIC,
expectedLog = "integrity constraint violation: unique constraint or index violation: IX_228562AD",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.ORACLE,
expectedLog = "ORA-00001: unique constraint",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "Batch entry 0 insert into Lock_ ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "ERROR: duplicate key value violates unique constraint ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SQLSERVER,
expectedLog = "Cannot insert duplicate key row in object",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SYBASE,
expectedLog = "Attempt to insert duplicate key row",
expectedType = ExpectedType.CONTAINS
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SYBASE,
expectedLog = "Attempt to insert duplicate key row",
expectedType = ExpectedType.CONTAINS
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.NONE,
expectedLog = "HHH000315: Exception executing batch [java.sql.BatchUpdateException",
expectedType = ExpectedType.PREFIX
)
},
level = "ERROR", loggerClass = BatchingBatch.class
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
}
)
@Test
public void testLock() throws Exception {
Expand Down Expand Up @@ -287,70 +303,84 @@ public Lock call() throws PortalException {
}
}

@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Error for batch element",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Batch failure.",
expectedType = ExpectedType.CONTAINS
),
@ExpectedLog(
expectedDBType = ExpectedDBType.HYPERSONIC,
expectedLog = "integrity constraint violation: unique constraint or index violation: IX_228562AD",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.ORACLE,
expectedLog = "ORA-00001: unique constraint",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "Batch entry 0 insert into Lock_ ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "ERROR: duplicate key value violates unique constraint ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SQLSERVER,
expectedLog = "Cannot insert duplicate key row in object",
expectedType = ExpectedType.PREFIX
@ExpectedMultipleLogs(
expectedMultipleLogs = {
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Error for batch element",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.DB2,
expectedLog = "Batch failure.",
expectedType = ExpectedType.CONTAINS
),
@ExpectedLog(
expectedDBType = ExpectedDBType.HYPERSONIC,
expectedLog = "integrity constraint violation: unique constraint or index violation: IX_228562AD",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MARIADB,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Deadlock found when trying to get lock; try restarting transaction",
expectedType = ExpectedType.EXACT
),
@ExpectedLog(
expectedDBType = ExpectedDBType.MYSQL,
expectedLog = "Duplicate entry",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.ORACLE,
expectedLog = "ORA-00001: unique constraint",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "Batch entry 0 insert into Lock_ ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.POSTGRESQL,
expectedLog = "ERROR: duplicate key value violates unique constraint ",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SQLSERVER,
expectedLog = "Cannot insert duplicate key row in object",
expectedType = ExpectedType.PREFIX
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SYBASE,
expectedLog = "Attempt to insert duplicate key row",
expectedType = ExpectedType.CONTAINS
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
),
@ExpectedLog(
expectedDBType = ExpectedDBType.SYBASE,
expectedLog = "Attempt to insert duplicate key row",
expectedType = ExpectedType.CONTAINS
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.NONE,
expectedLog = "HHH000315: Exception executing batch [java.sql.BatchUpdateException",
expectedType = ExpectedType.PREFIX
)
},
level = "ERROR", loggerClass = BatchingBatch.class
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
}
)
@Test
public void testMutualExcludeLockingParallel() throws Exception {
Expand Down
Expand Up @@ -54,6 +54,7 @@
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

import org.hibernate.engine.jdbc.batch.internal.BatchingBatch;
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;

import org.junit.Assert;
Expand Down Expand Up @@ -207,6 +208,16 @@ public void run() {
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
),
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.NONE,
expectedLog = "HHH000315: Exception executing batch [java.sql.BatchUpdateException",
expectedType = ExpectedType.PREFIX
)
},
level = "ERROR", loggerClass = BatchingBatch.class
)
}
)
Expand Down
Expand Up @@ -48,6 +48,7 @@

import javax.portlet.PortletPreferences;

import org.hibernate.engine.jdbc.batch.internal.BatchingBatch;
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;

import org.junit.Assert;
Expand Down Expand Up @@ -173,6 +174,16 @@ public void setUp() throws NoSuchMethodException {
)
},
level = "ERROR", loggerClass = SqlExceptionHelper.class
),
@ExpectedLogs(
expectedLogs = {
@ExpectedLog(
expectedDBType = ExpectedDBType.NONE,
expectedLog = "HHH000315: Exception executing batch [java.sql.BatchUpdateException",
expectedType = ExpectedType.PREFIX
)
},
level = "ERROR", loggerClass = BatchingBatch.class
)
}
)
Expand Down
1 change: 1 addition & 0 deletions modules/core/portal-bootstrap/system.packages.extra.bnd
Expand Up @@ -229,6 +229,7 @@ Export-Package:\
\
org.dom4j.*;version='2.1.3',\
\
org.hibernate.engine.jdbc.batch.internal;version='5.6.3',\
org.hibernate.*;version='5.6.3',\
\
org.jaxen.*;version='1.1.6',\
Expand Down

0 comments on commit 2984c6f

Please sign in to comment.