Upgrade Failed: 7.7.2 -> 7.9.2 - Configuration parsing failed (OD-1086)
Released
jbauer opened 1 year ago

During upgrade I get the exception below. In OneDev hibernate configuration file I take advantage of Postgres JDBC driver feature to support multiple servers in the connection string. This is useful if you have a primary / secondary postgres cluster because the Postgres JDBC driver will then automatically connect to the primary read/write server (targetServerType=master option in connection string). This used to work in OneDev 7.7.2 and now parsing of configuration file fails since the port of the first server contains the second server, see exception.

hibernate.dialect=io.onedev.server.persistence.PostgreSQLDialect
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.connection.url=jdbc:postgresql://services-pg14-1:5432,services-pg14-2:5432/onedev?ApplicationName=OneDev&tcpKeepAlive=true&targetServerType=master&sslmode=require

Exception

INFO  - >>> INFO  - Starting server...
INFO  - >>> ERROR - Error booting application
INFO  - >>> com.google.inject.CreationException: Unable to create injector, see the following errors:

INFO  - >>> 
INFO  - >>> 1) [Guice/ErrorInjectingConstructor]: NumberFormatException: For input string: "5432,services-pg14-2:5432"
INFO  - >>>   at DefaultServerConfig.<init>(DefaultServerConfig.java:54)
INFO  - >>>   at DefaultServerConfig.class(DefaultServerConfig.java:23)
INFO  - >>>   while locating DefaultServerConfig
INFO  - >>>   at DefaultClusterManager.<init>(DefaultClusterManager.java:60)
INFO  - >>>       \_ for 1st parameter
INFO  - >>>   at DefaultClusterManager.class(DefaultClusterManager.java:45)
INFO  - >>>   while locating DefaultClusterManager
INFO  - >>>   at DefaultSessionFactoryManager.<init>(DefaultSessionFactoryManager.java:41)
INFO  - >>>       \_ for 2nd parameter
INFO  - >>>   at DefaultSessionFactoryManager.class(DefaultSessionFactoryManager.java:41)
INFO  - >>>   while locating DefaultSessionFactoryManager
INFO  - >>>   at DefaultSessionManager.<init>(DefaultSessionManager.java:61)
INFO  - >>>       \_ for 3rd parameter
INFO  - >>>   at DefaultSessionManager.class(DefaultSessionManager.java:22)
INFO  - >>>   while locating DefaultSessionManager
INFO  - >>>   at DefaultTransactionManager.<init>(DefaultTransactionManager.java:53)
INFO  - >>>       \_ for 1st parameter
INFO  - >>>   at DefaultTransactionManager.class(DefaultTransactionManager.java:44)
INFO  - >>>   while locating DefaultTransactionManager
INFO  - >>>   at TransactionInterceptor.transactionManager(TransactionInterceptor.java:12)
INFO  - >>>       \_ for field transactionManager
INFO  - >>>   at CoreModule.configurePersistence(CoreModule.java:766)
INFO  - >>>       \_ installed by: Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> Modules$OverrideModule -> CoreModule

