[MAGNOLIA-8307] Upgrade from H2 1.4 to 2.1 throws JdbcSQLNonTransientException Created: 09/Feb/22  Updated: 22/Nov/22  Resolved: 10/Feb/22

Status: Closed
Project: Magnolia
Component/s: None
Affects Version/s: 6.2
Fix Version/s: None

Type: Bug Priority: Neutral
Reporter: Richard Gange Assignee: Unassigned
Resolution: Workaround exists Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Relates
relation
is related to MAGNOLIA-8638 Getting h2 error while upgrading 6.2.... Closed
Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled

 Description   

If I try to upgrade H2 from 1.4 to 2.1 the following exception occurs. In order to migrate the data follow the steps below:

2022-02-09 20:03:15,780 INFO  info.magnolia.init.MagnoliaServletContextListener : Property sources loaded: [DefaultMagnoliaConfigurationProperties with sources: [SystemPropertySource][EnvironmentPropertySource][ServletContextPropertySource from WEB-INF/config/default/magnolia.properties][ModulePropertiesSource from modules [core, dam, freemarker-support, license, periscope-api, speech-recognizer, categorization-support, ce-product-descriptor, imaging-support, publishing-core, resource-loader, rest-integration, config, i18n, publishing-receiver, publishing-sender, publishing-transactional-core, rest-services, cache, content-types, periscope-core, publishing-transactional-receiver, publishing-transactional-sender, rendering, ui-framework-core, virtual-uri, dam-jcr, ehcache3, imaging, link-unfurl, periscope-result-ranker, tasks-app, templating, ui-framework-jcr, block-templating, dependencies-core, resources, ui-framework, diff, magnolia-resources-templating, scheduler, site, ui-mediaeditor, dam-templating, magnolia-usage-metrics, mte-imaging, spa-rendering, task-management, admincentral, ui-admincentral, about-app, backup, cache-app, content-importer, dam-imaging, definitions-app, groovy, jcr-browser, log-tools, messages-app, pages, pages-app, password-manager, publishing-app, resources-app, security-app, tools, ui-contentapp, dam-app, dam-app-core, diff-pages-app-integration, diff-pages-integration, enterprise, jcr-tools, ldap, mail, publishing-transactional-app, rest-client, rest-content-delivery, site-app, soft-locking, workflow, workflow-compatibility, cache-browser-app, cookie-manager, dam-app-jcr, dependencies, ee-pro-product-descriptor, form, mte, multisite, personalization-core, rest-client-app, rest-client-ui, translation, visitor-manager, workflow-jbpm, advanced-cache, advanced-cache-personalization, campaign-publisher, categorization, javascript-models, marketing-tags, mtk, mtk2, personalization-components, personalization-integration, personalization-preview-app, privacy-ui, rssaggregator, translation-pages-integration, advanced-cache-app, advanced-cache-dpc, categories-app, categories-app-compatibility, categorization-rss-integration, content-editor, content-tags-core, lang-cs, lang-de, lang-es, lang-fi, lang-fr, lang-hr, lang-id, lang-it, lang-ja, lang-nl, lang-no, lang-pl, lang-pt, lang-pt_BR, lang-ru, lang-sk, lang-sq, lang-sv, lang-tr, lang-zh_CN, lang-zh_TW, personalization-components-compatibility, personalization-pages, personalization-personas-app, content-dependencies-ui, content-tags-ui-compatibility, personalization-segmentation-app, sitemesh, stories-app, workflow-pages, content-tags-ui, personalization-traits, lang-ko, webapp]][InitPathsPropertySource]]
---------------------------------------------
MAGNOLIA LICENSE
---------------------------------------------
Version number : 6.2.16
Core version   : 6.2.16
Build          : 28. January 2022 (rev. 974feb5561f5c9fff8bcd91d98f960beedf7e571 of UNKNOWN)
Edition        : Magnolia DX Core
Provider       : Magnolia International Ltd. (info@magnolia-cms.com)
2022-02-09 20:03:15,808 INFO  info.magnolia.cms.beans.config.ConfigLoader       : Initializing content repositories
2022-02-09 20:03:15,808 INFO  info.magnolia.repository.DefaultRepositoryManager : Loading JCR
2022-02-09 20:03:15,820 INFO  info.magnolia.repository.DefaultRepositoryManager : Loading JCR magnolia
2022-02-09 20:03:15,902 INFO  info.magnolia.jackrabbit.ProviderImpl             : Loading repository at /Users/rich.gange/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/dx-core-webapp/repositories/magnolia (config file: /Users/rich.gange/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/dx-core-webapp/WEB-INF/config/repo-conf/jackrabbit-bundle-h2-search.xml) - cluster id: "<unset>"
2022-02-09 20:03:16,114 WARN  org.apache.jackrabbit.core.util.RepositoryLock    : Existing lock file /Users/rich.gange/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/dx-core-webapp/repositories/magnolia/.lock detected. Repository was not shut down properly.
2022-02-09 20:03:20,496 ERROR org.apache.jackrabbit.core.RepositoryImpl         : failed to start Repository: Cannot instantiate persistence manager org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager
javax.jcr.RepositoryException: Cannot instantiate persistence manager org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager
	at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1380) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.createVersionManager(RepositoryImpl.java:513) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.<init>(RepositoryImpl.java:314) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.create(RepositoryImpl.java:616) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.jndi.BindableRepository.createRepository(BindableRepository.java:141) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.jndi.BindableRepository.init(BindableRepository.java:117) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.jndi.BindableRepository.<init>(BindableRepository.java:106) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.jndi.BindableRepositoryFactory.getObjectInstance(BindableRepositoryFactory.java:52) [jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.jndi.RegistryHelper.registerRepository(RegistryHelper.java:74) [jackrabbit-core-2.20.4.jar:2.20.4]
	at info.magnolia.jackrabbit.ProviderImpl.init(ProviderImpl.java:246) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.repository.DefaultRepositoryManager.loadRepository(DefaultRepositoryManager.java:259) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.repository.DefaultRepositoryManager.loadRepositories(DefaultRepositoryManager.java:222) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.repository.DefaultRepositoryManager.init(DefaultRepositoryManager.java:121) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.cms.beans.config.ConfigLoader.load(ConfigLoader.java:136) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.init.MagnoliaServletContextListener$1.doExec(MagnoliaServletContextListener.java:259) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:407) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:404) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:378) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.init.MagnoliaServletContextListener.startServer(MagnoliaServletContextListener.java:256) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:182) [magnolia-core-6.2.16.jar:?]
	at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:128) [magnolia-core-6.2.16.jar:?]
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4768) [catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230) [catalina.jar:9.0.50]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.50]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) [catalina.jar:9.0.50]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1388) [catalina.jar:9.0.50]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_261]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.50]
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [?:1.8.0_261]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:921) [catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) [catalina.jar:9.0.50]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.50]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) [catalina.jar:9.0.50]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1388) [catalina.jar:9.0.50]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_261]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.50]
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [?:1.8.0_261]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:921) [catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263) [catalina.jar:9.0.50]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:437) [catalina.jar:9.0.50]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.50]
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:934) [catalina.jar:9.0.50]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) [catalina.jar:9.0.50]
	at org.apache.catalina.startup.Catalina.start(Catalina.java:772) [catalina.jar:9.0.50]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_261]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_261]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_261]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_261]
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) [bootstrap.jar:9.0.50]
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476) [bootstrap.jar:9.0.50]
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (General error: "The write format 1 is smaller than the supported format 2 [2.1.210/5]" [50000-210])
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.getExtraNameCharacters(ConnectionHelper.java:185) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.prepareDbIdentifier(ConnectionHelper.java:140) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.init(BundleDbPersistenceManager.java:542) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager.init(H2PersistenceManager.java:80) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1376) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	... 50 more
Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "The write format 1 is smaller than the supported format 2 [2.1.210/5]" [50000-210]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.message.DbException.get(DbException.java:216) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.db.Store.convertMVStoreException(Store.java:166) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.db.Store.<init>(Store.java:140) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Database.<init>(Database.java:324) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.openSession(Engine.java:92) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.openSession(Engine.java:222) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.createSession(Engine.java:201) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.Driver.connect(Driver.java:59) ~[h2-2.1.210.jar:2.1.210]
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.getExtraNameCharacters(ConnectionHelper.java:185) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.prepareDbIdentifier(ConnectionHelper.java:140) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.init(BundleDbPersistenceManager.java:542) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager.init(H2PersistenceManager.java:80) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1376) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	... 50 more
Caused by: org.h2.mvstore.MVStoreException: The write format 1 is smaller than the supported format 2 [2.1.210/5]
	at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.MVStore.getUnsupportedWriteFormatException(MVStore.java:1059) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.MVStore.readStoreHeader(MVStore.java:878) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.MVStore.<init>(MVStore.java:455) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4056) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.mvstore.db.Store.<init>(Store.java:129) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Database.<init>(Database.java:324) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.openSession(Engine.java:92) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.openSession(Engine.java:222) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.Engine.createSession(Engine.java:201) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) ~[h2-2.1.210.jar:2.1.210]
	at org.h2.Driver.connect(Driver.java:59) ~[h2-2.1.210.jar:2.1.210]
	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) ~[commons-dbcp-1.4.jar:1.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.getExtraNameCharacters(ConnectionHelper.java:185) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.util.db.ConnectionHelper.prepareDbIdentifier(ConnectionHelper.java:140) ~[jackrabbit-data-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.BundleDbPersistenceManager.init(BundleDbPersistenceManager.java:542) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager.init(H2PersistenceManager.java:80) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	at org.apache.jackrabbit.core.RepositoryImpl.createPersistenceManager(RepositoryImpl.java:1376) ~[jackrabbit-core-2.20.4.jar:2.20.4]
	... 50 more

Workaround
Migrate the data from H2 1.4 to derby then copy from derby to H2 2.1

  1. Install Backup Extended
  2. Create a backup into Derby format.
  3. Shut down.
  4. Replace the H2 1.4 repo with the new Derby repo created by the backup.
  5. Delete the index folder from each workspace of the Derby repo.
  6. Remove the H2 1.4 jar and replace it with H2 2.1 jar.
  7. Start the instance.
  8. Create a backup into the H2 format.
  9. Shut down.
  10. Replace the Derby repo with the new H2 2.1 repo.
  11. Delete the index folder from each workspace of the H2 2.1 repo.
  12. Start the instance.

Generated at Mon Feb 12 04:31:32 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.