diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java b/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java index 9744c7930..2e2f8161e 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java +++ b/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java @@ -184,13 +184,6 @@ public class PluginReconciler implements Reconciler { Assert.notNull(name, "Plugin name must not be null"); Assert.notNull(settingName, "Setting name must not be null"); PluginWrapper pluginWrapper = getPluginWrapper(name); - // If it already exists, do not look for setting - if (RuntimeMode.DEPLOYMENT.equals(pluginWrapper.getRuntimeMode())) { - Optional existing = client.fetch(Setting.class, settingName); - if (existing.isPresent()) { - return existing; - } - } var resourceLoader = new DefaultResourceLoader(pluginWrapper.getPluginClassLoader()); diff --git a/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java b/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java index df519bd8a..a3abfed08 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java @@ -166,14 +166,25 @@ public class ThemeServiceImpl implements ThemeService { }) .doOnNext(unstructured -> populateThemeNameLabel(unstructured, theme.getMetadata().getName())) - .flatMap(unstructured -> client.create(unstructured) - .retryWhen(Retry.backoff(5, Duration.ofMillis(100)) - .filter(OptimisticLockingFailureException.class::isInstance)) - ) + .flatMap(this::createOrUpdate) .then(Mono.just(theme)); }); } + Mono createOrUpdate(Unstructured unstructured) { + return Mono.defer(() -> client.fetch(unstructured.groupVersionKind(), + unstructured.getMetadata().getName()) + .flatMap(existUnstructured -> { + existUnstructured.getMetadata() + .setVersion(unstructured.getMetadata().getVersion()); + return client.update(existUnstructured); + }) + .switchIfEmpty(Mono.defer(() -> client.create(unstructured))) + ) + .retryWhen(Retry.backoff(5, Duration.ofMillis(100)) + .filter(OptimisticLockingFailureException.class::isInstance)); + } + @Override public Mono reloadTheme(String name) { return client.fetch(Theme.class, name)