INFO  - >>> 
INFO  - >>> Learn more:
INFO  - >>>   https://github.com/google/guice/wiki/ERROR_INJECTING_CONSTRUCTOR
INFO  - >>> Caused by: NumberFormatException: For input string: "5432,services-pg14-2:5432"
INFO  - >>> 	at java.base/NumberFormatException.forInputString(NumberFormatException.java:65)
INFO  - >>> 	at java.base/Integer.parseInt(Integer.java:652)
INFO  - >>> 	at java.base/Integer.parseInt(Integer.java:770)
INFO  - >>> 	at DefaultServerConfig.<init>(DefaultServerConfig.java:112)
INFO  - >>> 	at DefaultServerConfig$$FastClassByGuice$$138445434.GUICE$TRAMPOLINE(<generated>)
INFO  - >>> 	at DefaultServerConfig$$FastClassByGuice$$138445434.apply(<generated>)
INFO  - >>> 	at DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
INFO  - >>> 	at ConstructorInjector.provision(ConstructorInjector.java:114)
INFO  - >>> 	at ConstructorInjector.construct(ConstructorInjector.java:91)
INFO  - >>> 	at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
INFO  - >>> 	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
INFO  - >>> 	at SingletonScope$1.get(SingletonScope.java:169)
INFO  - >>> 	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
INFO  - >>> 	at FactoryProxy.get(FactoryProxy.java:60)
INFO  - >>> 	at SingleParameterInjector.inject(SingleParameterInjector.java:40)
INFO  - >>> 	at SingleParameterInjector.getAll(SingleParameterInjector.java:60)
INFO  - >>> 	at ConstructorInjector.provision(ConstructorInjector.java:113)
INFO  - >>> 	at ConstructorInjector.construct(ConstructorInjector.java:91)
INFO  - >>> 	at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
INFO  - >>> 	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
INFO  - >>> 	at SingletonScope$1.get(SingletonScope.java:169)
INFO  - >>> 	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
INFO  - >>> 	at FactoryProxy.get(FactoryProxy.java:60)
INFO  - >>> 	at SingleParameterInjector.inject(SingleParameterInjector.java:40)
INFO  - >>> 	at SingleParameterInjector.getAll(SingleParameterInjector.java:60)
INFO  - >>> 	at ConstructorInjector.provision(ConstructorInjector.java:113)
INFO  - >>> 	at ConstructorInjector.construct(ConstructorInjector.java:91)
INFO  - >>> 	at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
INFO  - >>> 	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
INFO  - >>> 	at SingletonScope$1.get(SingletonScope.java:169)
INFO  - >>> 	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
INFO  - >>> 	at FactoryProxy.get(FactoryProxy.java:60)
INFO  - >>> 	at SingleParameterInjector.inject(SingleParameterInjector.java:40)
INFO  - >>> 	at SingleParameterInjector.getAll(SingleParameterInjector.java:60)
INFO  - >>> 	at ConstructorInjector.provision(ConstructorInjector.java:113)
INFO  - >>> 	at ConstructorInjector.construct(ConstructorInjector.java:91)
INFO  - >>> 	at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
INFO  - >>> 	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
INFO  - >>> 	at SingletonScope$1.get(SingletonScope.java:169)
INFO  - >>> 	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
INFO  - >>> 	at FactoryProxy.get(FactoryProxy.java:60)
INFO  - >>> 	at SingleParameterInjector.inject(SingleParameterInjector.java:40)
INFO  - >>> 	at SingleParameterInjector.getAll(SingleParameterInjector.java:60)
INFO  - >>> 	at ConstructorInjector.provision(ConstructorInjector.java:113)
INFO  - >>> 	at ConstructorInjector.construct(ConstructorInjector.java:91)
INFO  - >>> 	at ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:300)
INFO  - >>> 	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
INFO  - >>> 	at SingletonScope$1.get(SingletonScope.java:169)
INFO  - >>> 	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
INFO  - >>> 	at FactoryProxy.get(FactoryProxy.java:60)
INFO  - >>> 	at SingleFieldInjector.inject(SingleFieldInjector.java:50)
INFO  - >>> 	at MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:146)
INFO  - >>> 	at MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:101)
INFO  - >>> 	at Initializer$InjectableReference.get(Initializer.java:245)
INFO  - >>> 	at Initializer.injectAll(Initializer.java:140)
INFO  - >>> 	at InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
INFO  - >>> 	at InternalInjectorCreator.build(InternalInjectorCreator.java:113)
INFO  - >>> 	at Guice.createInjector(Guice.java:87)
INFO  - >>> 	at Guice.createInjector(Guice.java:69)
INFO  - >>> 	at Guice.createInjector(Guice.java:59)
INFO  - >>> 	at AppLoader.start(AppLoader.java:52)
INFO  - >>> 	at Bootstrap.main(Bootstrap.java:204)
jbauer commented 1 year ago

As a workaround I have manually restored the backup taken by the upgrade procedure and modified the configuration file to only contain the current primary postgres server. This must only be a temporary solution given that it disables database high availability.

Then I restarted the OneDev docker container and the upgrade did restart and succeeded.

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 #3266 is successful

issue 1 of 1
Type
Bug
Priority
Critical
Assignee
Affected Versions
Not Found
Issue Votes (0)
Watchers (4)
Reference
OD-1086
Please wait...
Page is in error, reload to recover