-
Notifications
You must be signed in to change notification settings - Fork 10.2k
Labels
area/coreIssues or PRs related to the Halo CoreIssues or PRs related to the Halo Corearea/pluginIssues or PRs related to the Plugin ProviderIssues or PRs related to the Plugin Providerkind/bugCategorizes issue or PR as related to a bug.Categorizes issue or PR as related to a bug.priority/critical-urgentHighest priority. Must be actively worked on as someone's top priority right now.Highest priority. Must be actively worked on as someone's top priority right now.
Description
Prerequisites
- I have searched for related issues in the issues list.
- This is an issue with the Halo project itself. If it is not an issue with the project itself(For example: Installation and deployment issues.), it is recommended to submit it in the Discussions.
- I have tried disabling all plugins to rule out plugins as the cause of the problem.
- If it is an issue with plugins and themes, please submit it in the respective plugin and theme repositories.
System information
2.22.4
What is the project operation method?
Docker
What happened?
All requests respond status 500 when a plugin cannot be stopped correctly, please see the following error:
2026-01-04T14:53:50.965+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] org.pf4j.AbstractPluginManager : Stop plugin '[email protected]'
2026-01-04T14:53:50.965+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.halo.app.plugin.DefaultSpringPlugin : Before publishing plugin stopping event for plugin restricted-reading
2026-01-04T14:53:50.965+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Disposing controller run.halo.post.resrict.read.starter.reconciler.RestrictedReplyReconciler
2026-01-04T14:53:50.966+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Controller run.halo.post.resrict.read.starter.reconciler.RestrictedReplyReconciler is disposed
2026-01-04T14:53:50.966+08:00 INFO 7 --- [run.halo.post.resrict.read.starter.reconciler.RestrictedReplyReconciler-1] r.h.a.e.controller.DefaultController : Controller worker run.halo.post.resrict.read.starter.reconciler.RestrictedReplyReconciler-worker-1 is stopped
2026-01-04T14:53:50.966+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Disposing controller run.halo.app.plugin.DefaultReactiveSettingFetcher
2026-01-04T14:53:50.966+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Controller run.halo.app.plugin.DefaultReactiveSettingFetcher is disposed
2026-01-04T14:53:50.967+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Disposing controller run.halo.post.resrict.read.starter.reconciler.PayOrderRecordReconciler
2026-01-04T14:53:50.967+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Controller run.halo.post.resrict.read.starter.reconciler.PayOrderRecordReconciler is disposed
2026-01-04T14:53:50.967+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Disposing controller run.halo.post.resrict.read.starter.reconciler.RestrictedCommentReconciler
2026-01-04T14:53:50.967+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.h.a.e.controller.DefaultController : Controller run.halo.post.resrict.read.starter.reconciler.RestrictedCommentReconciler is disposed
2026-01-04T14:53:50.967+08:00 INFO 7 --- [run.halo.post.resrict.read.starter.reconciler.RestrictedCommentReconciler-1] r.h.a.e.controller.DefaultController : Controller worker run.halo.post.resrict.read.starter.reconciler.RestrictedCommentReconciler-worker-1 is stopped
2026-01-04T14:53:50.975+08:00 WARN 7 --- [run.halo.app.core.reconciler.AnnotationSettingReconciler-1] r.h.a.e.controller.DefaultController : Optimistic locking failure when reconciling request: run.halo.app.core.reconciler.AnnotationSettingReconciler-worker-1/Request[name=annotation-setting-single-page-restrict-read]
2026-01-04T14:53:50.975+08:00 WARN 7 --- [run.halo.app.core.reconciler.ReverseProxyReconciler-1] r.h.a.e.controller.DefaultController : Optimistic locking failure when reconciling request: run.halo.app.core.reconciler.ReverseProxyReconciler-worker-1/Request[name=reverse-proxy-post-restrict-read]
2026-01-04T14:53:50.978+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.halo.app.plugin.DefaultSpringPlugin : Closing plugin context for plugin restricted-reading
2026-01-04T14:53:50.979+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.halo.app.plugin.DefaultSpringPlugin : Closed plugin context for plugin restricted-reading
2026-01-04T14:53:50.979+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] r.halo.app.plugin.DefaultSpringPlugin : Reset plugin context for plugin restricted-reading
2026-01-04T14:53:50.979+08:00 ERROR 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] org.pf4j.AbstractPluginManager : Cannot stop plugin '[email protected]'
org.springframework.dao.OptimisticLockingFailureException: Failed to update versioned entity with id '/registry/annotationsettings/annotation-setting-post-restrict-read' (version '0') in table [extensions]; Was the entity updated or deleted concurrently?
at org.springframework.data.relational.core.mapping.OptimisticLockingUtils.updateFailed(OptimisticLockingUtils.java:47) ~[spring-data-relational-3.5.7.jar:3.5.7]
at org.springframework.data.r2dbc.core.R2dbcEntityTemplate.lambda$doUpdate$13(R2dbcEntityTemplate.java:673) ~[spring-data-r2dbc-3.5.7.jar:3.5.7]
at reactor.core.publisher.ContextPropagation.lambda$contextRestoreForHandle$2(ContextPropagation.java:178) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:113) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoUsingWhen$MonoUsingWhenSubscriber.deferredComplete(MonoUsingWhen.java:268) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxUsingWhen$CommitInner.onComplete(FluxUsingWhen.java:532) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:2230) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterSubscriber.onComplete(FluxFilter.java:166) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.onComplete(FluxFilter.java:300) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:275) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2572) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.request(FluxMap.java:295) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.request(FluxFilter.java:321) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterSubscriber.request(FluxFilter.java:186) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:164) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onSubscribe(MonoIgnoreElements.java:72) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapSubscriber.onSubscribe(FluxMap.java:92) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterSubscriber.onSubscribe(FluxFilter.java:85) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.onSubscribe(FluxFilter.java:219) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onSubscribe(FluxMap.java:194) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Mono.subscribe(Mono.java:4576) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxUsingWhen$UsingWhenSubscriber.onComplete(FluxUsingWhen.java:389) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2097) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoStreamCollector$StreamCollectorSubscriber.onComplete(MonoStreamCollector.java:159) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:850) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerComplete(FluxFlatMap.java:898) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapInner.onComplete(FluxFlatMap.java:1001) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onComplete(FluxHandleFuseable.java:239) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2097) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoCollectList$MonoCollectListSubscriber.onComplete(MonoCollectList.java:118) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:223) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onComplete(MonoFlatMapMany.java:261) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onComplete(FluxHandleFuseable.java:239) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onComplete(FluxFilterFuseable.java:391) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onComplete(FluxPeekFuseable.java:940) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onComplete(FluxPeekFuseable.java:940) ~[reactor-core-3.7.14.jar:3.7.14]
at io.r2dbc.postgresql.util.FluxDiscardOnCancel$FluxDiscardOnCancelSubscriber.onComplete(FluxDiscardOnCancel.java:104) ~[r2dbc-postgresql-1.0.9.RELEASE.jar:1.0.9.RELEASE]
at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:128) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:223) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$BaseSink.complete(FluxCreate.java:465) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:871) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$BufferAsyncSink.complete(FluxCreate.java:819) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$SerializedFluxSink.drainLoop(FluxCreate.java:249) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$SerializedFluxSink.drain(FluxCreate.java:215) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxCreate$SerializedFluxSink.complete(FluxCreate.java:206) ~[reactor-core-3.7.14.jar:3.7.14]
at io.r2dbc.postgresql.client.ReactorNettyClient$Conversation.complete(ReactorNettyClient.java:683) ~[r2dbc-postgresql-1.0.9.RELEASE.jar:1.0.9.RELEASE]
at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.emit(ReactorNettyClient.java:949) ~[r2dbc-postgresql-1.0.9.RELEASE.jar:1.0.9.RELEASE]
at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:825) ~[r2dbc-postgresql-1.0.9.RELEASE.jar:1.0.9.RELEASE]
at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:731) ~[r2dbc-postgresql-1.0.9.RELEASE.jar:1.0.9.RELEASE]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:129) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:292) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:401) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:444) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361) ~[netty-codec-4.1.130.Final.jar:4.1.130.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325) ~[netty-codec-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:805) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Suppressed: java.lang.Exception: #block terminated with an error
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:146) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Mono.block(Mono.java:1807) ~[reactor-core-3.7.14.jar:3.7.14]
at run.halo.app.plugin.PluginBeforeStopSyncListener.onApplicationEvent(PluginBeforeStopSyncListener.java:43) ~[classes/:2.22.0]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:383) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:255) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:174) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) ~[spring-context-6.2.15.jar:6.2.15]
at run.halo.app.plugin.DefaultPluginApplicationContextFactory$HaloPluginEventBridge.onApplicationEvent(DefaultPluginApplicationContextFactory.java:348) ~[classes/:2.22.0]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:383) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:255) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:174) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) ~[spring-context-6.2.15.jar:6.2.15]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454) ~[spring-context-6.2.15.jar:6.2.15]
at run.halo.app.plugin.PluginApplicationContext.publishEvent(PluginApplicationContext.java:131) ~[classes/:2.22.0]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387) ~[spring-context-6.2.15.jar:6.2.15]
at run.halo.app.plugin.DefaultSpringPlugin.stop(DefaultSpringPlugin.java:80) ~[classes/:2.22.0]
at org.pf4j.AbstractPluginManager.stopPlugin(AbstractPluginManager.java:515) ~[pf4j-3.13.0.jar:3.13.0]
at org.pf4j.AbstractPluginManager.unloadPlugin(AbstractPluginManager.java:314) ~[pf4j-3.13.0.jar:3.13.0]
at org.pf4j.AbstractPluginManager.unloadPlugin(AbstractPluginManager.java:285) ~[pf4j-3.13.0.jar:3.13.0]
at org.pf4j.AbstractPluginManager.unloadPlugin(AbstractPluginManager.java:274) ~[pf4j-3.13.0.jar:3.13.0]
at run.halo.app.core.reconciler.PluginReconciler.loadOrReload(PluginReconciler.java:519) ~[classes/:2.22.0]
at run.halo.app.core.reconciler.PluginReconciler.lambda$reconcile$1(PluginReconciler.java:150) ~[classes/:2.22.0]
at run.halo.app.core.reconciler.PluginReconciler.lambda$reconcile$7(PluginReconciler.java:163) ~[classes/:2.22.0]
at java.base/java.util.Optional.map(Unknown Source) ~[na:na]
at run.halo.app.core.reconciler.PluginReconciler.reconcile(PluginReconciler.java:118) ~[classes/:2.22.0]
at run.halo.app.core.reconciler.PluginReconciler.reconcile(PluginReconciler.java:79) ~[classes/:2.22.0]
at run.halo.app.extension.controller.DefaultController$Worker.run(DefaultController.java:181) ~[api-2.22.0.jar:2.22.0]
at org.springframework.core.task.SimpleAsyncTaskExecutor$TaskTrackingRunnable.run(SimpleAsyncTaskExecutor.java:481) ~[spring-core-6.2.15.jar:6.2.15]
at java.base/java.lang.VirtualThread.run(Unknown Source) ~[na:na]
2026-01-04T14:53:51.159+08:00 ERROR 7 --- [reactor-http-epoll-4] a.w.r.e.AbstractErrorWebExceptionHandler : [714496ad-1136730] 500 Server Error for HTTP GET "/apis/api.console.halo.run/v1alpha1/users/-/permissions"
java.lang.IllegalStateException: Plugin has not been started or has already been stopped; ApplicationContext is not available.
at run.halo.app.plugin.DefaultSpringPlugin.getApplicationContext(DefaultSpringPlugin.java:114) ~[classes/:2.22.0]
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ run.halo.app.infra.webfilter.AdditionalWebFilterChainProxy [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.web.filter.reactive.ServerWebExchangeContextFilter [DefaultWebFilterChain]
*__checkpoint ⇢ run.halo.app.infra.webfilter.LocaleChangeWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.web.filter.reactive.UrlHandlerFilter [DefaultWebFilterChain]
*__checkpoint ⇢ run.halo.app.theme.UserLocaleRequestAttributeWriteFilter [DefaultWebFilterChain]
*__checkpoint ⇢ HTTP GET "/apis/api.console.halo.run/v1alpha1/users/-/permissions" [ExceptionHandlingWebHandler]
Original Stack Trace:
at run.halo.app.plugin.DefaultSpringPlugin.getApplicationContext(DefaultSpringPlugin.java:114) ~[classes/:2.22.0]
at run.halo.app.plugin.extensionpoint.DefaultExtensionGetter.lookExtensions(DefaultExtensionGetter.java:110) ~[classes/:2.22.0]
at run.halo.app.plugin.extensionpoint.DefaultExtensionGetter.getExtensions(DefaultExtensionGetter.java:39) ~[classes/:2.22.0]
at run.halo.app.plugin.extensionpoint.DefaultExtensionGetter.lambda$getEnabledExtensions$2(DefaultExtensionGetter.java:83) ~[classes/:2.22.0]
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Flux.subscribe(Flux.java:8891) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:196) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:129) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:224) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.onNext(FluxFilter.java:247) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1864) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoCacheInvalidateIf.subscribeOrReturn(MonoCacheInvalidateIf.java:170) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Flux.subscribe(Flux.java:8876) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:202) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoFlatMapMany.subscribeOrReturn(MonoFlatMapMany.java:49) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:63) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:241) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:204) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterSubscriber.onComplete(FluxFilter.java:166) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onComplete(FluxPeekFuseable.java:595) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:159) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoAll$AllSubscriber.onNext(MonoAll.java:94) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:492) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:424) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:210) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:335) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:373) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onSubscribe(FluxPeekFuseable.java:178) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Mono.subscribe(Mono.java:4576) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:265) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:241) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:204) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:85) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxHandle$HandleSubscriber.onComplete(FluxHandle.java:223) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:275) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.FluxFilter$FilterConditionalSubscriber.onComplete(FluxFilter.java:300) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1865) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoCacheInvalidateIf.subscribeOrReturn(MonoCacheInvalidateIf.java:170) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Mono.subscribe(Mono.java:4560) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:265) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.Mono.subscribe(Mono.java:4576) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:265) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:76) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) ~[reactor-core-3.7.14.jar:3.7.14]
at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:1339) ~[reactor-netty-http-1.2.13.jar:1.2.13]
at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:722) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:486) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at reactor.netty.http.server.HttpServerOperations.handleDefaultHttpRequest(HttpServerOperations.java:870) ~[reactor-netty-http-1.2.13.jar:1.2.13]
at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:796) ~[reactor-netty-http-1.2.13.jar:1.2.13]
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115) ~[reactor-netty-core-1.2.13.jar:1.2.13]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:274) ~[reactor-netty-http-1.2.13.jar:1.2.13]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361) ~[netty-codec-4.1.130.Final.jar:4.1.130.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325) ~[netty-codec-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) ~[netty-transport-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:805) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399) ~[netty-transport-classes-epoll-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.130.Final.jar:4.1.130.Final]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
2026-01-04T14:53:51.164+08:00 INFO 7 --- [run.halo.app.core.reconciler.PluginReconciler-1] org.pf4j.AbstractPluginManager : Stop plugin '[email protected]'
2Reproduce Steps
No response
Relevant log output
Additional information
/kind bug
/area core
/area plugin
/milestone 2.22.x
/assign
Metadata
Metadata
Assignees
Labels
area/coreIssues or PRs related to the Halo CoreIssues or PRs related to the Halo Corearea/pluginIssues or PRs related to the Plugin ProviderIssues or PRs related to the Plugin Providerkind/bugCategorizes issue or PR as related to a bug.Categorizes issue or PR as related to a bug.priority/critical-urgentHighest priority. Must be actively worked on as someone's top priority right now.Highest priority. Must be actively worked on as someone's top priority right now.