Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-76099

Jira 9.4.8 Upgrade Task to Update Archived Issues Fails with More than 2100 Projects in MS SQL

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • High
    • 9.6.0, 9.4.11
    • 9.4.8
    • Upgrade
    • None
    • 9.04
    • 2
    • Severity 2 - Major
    • 1
    • Hide
      Atlassian Update – 14 September 2023

      Dear Customers,

      We're happy to announce that this issue is fixed in JSW 9.4.11 (JSM 5.4.11.) release.

      The problematic UpgradeTask has been rewritten to work with any number of projects regardless of database being used.

      Best regards

      Jakub Reczycki
      Senior Software Engineer

      Show
      Atlassian Update – 14 September 2023 Dear Customers, We're happy to announce that this issue is fixed in JSW 9.4.11 (JSM 5.4.11.) release. The problematic UpgradeTask has been rewritten to work with any number of projects regardless of database being used. Best regards Jakub Reczycki Senior Software Engineer

    Description

      Issue Summary

      This is reproducible on Data Center: (yes)

      The upgrade task "UpgradeTask_Build940008" in Jira 9.4.8 and "UpgradeTask_Build960000.java" in Jira 9.6.0 fails to count for MS SQL's maximum of 2100 parameter limit for SQL statements while trying to set issues with the archived flag. Giving more than 2100 project names in the update SQL causes the upgrade to fail. 

      Steps to Reproduce

      1. Create a Jira instance with more than 2100 archived projects with MS SQL as DB
      2. Try to upgrade to Jira 9.4.6 or 9.6.0

      Expected Results

      Upgrade completes normally

      Actual Results

      Upgrade fails with for task UpgradeTask_Build940008 (9.4.8) or UpgradeTask_Build960000 (9.6) with MS SQL exception

      The below exception is thrown in the xxxxxxx.log file:

      2023-07-25 08:57:16,110+0100  main ERROR      [c.a.upgrade.core.DefaultUpgradeTaskFactoryProcessor] Upgrade task [host,buildNumber=940008] failed
      java.lang.RuntimeException: Error running original upgrade task
      	at com.atlassian.jira.upgrade.AbstractUpgradeTask.runUpgrade(AbstractUpgradeTask.java:63)
      	at com.atlassian.upgrade.core.DefaultUpgradeTaskFactoryProcessor.runOneUpgradeTask(DefaultUpgradeTaskFactoryProcessor.java:109)
      	at com.atlassian.upgrade.core.DefaultUpgradeTaskFactoryProcessor.lambda$performUpgradesUnsafe$13(DefaultUpgradeTaskFactoryProcessor.java:80)
      	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
      	at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:400)
      	at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258)
      	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:503)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
      	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
      	at com.atlassian.upgrade.core.DefaultUpgradeTaskFactoryProcessor.performUpgradesUnsafe(DefaultUpgradeTaskFactoryProcessor.java:81)
      	at com.atlassian.upgrade.core.DefaultUpgradeTaskFactoryProcessor.performUpgrades(DefaultUpgradeTaskFactoryProcessor.java:46)
      	at com.atlassian.upgrade.core.DefaultUpgradeTaskManager.upgradeHostApp(DefaultUpgradeTaskManager.java:41)
      	at com.atlassian.jira.upgrade.LicenseCheckingUpgradeService.executeUpgrades(LicenseCheckingUpgradeService.java:134)
      	at com.atlassian.jira.upgrade.LicenseCheckingUpgradeService.runUpgrades(LicenseCheckingUpgradeService.java:97)
      	at com.atlassian.jira.upgrade.ClusterLockingUpgradeService.runUpgrades(ClusterLockingUpgradeService.java:35)
      	at com.atlassian.jira.upgrade.LoggingUpgradeService.lambda$runUpgradesWithLogging$0(LoggingUpgradeService.java:28)
      	at com.atlassian.jira.upgrade.LoggingUpgradeService.runWithTaskLogging(LoggingUpgradeService.java:43)
      	at com.atlassian.jira.upgrade.LoggingUpgradeService.runUpgradesWithLogging(LoggingUpgradeService.java:28)
      	at com.atlassian.jira.upgrade.IndexingUpgradeService.runUpgrades(IndexingUpgradeService.java:19)
      	at com.atlassian.jira.upgrade.DefaultUpgradeService.runUpgrades(DefaultUpgradeService.java:61)
      	at com.atlassian.jira.upgrade.UpgradeLauncher.upgradeIfNeeded(UpgradeLauncher.java:109)
      	at com.atlassian.jira.upgrade.UpgradeLauncher.start(UpgradeLauncher.java:86)
      	at com.atlassian.jira.startup.ActiveServicesLauncher.start(ActiveServicesLauncher.java:50)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.postDBActivated(DefaultJiraLauncher.java:170)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$postDbLaunch$2(DefaultJiraLauncher.java:144)
      	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrEnqueue(DatabaseConfigurationManagerImpl.java:307)
      	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.doNowOrWhenDatabaseActivated(DatabaseConfigurationManagerImpl.java:202)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.postDbLaunch(DefaultJiraLauncher.java:135)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:102)
      	at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:100)
      	at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:154)
      	at com.atlassian.jira.startup.LauncherContextListener.initSlowStuffInBackground(LauncherContextListener.java:139)
      	at com.atlassian.jira.startup.LauncherContextListener.contextInitialized(LauncherContextListener.java:101)
      	... 5 filtered
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
      	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
      	... 5 filtered
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
      	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
      	... 8 filtered
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
      	... 2 filtered
      Caused by: com.querydsl.core.QueryException: Caught SQLServerException for update dbo.jiraissue
      set archived = ?
      where (jiraissue.project in (?, ?, ?, ?, ?....
      
      > Shortened
       
      ...., ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) and (jiraissue.archived = ? or jiraissue.archived is null)
      	at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50)
      	at com.querydsl.sql.Configuration.translate(Configuration.java:459)
      	at com.querydsl.sql.dml.SQLUpdateClause.execute(SQLUpdateClause.java:217)
      	... 2 filtered
      	at com.atlassian.jira.database.DefaultQueryDslAccessor.lambda$executeQuery$0(DefaultQueryDslAccessor.java:64)
      	at com.atlassian.jira.database.DatabaseAccessorImpl.lambda$runInTransaction$0(DatabaseAccessorImpl.java:105)
      	at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:74)
      	at com.atlassian.jira.database.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:100)
      	at com.atlassian.jira.database.DefaultQueryDslAccessor.executeQuery(DefaultQueryDslAccessor.java:63)
      	at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build940008.doUpgrade(UpgradeTask_Build940008.java:78)
      	at com.atlassian.jira.upgrade.AbstractUpgradeTask.runUpgrade(AbstractUpgradeTask.java:61)
      	... 66 more
      Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The incoming request has too many parameters. The server supports a maximum of 2100 parameters. Reduce the number of parameters and resend the request.
      	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
      	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
      	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:602)
      	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:524)
      	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7418)
      	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:247)
      	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:222)
      	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:473)
      	at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
      	at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:98)
      	at com.atlassian.jira.ofbiz.sql.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:47)
      	at com.atlassian.jira.diagnostic.connection.DiagnosticPreparedStatement.lambda$executeUpdate$7(DiagnosticPreparedStatement.java:69)
      	at com.atlassian.diagnostics.internal.platform.monitor.db.DefaultDatabaseDiagnosticsCollector.recordExecutionTime(DefaultDatabaseDiagnosticsCollector.java:91)
      	at com.atlassian.jira.diagnostic.connection.DatabaseDiagnosticsCollectorDelegate.recordExecutionTime(DatabaseDiagnosticsCollectorDelegate.java:62)
      	at com.atlassian.jira.diagnostic.connection.DiagnosticPreparedStatement.executeUpdate(DiagnosticPreparedStatement.java:69)
      	at com.querydsl.sql.dml.SQLUpdateClause.execute(SQLUpdateClause.java:203)
      

      Workaround

      Currently, there is no known workaround for this behavior. A workaround will be added here when available

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              c55b673763fb alperf
              Votes:
              1 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: