#1066  Exception when importing projects from YouTrack (constraint exception, duplicate entry for linked issues)
Closed
wojtek opened 1 year ago

SQLIntegrityConstraintViolationException: Duplicate entry '5572-5571-3' for key 'o_IssueLink.UK8ai6ka1c9ohy0p7ce1why5i11'

Unfortunately, the error log is very uninformative: there is no indication which project/issue caused the problem or which linking triggered it.

org.hibernate.exception.ConstraintViolationException: could not execute statement
    	at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)
    	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
    	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
    	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)
    	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3301)
    	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3828)
    	at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107)
    	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
    	at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478)
    	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475)
    	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348)
    	at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:57)
    	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
    	at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1327)
    	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1870)
    	at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:370)
    	at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:392)
    	at io.onedev.server.persistence.dao.DefaultDao.find(DefaultDao.java:87)
    	at io.onedev.server.persistence.SessionInterceptor$1.call(SessionInterceptor.java:23)
    	at io.onedev.server.persistence.DefaultSessionManager.call(DefaultSessionManager.java:90)
    	at io.onedev.server.persistence.SessionInterceptor.invoke(SessionInterceptor.java:18)
    	at jdk.internal.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at com.google.inject.internal.DelegatingInvocationHandler.invoke(DelegatingInvocationHandler.java:50)
    	at com.sun.proxy.$Proxy27.find(Unknown Source)
    	at io.onedev.server.persistence.dao.BaseEntityManager.find(BaseEntityManager.java:85)
    	at io.onedev.server.entitymanager.impl.DefaultIssueManager.find(DefaultIssueManager.java:233)
    	at io.onedev.server.persistence.SessionInterceptor$1.call(SessionInterceptor.java:23)
    	at io.onedev.server.persistence.DefaultSessionManager.call(DefaultSessionManager.java:90)
    	at io.onedev.server.persistence.SessionInterceptor.invoke(SessionInterceptor.java:18)
    	at io.onedev.server.plugin.imports.youtrack.ImportServer$6.consume(ImportServer.java:462)
    	at io.onedev.server.plugin.imports.youtrack.ImportServer.list(ImportServer.java:1135)
    	at io.onedev.server.plugin.imports.youtrack.ImportServer.importIssues(ImportServer.java:1001)
    	at io.onedev.server.plugin.imports.youtrack.ImportServer.importProjects(ImportServer.java:1101)
    	at io.onedev.server.plugin.imports.youtrack.YouTrackProjectImporter.doImport(YouTrackProjectImporter.java:78)
    	at io.onedev.server.web.page.project.imports.ProjectImportPage$1$1$1.call(ProjectImportPage.java:79)
    	at io.onedev.server.web.page.project.imports.ProjectImportPage$1$1$1.call(ProjectImportPage.java:75)
    	at io.onedev.server.persistence.DefaultTransactionManager$1.call(DefaultTransactionManager.java:72)
    	at io.onedev.server.persistence.DefaultSessionManager.call(DefaultSessionManager.java:90)
    	at io.onedev.server.persistence.DefaultTransactionManager.call(DefaultTransactionManager.java:60)
    	at io.onedev.server.web.page.project.imports.ProjectImportPage$1$1.runTask(ProjectImportPage.java:75)
    	at io.onedev.server.web.component.taskbutton.TaskButton$2.call(TaskButton.java:173)
    	at io.onedev.server.web.component.taskbutton.TaskButton$2.call(TaskButton.java:144)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at io.onedev.server.security.SecurityUtils$1.run(SecurityUtils.java:367)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '5572-5571-3' for key 'o_IssueLink.UK8ai6ka1c9ohy0p7ce1why5i11'
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:975)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1114)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1062)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1383)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1047)
    	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
    	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
    	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
    	... 46 more
    ```
wojtek commented 1 year ago

When I removed Depend from the list of mappings the issue went away (I only left Relates, Duplicate and Subtask). Not sure how the names are populated/detected though...

OneDev changed state to 'Closed' 1 year ago
Previous Value Current Value
Open
Closed
OneDev commented 1 year ago

State changed as code fixing the issue is committed

OneDev changed state to 'Released' 1 year ago
Previous Value Current Value
Closed
Released
OneDev commented 1 year ago

State changed as build #3255 is successful

wojtek changed state to 'Open' 1 year ago
Previous Value Current Value
Released
Open
wojtek commented 1 year ago

After the upgrade and trying to run the upgrade I got another exception:

org.hibernate.TransactionException: Unable to rollback against JDBC Connection
    	at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:127)
    	at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:304)
    	at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:142)
    	at io.onedev.server.persistence.DefaultTransactionManager$1.call(DefaultTransactionManager.java:76)
    	at io.onedev.server.persistence.DefaultSessionManager.call(DefaultSessionManager.java:90)
    	at io.onedev.server.persistence.DefaultTransactionManager.call(DefaultTransactionManager.java:60)
    	at io.onedev.server.web.page.project.imports.ProjectImportPage$1$1.runTask(ProjectImportPage.java:75)
    	at io.onedev.server.web.component.taskbutton.TaskButton$2.call(TaskButton.java:173)
    	at io.onedev.server.web.component.taskbutton.TaskButton$2.call(TaskButton.java:144)
    	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    	at io.onedev.server.security.SecurityUtils$1.run(SecurityUtils.java:367)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: java.sql.SQLException: Connection is closed
    	at com.zaxxer.hikari.pool.ProxyConnection$ClosedConnection.lambda$getClosedConnection$0(ProxyConnection.java:490)
    	at com.sun.proxy.$Proxy114.rollback(Unknown Source)
    	at com.zaxxer.hikari.pool.ProxyConnection.rollback(ProxyConnection.java:377)
    	at com.zaxxer.hikari.pool.HikariProxyConnection.rollback(HikariProxyConnection.java)
    	at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:121)
    	... 13 more

Looks like (other) hidden error that caused rolback to fail...

Removing Depend allowed to proceed with import

Robin Shen commented 1 year ago

Are you able to reproduce this issue with a simple YouTrack setup? This will help a lot to find out the reason.

wojtek commented 1 year ago

Unfortunately it happens only on our YouTrack setup and only about halfway through the import process. I guess there is some project with some issue that has weird linking that triggers the exception. There is no error message that includes project name / issue name|number that would help me track down offending item.

Robin Shen commented 1 year ago

Logging project/issue does not help here as it happens when committing the transaction with all imported issues.

Robin Shen changed state to 'Closed' 1 year ago
Previous Value Current Value
Open
Closed
Robin Shen commented 1 year ago

Closed as can not be reproduced. Feel free to reopen if there is more clue

issue 1 of 1
Type
Bug
Priority
Normal
Assignee
Affected Versions
Not Found
Issue Votes (0)
Watchers (4)
Reference
onedev/server#1066
Please wait...
Page is in error, reload to recover