-
Bug
-
Resolution: Fixed
-
Low
-
Severity 3 - Minor
-
The error is "ERROR: cannot execute UPDATE in a read-only transaction", because of VisiblePagesFilterQuery, which has a new call to flush (by setting the query to FlushMode.ALWAYS)
https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence/pull-requests/1902/diff
This affects custom content REST API calls from the Cloudo for Confluence connect add-on.
Full stack trace:
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1411) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1391) at org.hibernate.query.internal.NativeQueryImpl.beforeQuery(NativeQueryImpl.java:237) at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1396) at org.hibernate.Query.getResultList(Query.java:417) at com.atlassian.confluence.impl.pages.persistence.dao.hibernate.VisiblePageDescendantsQuery.getVisibleDescendants(VisiblePageDescendantsQuery.java:54) at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernatePageDao.lambda$getVisibleDescendants$9(HibernatePageDao.java:694) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernatePageDao.getVisibleDescendants(HibernatePageDao.java:692) at com.atlassian.confluence.pages.persistence.dao.hibernate.HibernatePageDao.getVisibleChildren(HibernatePageDao.java:765) at com.atlassian.confluence.pages.persistence.dao.hibernate.CachingPageDao.getVisibleChildren(CachingPageDao.java:411) at com.atlassian.confluence.pages.DefaultPageManager.getChildren(DefaultPageManager.java:698) ... 3 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:16) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at com.atlassian.confluence.util.profiling.ConfluenceMonitoringMethodInterceptor.invoke(ConfluenceMonitoringMethodInterceptor.java:38) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) at com.sun.proxy.$Proxy127.getChildren(Unknown Source) at com.atlassian.confluence.api.impl.service.content.typebinding.PageContentTypeApiSupport.lambda$getChildrenForThisType$0(PageContentTypeApiSupport.java:90) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.executeBatch(PaginationServiceImpl.java:161) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.lambda$doRequestInTransaction$1(PaginationServiceImpl.java:143) at com.atlassian.confluence.api.impl.ReadOnlyAndReadWriteTransactionConversionTemplate.executeInReadOnly(ReadOnlyAndReadWriteTransactionConversionTemplate.java:38) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.doRequestInTransaction(PaginationServiceImpl.java:138) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.doPaginationListRequest(PaginationServiceImpl.java:70) at com.atlassian.confluence.api.impl.service.content.typebinding.PageContentTypeApiSupport.getChildrenForThisType(PageContentTypeApiSupport.java:93) at com.atlassian.confluence.api.impl.service.content.typebinding.PageContentTypeApiSupport.getChildrenForThisType(PageContentTypeApiSupport.java:50) at com.atlassian.confluence.content.apisupport.BaseContentTypeApiSupport.getChildren(BaseContentTypeApiSupport.java:53) at com.atlassian.confluence.api.impl.service.content.factory.ChildSupport.getChildrenList(ChildSupport.java:175) at com.atlassian.confluence.api.impl.service.content.factory.ChildSupport.getChildrenForExpansions(ChildSupport.java:201) at com.atlassian.confluence.api.impl.service.content.factory.ChildSupport.getChildrenMap(ChildSupport.java:122) at com.atlassian.confluence.api.impl.service.content.factory.ChildSupport.getChildrenMap(ChildSupport.java:91) at com.atlassian.confluence.api.impl.service.content.factory.ChildSupport.getChildrenMap(ChildSupport.java:69) at com.atlassian.confluence.api.impl.service.content.factory.ChildContentFactory.buildFrom(ChildContentFactory.java:35) at com.atlassian.confluence.api.impl.service.content.factory.ContentFactory.addCommonFieldsToBuilder(ContentFactory.java:219) at com.atlassian.confluence.api.impl.service.content.factory.ContentFactory.buildersFrom(ContentFactory.java:162) at com.atlassian.confluence.api.impl.service.content.factory.ContentFactory.buildFrom(ContentFactory.java:115) at com.atlassian.confluence.api.impl.service.content.finder.CustomContentAndAbstractPageFetcher.lambda$doPaginationRequest$0(CustomContentAndAbstractPageFetcher.java:166) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.executeBatch(PaginationServiceImpl.java:167) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.lambda$doRequestInTransaction$1(PaginationServiceImpl.java:143) at com.atlassian.confluence.api.impl.ReadOnlyAndReadWriteTransactionConversionTemplate.executeInReadOnly(ReadOnlyAndReadWriteTransactionConversionTemplate.java:38) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.doRequestInTransaction(PaginationServiceImpl.java:138) at com.atlassian.confluence.api.impl.pagination.PaginationServiceImpl.doPaginationListRequest(PaginationServiceImpl.java:70) at com.atlassian.confluence.api.impl.service.content.finder.CustomContentAndAbstractPageFetcher.doPaginationRequest(CustomContentAndAbstractPageFetcher.java:166) at com.atlassian.confluence.api.impl.service.content.finder.CustomContentAndAbstractPageFetcher.fetchAllContent(CustomContentAndAbstractPageFetcher.java:160) at com.atlassian.confluence.api.impl.service.content.finder.CustomContentAndAbstractPageFetcher.fetchByCommonFinderProperties(CustomContentAndAbstractPageFetcher.java:96) at com.atlassian.confluence.api.impl.service.content.finder.CustomContentAndAbstractPageFetcher.fetchPages(CustomContentAndAbstractPageFetcher.java:63) at com.atlassian.confluence.api.impl.service.content.finder.ContentFinderFactory$ContentFinderImpl.fetchMany(ContentFinderFactory.java:146) ... 3 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at com.atlassian.confluence.osgi.HostClassLoaderMethodInterceptor.invoke(HostClassLoaderMethodInterceptor.java:23) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) at com.sun.proxy.$Proxy2677.fetchMany(Unknown Source) at com.atlassian.confluence.plugins.restapi.resources.ContentResource.getContent(ContentResource.java:280) ... 3 filtered at java.lang.reflect.Method.invoke(Method.java:498) ... 18 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:159) ... 1 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:69) ... 20 filtered at com.atlassian.confluence.efi.filters.OnboardingFilter.doFilter(OnboardingFilter.java:63) ... 29 filtered at com.atlassian.confluence.util.profiling.ProfilingSiteMeshFilter.doFilter(ProfilingSiteMeshFilter.java:50) ... 4 filtered at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.handleScopedRequest(ApiScopingFilter.java:98) at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:77) ... 3 filtered at com.atlassian.plugins.hipchat.rest.HipChatCapabilitiesFilter.doFilter(HipChatCapabilitiesFilter.java:88) ... 3 filtered at com.atlassian.confluence.util.profiling.ConfluenceActivityFilter.doFilter(ConfluenceActivityFilter.java:39) ... 10 filtered at com.atlassian.confluence.cache.TransactionalCacheFactoryCleanupFilter.doFilter(TransactionalCacheFactoryCleanupFilter.java:23) ... 3 filtered at com.atlassian.confluence.web.filter.TranslationModeFilter.doFilter(TranslationModeFilter.java:39) ... 7 filtered at com.atlassian.confluence.util.LoggingContextFilter.doFilter(LoggingContextFilter.java:34) ... 3 filtered at com.atlassian.confluence.util.UserNameHeaderFilter.doFilter(UserNameHeaderFilter.java:25) ... 3 filtered at com.atlassian.confluence.web.filter.MauEventFilter.doFilter(MauEventFilter.java:39) ... 3 filtered at com.atlassian.confluence.web.filter.ConfluenceTimeoutFilter.doFilter(ConfluenceTimeoutFilter.java:61) ... 3 filtered at com.atlassian.confluence.web.filter.experiments.ConfluenceExperimentsFilter.doFilter(ConfluenceExperimentsFilter.java:90) ... 3 filtered at com.atlassian.confluence.web.filter.VertigoFeatureFilter.doFilter(VertigoFeatureFilter.java:51) ... 3 filtered at com.atlassian.confluence.web.filter.ConfluenceSecurityFilter.doFilterWithExcludedPaths(ConfluenceSecurityFilter.java:47) at com.atlassian.confluence.web.filter.ConfluenceSecurityFilter.lambda$doFilter$0(ConfluenceSecurityFilter.java:39) at com.atlassian.confluence.impl.servlet.ExcludedPathsHelper.doFilter(ExcludedPathsHelper.java:63) at com.atlassian.confluence.web.filter.ConfluenceSecurityFilter.doFilter(ConfluenceSecurityFilter.java:38) ... 2 filtered at com.atlassian.confluence.web.filter.ThreadLocalCacheFilter.doFilter(ThreadLocalCacheFilter.java:28) ... 3 filtered at com.atlassian.confluence.util.AbstractBootstrapHotSwappingFilter.doFilter(AbstractBootstrapHotSwappingFilter.java:31) ... 4 filtered at com.atlassian.confluence.web.filter.ConfluenceLoginFilter.lambda$doFilter$0(ConfluenceLoginFilter.java:32) at com.atlassian.confluence.impl.servlet.ExcludedPathsHelper.doFilter(ExcludedPathsHelper.java:63) at com.atlassian.confluence.web.filter.ConfluenceLoginFilter.doFilter(ConfluenceLoginFilter.java:31) ... 8 filtered at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:39) ... 20 filtered at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) at com.atlassian.confluence.web.filter.ConfluenceOpenSessionInViewFilter.doFilterInternal(ConfluenceOpenSessionInViewFilter.java:41) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ... 11 filtered at com.atlassian.plugin.connect.plugin.auth.oauth2.DefaultSalAuthenticationFilter.doFilter(DefaultSalAuthenticationFilter.java:76) ... 3 filtered at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.actAsAddonUser(ThreeLeggedAuthFilter.java:228) at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.processAddonRequest(ThreeLeggedAuthFilter.java:161) at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:106) ... 3 filtered at com.atlassian.confluence.plugins.rest.asap.servlet.AsapAuthenticationFilter.doFilter(AsapAuthenticationFilter.java:71) ... 9 filtered at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32) ... 3 filtered at com.atlassian.confluence.web.filter.ConfluenceTimingFilter.doFilter(ConfluenceTimingFilter.java:46) ... 7 filtered at com.atlassian.confluence.extra.webdav.servlet.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:43) ... 6 filtered at com.atlassian.confluence.internal.web.filter.spring.IgnoreWebAsyncManagerFilter.doFilter(IgnoreWebAsyncManagerFilter.java:59) ... 2 filtered at com.atlassian.confluence.web.filter.validateparam.RequestParamValidationFilter.doFilter(RequestParamValidationFilter.java:51) ... 3 filtered at com.atlassian.confluence.plugin.servlet.filter.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:75) ... 2 filtered at com.atlassian.confluence.web.filter.LanguageExtractionFilter.doFilter(LanguageExtractionFilter.java:45) ... 3 filtered at com.atlassian.confluence.web.filter.ResponseOutputStreamFilter.doFilter(ResponseOutputStreamFilter.java:23) ... 4 filtered at com.atlassian.confluence.web.ConfluenceJohnsonFilter.doFilter(ConfluenceJohnsonFilter.java:32) ... 2 filtered at com.atlassian.confluence.impl.hibernate.cache.metrics.HibernateCacheMetricsLoggingFilter.doFilter(HibernateCacheMetricsLoggingFilter.java:61) ... 3 filtered at com.atlassian.confluence.web.filter.BandanaPrefetchFilter.doFilter(BandanaPrefetchFilter.java:49) ... 3 filtered at com.atlassian.confluence.impl.vcache.VCacheRequestContextFilter.lambda$doFilter$5(VCacheRequestContextFilter.java:48) at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:83) at com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:73) at com.atlassian.confluence.impl.vcache.VCacheRequestContextFilter.doFilter(VCacheRequestContextFilter.java:47) ... 3 filtered at com.atlassian.confluence.web.filter.HttpRequestStatsFilter.doFilter(HttpRequestStatsFilter.java:65) ... 2 filtered at com.atlassian.confluence.util.RequestAttributeFilter.doFilter(RequestAttributeFilter.java:61) ... 2 filtered at com.atlassian.confluence.util.AsyncEventTrackerFilter.doFilter(AsyncEventTrackerFilter.java:20) ... 2 filtered at com.github.kristofa.brave.servlet.BraveServletFilter.doFilter(BraveServletFilter.java:59) at com.atlassian.confluence.web.filter.ZipkinTracingFilter.doFilter(ZipkinTracingFilter.java:43) ... 2 filtered at com.atlassian.confluence.util.WorkContextFilter.doFilter(WorkContextFilter.java:91) ... 2 filtered at com.atlassian.confluence.impl.servlet.HoldingUntilStartedFilter.doFilterWithExcludedPaths(HoldingUntilStartedFilter.java:70) at com.atlassian.confluence.impl.servlet.AbstractHttpFilterWithExcludedPaths.lambda$doFilter$0(AbstractHttpFilterWithExcludedPaths.java:34) at com.atlassian.confluence.impl.servlet.ExcludedPathsHelper.doFilter(ExcludedPathsHelper.java:63) at com.atlassian.confluence.impl.servlet.AbstractHttpFilterWithExcludedPaths.doFilter(AbstractHttpFilterWithExcludedPaths.java:33) ... 6 filtered at com.atlassian.confluence.servlet.FourOhFourErrorLoggingFilter.doFilter(FourOhFourErrorLoggingFilter.java:64) ... 2 filtered at com.atlassian.confluence.web.filter.DebugFilter.doFilter(DebugFilter.java:46) ... 13 filtered at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2998) at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3378) at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:145) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:582) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:456) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1405) ... 394 more
Caused by: org.postgresql.util.PSQLException: ERROR: cannot execute UPDATE in a read-only transaction at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.github.gquintana.metrics.proxy.MethodInvocation.proceed(MethodInvocation.java:75) at com.github.gquintana.metrics.sql.PreparedStatementProxyHandler.execute(PreparedStatementProxyHandler.java:55) at com.github.gquintana.metrics.sql.AbstractStatementProxyHandler.invoke(AbstractStatementProxyHandler.java:61) at com.github.gquintana.metrics.proxy.ProxyHandler.invoke(ProxyHandler.java:73) at com.sun.proxy.$Proxy586.executeUpdate(Unknown Source) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at org.vibur.dbcp.proxy.AbstractInvocationHandler.targetInvoke(AbstractInvocationHandler.java:144) at org.vibur.dbcp.proxy.StatementInvocationHandler.processExecute(StatementInvocationHandler.java:141) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:83) at org.vibur.dbcp.proxy.StatementInvocationHandler.restrictedInvoke(StatementInvocationHandler.java:40) at org.vibur.dbcp.proxy.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79) at com.sun.proxy.$Proxy586.executeUpdate(Unknown Source) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) ... 404 more