Mantis importer unnecessarily requires InnoDB on source MySQL server

XMLWordPrintable

    • 2

      NOTE: This suggestion is for JIRA Server. Using JIRA Cloud? See the corresponding suggestion.

      Summary

      The JIRA Importer enforces a connection to a MySQL Database that uses the InnoDB Engine. This can not be configured from the "Advanced" JDBC Settings.

      Steps to Reproduce

      Error occurs When attempting to connect to Mantis when using the JIRA Importer tool:

      1. Log into JIRA and goto the External System Import page.
      2. Select: Import from Mantis
      3. Attempt to connect to a MyISAM database
      4. Observe in the atlassian-jira.log the following exception:
        com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
        	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        	at java.lang.reflect.Constructor.newInstance(Unknown Source)
        	at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
        	at com.mysql.jdbc.Util.getInstance(Util.java:372)
        	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:958)
        	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)
        	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)
        	at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2149)
        	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2074)
        	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
        	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)  <+3>
        	at java.lang.reflect.Constructor.newInstance(Unknown Source)
        	at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
        	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
        	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
        	at com.atlassian.jira.plugins.importer.web.JdbcConnection.getConnection(JdbcConnection.java:91)
        	at com.atlassian.jira.plugins.importer.web.JdbcConnection.validateConnection(JdbcConnection.java:235)
        	at com.atlassian.jira.plugins.importer.web.AbstractDatabaseImporterController.createImportProcessBean(AbstractDatabaseImporterController.java:54)
        	at com.atlassian.jira.plugins.importer.web.ImporterSetupPage.doExecute(ImporterSetupPage.java:104)  <+1> (ActionSupport.java:165)
        	at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:88)
        	at com.atlassian.jira.plugins.importer.web.ImporterProcessSupport.execute(ImporterProcessSupport.java:153)  <+7> (DefaultInterceptorChain.java:39) (NestedInterceptorChain.java:31) (ChainedInterceptor.java:16) (DefaultInterceptorChain.java:35) (GenericDispatcher.java:225) (GenericDispatcher.java:154) (JiraWebworkActionDispatcher.java:152)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)  <+2> (ApplicationFilterChain.java:303) (ApplicationFilterChain.java:208)
        	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)  <+14> (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XContentTypeOptionsNoSniffFilter.java:22) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (HeaderSanitisingFilter.java:44) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
        	at com.atlassian.jira.tzdetect.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:39)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.jira.baseurl.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:38)  <+8> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (ContextFilter.java:25) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.servicedesk.internal.web.RedirectExternalCustomerToPortalFilter.doFilter(RedirectExternalCustomerToPortalFilter.scala:18)  <+4> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:36)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36)  <+23> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AccessLogFilter.java:103) (AccessLogFilter.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SiteMeshFilter.java:181) (SiteMeshFilter.java:85) (SitemeshPageFilter.java:124) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+22> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SecurityFilter.java:239) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (BaseLoginFilter.java:172) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) (OAuthFilter.java:79) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+13> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ProfilingFilter.java:99) (JIRAProfilingFilter.java:19) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208)
        	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
        	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
        	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)  <+10> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (GzipFilter.java:82) (GzipFilter.java:59) (JiraGzipFilter.java:55) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70)
        	at com.atlassian.analytics.client.filter.JiraAnalyticsFilter.doFilter(JiraAnalyticsFilter.java:40)
        	at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32)  <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70)
        	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+40> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:49) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (JiraStartupChecklistFilter.java:79) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:60) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (StandardWrapperValve.java:220) (StandardContextValve.java:122) (AuthenticatorBase.java:501) (StandardHostValve.java:171) (ErrorReportValve.java:103) (StandardEngineValve.java:116) (AccessLogValve.java:950) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1070) (AbstractProtocol.java:611) (JIoEndpoint.java:314)
        	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        	at java.lang.Thread.run(Unknown Source)
        Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown storage engine 'InnoDB'
        	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        	at java.lang.reflect.Constructor.newInstance(Unknown Source)
        	at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
        	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)
        	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)
        	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
        	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
        	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2531)
        	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1618)
        	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1549)
        	at com.mysql.jdbc.ConnectionImpl.setSessionVariables(ConnectionImpl.java:5070)
        	at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3246)
        	at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2112)
        	... 204 more
        	

      Expected Results

      There should be a way to set the Engine type to MyISAM when importing issues. While it is important for JIRA to enforce the InnoDB Engine, this should not be the case when importing information from an External System.

      Actual Results

      When connecting to the Mantis Server the atlassian-jira.log shows the connection string being used:

      2015-01-01 01:01:01,001 http-bio-8080-exec-1 INFO admin 100x8908x1 idjmdi 192.168.0.2 /secure/admin/ImporterSetupPage.jspa [plugins.importer.web.JdbcConnection] Connecting to JDBC using connection string: jdbc:mysql://localhost:3306/mantistest?useUnicode=true&characterEncoding=UTF8&sessionVariables=storage_engine=InnoDB&autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=100
      

      Workaround

      The Importer will not able to work until the InnoDB engine is enabled the MySQL server. Therefore, enable the InnoDB Engine as per database vendor instructions.

            Assignee:
            Unassigned
            Reporter:
            Anonymous
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: