Details
-
Bug
-
Resolution: Fixed
-
Medium
-
None
-
1
-
Severity 2 - Major
-
Description
Summary
When updating a cloned issue field, an exception is thrown and the field does not get updated.
Environment
Jira Cloud
Steps to Reproduce
- Create an issue
- Update a system or custom field either via REST API or via the UI
Expected Results
The field gets updated.
Actual Results
The below exception is thrown in Jira logs
com.querydsl.core.QueryException: Caught BatchUpdateException for insert into "public"."jiraissuetokens" ("field", "issueid", "tokens") values (?, ?, ?) at com.querydsl.sql.support.JavaSE7SQLExceptionWrapper.wrap(JavaSE7SQLExceptionWrapper.java:41) at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:48) at com.querydsl.sql.Configuration.translate(Configuration.java:459) at com.querydsl.sql.dml.SQLInsertClause.execute(SQLInsertClause.java:445) at com.atlassian.jira.issue.search.textsearch.DefaultTextTokensManager.lambda$createTokens$11(DefaultTextTokensManager.java:193) at com.atlassian.jira.util.collect.Streams$2.tryAdvance(Streams.java:124) at java.util.Spliterator.forEachRemaining(Spliterator.java:326) at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580) at com.atlassian.jira.issue.search.textsearch.DefaultTextTokensManager.createTokens(DefaultTextTokensManager.java:190) at com.atlassian.jira.issue.search.textsearch.DefaultTextTokensManager.lambda$updateTokensForModifiedFields$4(DefaultTextTokensManager.java:79) at com.atlassian.jira.database.DefaultQueryDslAccessor$LegacyOfBizConnectionProvider.lambda$execute$0(DefaultQueryDslAccessor.java:156) at com.atlassian.jira.database.DefaultQueryDslAccessor.executeWithLegacyOfBizTransaction(DefaultQueryDslAccessor.java:84) at com.atlassian.jira.database.DefaultQueryDslAccessor.access$400(DefaultQueryDslAccessor.java:18) at com.atlassian.jira.database.DefaultQueryDslAccessor$LegacyOfBizConnectionProvider.execute(DefaultQueryDslAccessor.java:155) at com.atlassian.jira.issue.search.textsearch.DefaultTextTokensManager.updateTokensForModifiedFields(DefaultTextTokensManager.java:77) at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:803) at com.atlassian.jira.bc.issue.DefaultIssueService.update(DefaultIssueService.java:330) at com.atlassian.jira.bc.issue.DefaultIssueService.update(DefaultIssueService.java:304) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy548.update(Unknown Source) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor$1.run(ServiceTCCLInterceptor.java:61) at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:130) at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokePrivileged(ServiceTCCLInterceptor.java:58) at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:50) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) at com.sun.proxy.$Proxy3378.update(Unknown Source) at com.atlassian.servicedesk.internal.customfields.participants.ParticipantsCustomFieldManagerImpl.updateUserParticipants(ParticipantsCustomFieldManagerImpl.java:116) at com.atlassian.servicedesk.internal.feature.reqparticipants.field.RequestParticipantsInternalManagerImpl.updateParticipantsField(RequestParticipantsInternalManagerImpl.java:157) at com.atlassian.servicedesk.internal.feature.reqparticipants.field.RequestParticipantsInternalManagerImpl.lambda$addParticipants$5(RequestParticipantsInternalManagerImpl.java:82) at com.atlassian.pocketknife.step.EitherStep2.lambda$null$0(EitherStep2.java:20) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep2.lambda$then$1(EitherStep2.java:20) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep2.then(EitherStep2.java:20) at com.atlassian.servicedesk.internal.feature.reqparticipants.field.RequestParticipantsInternalManagerImpl.addParticipants(RequestParticipantsInternalManagerImpl.java:78) at com.atlassian.servicedesk.internal.feature.reqparticipants.field.RequestParticipantsInternalServiceImpl.lambda$addParticipants$2(RequestParticipantsInternalServiceImpl.java:74) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18) at com.atlassian.servicedesk.internal.feature.reqparticipants.field.RequestParticipantsInternalServiceImpl.addParticipants(RequestParticipantsInternalServiceImpl.java:74) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.addParticipantsWithExistingAccounts(IncomingEmailManagerImpl.java:353) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.processAdditionalRequestParticipantSignupsForIssue(IncomingEmailManagerImpl.java:270) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$null$28(IncomingEmailServiceImpl.java:324) at io.atlassian.fugue.Either$AbstractProjection.forEach(Either.java:714) at io.atlassian.fugue.Either.forEach(Either.java:280) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$addServiceDeskCommentToIssue$29(IncomingEmailServiceImpl.java:323) at io.atlassian.fugue.Either$AbstractProjection.forEach(Either.java:714) at io.atlassian.fugue.Either.forEach(Either.java:280) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.addServiceDeskCommentToIssue(IncomingEmailServiceImpl.java:322) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$addCommentToIssue$27(IncomingEmailServiceImpl.java:301) at io.atlassian.fugue.Option$Some.fold(Option.java:444) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.addCommentToIssue(IncomingEmailServiceImpl.java:298) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannelAsEmailSender$18(IncomingEmailServiceImpl.java:184) at io.atlassian.fugue.Option$Some.fold(Option.java:444) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannelAsEmailSender(IncomingEmailServiceImpl.java:174) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$null$14(IncomingEmailServiceImpl.java:162) at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:141) at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runInContext(ReentrantThreadLocalBasedCodeContext.java:59) at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runInCustomerContext(CustomerContextServiceImpl.java:39) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inCustomerContext(IncomingEmailServiceImpl.java:431) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$inEmailContext$40(IncomingEmailServiceImpl.java:424) at com.atlassian.pocketknife.internal.util.runner.AuthenticationContextUtilImpl.runAs(AuthenticationContextUtilImpl.java:56) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inEmailContext(IncomingEmailServiceImpl.java:426) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$doCreateNewOrCommentOnIssueWithMailChannel$15(IncomingEmailServiceImpl.java:162) at io.atlassian.fugue.Either$Right.fold(Either.java:620) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.doCreateNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:160) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannel$6(IncomingEmailServiceImpl.java:135) at com.atlassian.pocketknife.step.EitherStep2.lambda$null$0(EitherStep2.java:20) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep2.lambda$then$1(EitherStep2.java:20) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep2.then(EitherStep2.java:20) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:135) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$processEmailWithMailChannel$1(IncomingEmailServiceImpl.java:126) at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886) at io.atlassian.fugue.Either.flatMap(Either.java:231) at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18) at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.processEmailWithMailChannel(IncomingEmailServiceImpl.java:126) at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.processMessage(SDMailHandler.java:76) at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.handleReplyMessage(SDMailHandler.java:58) at com.atlassian.jira.internal.mail.processor.feature.processor.MailHandlerWorker.handle(MailHandlerWorker.java:63) at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.processMailItem(MailProcessorWorker.java:107) at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.lambda$process$0(MailProcessorWorker.java:77) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.lambda$execute$0(DatabaseAccessorImpl.java:54) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.executeInternal(DefaultTransactionalExecutor.java:88) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor$1.execute(DefaultTransactionalExecutor.java:42) at com.atlassian.jira.internal.sal.rdbms.JiraHostConnectionAccessor.lambda$borrowConnectionAndExecute$0(JiraHostConnectionAccessor.java:62) at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:36) at com.atlassian.jira.internal.sal.rdbms.JiraHostConnectionAccessor.borrowConnectionAndExecute(JiraHostConnectionAccessor.java:50) at com.atlassian.jira.internal.sal.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:35) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:39) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:52) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInNewTransaction(DatabaseAccessorImpl.java:32) at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.process(MailProcessorWorker.java:72) at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorService.run(MailProcessorService.java:54) at com.atlassian.jira.internal.mail.processor.services.MailProcessorExecutor.run(MailProcessorExecutor.java:42) at com.atlassian.jira.internal.mail.processor.services.AbstractMailExecutor.execute(AbstractMailExecutor.java:39) at com.atlassian.jira.internal.mail.processor.services.MailJobRunner.runJob(MailJobRunner.java:39) at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:195) at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:168) at com.atlassian.scheduler.core.JobLauncher.launchJob(JobLauncher.java:139) at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:129) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:509) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJob(CaesiumSchedulerService.java:486) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJobWithRecoveryGuard(CaesiumSchedulerService.java:491) at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:437) at com.atlassian.jira.scheduler.JiraCaesiumSchedulerService.executeQueuedJob(JiraCaesiumSchedulerService.java:85) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:65) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:59) at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:34) at java.lang.Thread.run(Thread.java:745) Suppressed: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "jiraissuetokens_pkey" Detail: Key (issueid, field)=(158099, summary) already exists. at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2190) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:472) at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:791) at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1563) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.vibur.dbcp.proxy.AbstractInvocationHandler.targetInvoke(AbstractInvocationHandler.java:144) at org.vibur.dbcp.proxy.StatementInvocationHandler.on(StatementInvocationHandler.java:161) at com.atlassian.jira.connpool.JiraViburConnectionPoolProvider.lambda$null$5(JiraViburConnectionPoolProvider.java:149) at org.vibur.dbcp.proxy.StatementInvocationHandler.processExecute(StatementInvocationHandler.java:123) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:85) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:37) at org.vibur.dbcp.proxy.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80) at com.sun.proxy.$Proxy8.executeBatch(Unknown Source) at com.querydsl.sql.dml.AbstractSQLClause.executeBatch(AbstractSQLClause.java:192) at com.querydsl.sql.dml.AbstractSQLClause.executeBatch(AbstractSQLClause.java:202) at com.querydsl.sql.dml.SQLInsertClause.execute(SQLInsertClause.java:439) ... 130 more Caused by: java.sql.BatchUpdateException: Batch entry 0 insert into "public"."jiraissuetokens" ("field", "issueid", "tokens") values ('summary', 158099, '''boxes'' ''re'' ''box'' ''entered'' ''enter'' ''wrong''') was aborted: ERROR: duplicate key value violates unique constraint "jiraissuetokens_pkey" Detail: Key (issueid, field)=(158099, summary) already exists. Call getNextException to see other errors in the batch. at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:148) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2191) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:472) at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:791) at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1563) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.vibur.dbcp.proxy.AbstractInvocationHandler.targetInvoke(AbstractInvocationHandler.java:144) at org.vibur.dbcp.proxy.StatementInvocationHandler.on(StatementInvocationHandler.java:161) at com.atlassian.jira.connpool.JiraViburConnectionPoolProvider.lambda$null$5(JiraViburConnectionPoolProvider.java:149) at org.vibur.dbcp.proxy.StatementInvocationHandler.processExecute(StatementInvocationHandler.java:123) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:85) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:37) at org.vibur.dbcp.proxy.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80) at com.sun.proxy.$Proxy8.executeBatch(Unknown Source) at com.querydsl.sql.dml.AbstractSQLClause.executeBatch(AbstractSQLClause.java:192) at com.querydsl.sql.dml.AbstractSQLClause.executeBatch(AbstractSQLClause.java:202) at com.querydsl.sql.dml.SQLInsertClause.execute(SQLInsertClause.java:439) ... 130 more [CIRCULAR REFERENCE:org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "jiraissuetokens_pkey" Detail: Key (issueid, field)=(158099, summary) already exists.]
Notes
Issue is not reproducible in all customer systems.
Workaround
There is no workaround available.
Attachments
Issue Links
- Discovered while testing
-
JRACLOUD-67548 Changing issue via post-function/workflow transition prevents search from working
- Closed
- relates to
-
JEX-31059 Loading...