.
Problem
When running a Lifecycle instance with an H2 database (no issues occur with PostgreSQL), the following operations result in failures and unexpected UI behavior:
-
Renaming an organization that has a sub-organization.
-
Moving an organization that has a sub-organization (even clicking retry may sometimes work after an initial failure).
These failures may lead to:
-
A blank UI page when viewing an organization's details.
-
"Insufficient permissions" errors.
will fail(even clicking retry may work for 2 after it fails) and lead to unexpected UI behavior(blank UI page for an organization's details or Insufficient permission). We have raised internal JIRA tickets to address these issues.
We have raised internal JIRA tickets to address these issues. Until a permanent fix is available, please avoid performing these actions. This article provides steps to address unexpected UI behavior if these actions have already been performed. Other operations may also trigger similar issues, so if you encounter the same UI problems, the solution outlined here may help.
Additionally, the operations mentioned above may generate the following error in the logs:
com.sonatype.insight.jaxrs.error.ErrorResponseGenerator - 500 org.apache.openjpa.lib.jdbc.ReportingSQLException: Timeout trying to lock table "organization_ancestor"; SQL statement:
SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ? [50200-196] {prepstmnt 1882621175 SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ?} [code=50200, state=HYT00] (ID 2ba4c735e0534ab0)
org.apache.openjpa.persistence.PersistenceException: org.apache.openjpa.lib.jdbc.ReportingSQLException: Timeout trying to lock table "organization_ancestor"; SQL statement:
SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ? [50200-196] {prepstmnt 1882621175 SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ?} [code=50200, state=HYT00]
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1099)
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:992)
at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:113)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:253)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3646)
at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1351)
at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:1047)
at com.sonatype.insight.dataaccess.TransactionContext.merge(TransactionContext.java:40)
at com.sonatype.insight.dataaccess.AbstractDAO.delete(AbstractDAO.java:242)
at com.sonatype.insight.brain.dataaccess.AbstractSqlDAO.delete(AbstractSqlDAO.java:114)
at com.sonatype.insight.brain.dataaccess.AbstractOperationalSqlDAO.delete(AbstractOperationalSqlDAO.java:78)
at com.sonatype.insight.brain.dataaccess.AbstractOperationalSqlDAO.delete(AbstractOperationalSqlDAO.java:27)
at com.sonatype.insight.dataaccess.AbstractDAO.delete(AbstractDAO.java:249)
at com.sonatype.insight.brain.dataaccess.OrganizationDAO.updateOrganizationAncestors(OrganizationDAO.java:405)
at com.sonatype.insight.brain.dataaccess.OrganizationDAO.update(OrganizationDAO.java:202)
at com.sonatype.insight.brain.dataaccess.OrganizationDAO.update(OrganizationDAO.java:52)
at com.sonatype.insight.dataaccess.AbstractDAO.update(AbstractDAO.java:236)
at com.sonatype.insight.brain.organization.MoveOrganizationService.moveOrganizationCheckDestinationWritePermissions(MoveOrganizationService.java:175)
at org.apache.shiro.guice.aop.AopAllianceMethodInvocationAdapter.proceed(AopAllianceMethodInvocationAdapter.java:49)
at com.sonatype.insight.brain.security.AuthorizeMethodInterceptor.invoke(AuthorizeMethodInterceptor.java:57)
at org.apache.shiro.guice.aop.AopAllianceMethodInterceptorAdapter.invoke(AopAllianceMethodInterceptorAdapter.java:36)
at com.sonatype.insight.brain.organization.MoveOrganizationService.moveOrganization(MoveOrganizationService.java:153)
at org.apache.shiro.guice.aop.AopAllianceMethodInvocationAdapter.proceed(AopAllianceMethodInvocationAdapter.java:49)
at com.sonatype.insight.brain.security.AuthorizeMethodInterceptor.invoke(AuthorizeMethodInterceptor.java:57)
at org.apache.shiro.guice.aop.AopAllianceMethodInterceptorAdapter.invoke(AopAllianceMethodInterceptorAdapter.java:36)
at com.sonatype.insight.brain.api.v2.ApiOrganizationResourceV2.moveOrganization(ApiOrganizationResourceV2.java:185)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:35)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:47)
at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:41)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.service.CspFrameHeaderFilter.doFilter(CspFrameHeaderFilter.java:46)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.security.AuthenticationLoggingFilter.doFilter(AuthenticationLoggingFilter.java:57)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at com.sonatype.insight.brain.security.ApiAccessControlFilter.doFilter(ApiAccessControlFilter.java:65)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:147)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at com.sonatype.insight.brain.security.ClientIPAddressFilter.doFilter(ClientIPAddressFilter.java:86)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.security.ContentTypeOptionsHeaderFilter.doFilter(ContentTypeOptionsHeaderFilter.java:41)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.security.HttpHeaderValidatorFilter.doFilter(HttpHeaderValidatorFilter.java:75)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.audit.AuditFilter.doFilter(AuditFilter.java:91)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.service.BaseUrlFilter.doFilter(BaseUrlFilter.java:40)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.service.ServerHeaderFilter.doFilter(ServerHeaderFilter.java:45)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.sonatype.insight.brain.shutdown.ActiveRequestCounterFilter.doFilter(ActiveRequestCounterFilter.java:57)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.eclipse.jetty.servlets.HeaderFilter.doFilter(HeaderFilter.java:117)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:89)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at com.sonatype.insight.brain.filter.ThrowableHandler.handle(ThrowableHandler.java:41)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:322)
at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:52)
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722)
at io.dropwizard.jetty.ZipExceptionHandlingGzipHandler.handle(ZipExceptionHandlingGzipHandler.java:26)
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:54)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:181)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.RuntimeException: org.apache.openjpa.lib.jdbc.ReportingSQLException: Timeout trying to lock table "organization_ancestor"; SQL statement:
SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ? [50200-196] {prepstmnt 1882621175 SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ?} [code=50200, state=HYT00]
at org.apache.openjpa.jdbc.kernel.FinderQueryImpl.execute(FinderQueryImpl.java:175)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getInitializeStateResult(JDBCStoreManager.java:557)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:370)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:325)
at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:123)
at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:59)
at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1118)
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1076)
... 173 common frames omitted
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Timeout trying to lock table "organization_ancestor"; SQL statement:
SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ? [50200-196] {prepstmnt 1882621175 SELECT t0.ancestor_distance, t0.ancestor_id, t0.organization_id FROM insight_brain_ods.organization_ancestor t0 WHERE t0.organization_ancestor_id = ?} [code=50200, state=HYT00]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:58)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1171)
at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:300)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1870)
at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:290)
at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:541)
at org.apache.openjpa.jdbc.kernel.FinderQueryImpl.execute(FinderQueryImpl.java:167)
... 180 common frames omitted
Symptoms
Assume a Lifecycle instance has the following organizational hierarchy:
ROOT ORGANIZATION
|- org1
|-org1-suborg-1
|- org2
When attempting to rename org1
:
-
The name does not change, even though no error appears in the UI.
When attempting to move org1
under org2
:
-
The action fails with the error:
An error occurred saving data. Internal Server Error (ID xxxxxxx)
Both operations can lead to unexpected UI issues, including:
-
Blank Page When Accessing an Organization
-
The details of
org1
ororg2
are missing.
-
-
"An error occurred loading data. Insufficient permissions."
-
Attempting to access a sub-organization results in an "Insufficient permissions" error.
-
- An Existing Organization Disappears from the UI
Possible causes
As the logs indicate, the root cause is related to the H2 database handling these operations incorrectly.
Solution
To resolve the issue, follow these steps. To avoid such problems, please migrate to PostgreSQL.
-
Verify the issue with an administrator account
-
Log in with the default admin user to check if the UI issues persist.
-
-
Stop the Lifecycle instance and back up the database
-
Before proceeding, create a backup of your H2 database to prevent data loss.
-
-
Run the fix script on the H2 database
-
-
Download the fix-blank-page-or-insufficient-permissions-when-accessing-an-org-in-iq-1.0.jar file
-
Execute the following command against the H2 database (assuming its path is
/opt/sonatype-work/data/ods.h2.db
)
-
java -jar fix-blank-page-or-insufficient-permissions-when-accessing-an-org-in-iq-1.0.jar /opt/sonatype-work/data/ods
Important: The path should be
/opt/sonatype-work/data/ods
(without.h2.db
).-
-
A log file,
fix-blank-page-or-insufficient-permissions.log
, will be generated for reference.
-
-
-
Restart the Lifecycle instance
-
After running the fix, start the Lifecycle instance.
-
Verify if the UI behavior has returned to normal (i.e., no blank pages or "Insufficient permissions" errors).
-
If the issue persists, contact support for further assistance.