Upgrade Failed: 7.7.2 -> 7.9.2 - Configuration parsing failed (OD-1086)
jbauer opened 3 years 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 3 years 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' 3 years ago
    Previous Value Current Value
    Open
    Closed
  • OneDev commented 3 years ago

    State changed as code fixing the issue is committed

  • OneDev changed state to 'Released' 3 years ago
    Previous Value Current Value
    Closed
    Released
  • OneDev commented 3 years ago

    State changed as build #3266 is successful

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