mirror of https://github.com/halo-dev/halo
refactor: clear the template cache after uninstalling the theme (#7174)
#### What type of PR is this? /kind improvement /area core /milestone 2.20.x #### What this PR does / why we need it: 卸载主题之后清理模板缓存 此问题是 https://github.com/halo-dev/halo/pull/2970 的遗留问题 #### Does this PR introduce a user-facing change? ```release-note None ```pull/7199/head
parent
24f8d7b571
commit
be6f044a29
|
@ -10,6 +10,7 @@ import java.util.Map;
|
|||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.retry.support.RetryTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -31,6 +32,7 @@ import run.halo.app.infra.exception.ThemeUninstallException;
|
|||
import run.halo.app.infra.utils.JsonUtils;
|
||||
import run.halo.app.infra.utils.SettingUtils;
|
||||
import run.halo.app.infra.utils.VersionUtils;
|
||||
import run.halo.app.theme.TemplateEngineManager;
|
||||
|
||||
/**
|
||||
* Reconciler for theme.
|
||||
|
@ -39,6 +41,7 @@ import run.halo.app.infra.utils.VersionUtils;
|
|||
* @since 2.0.0
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class ThemeReconciler implements Reconciler<Request> {
|
||||
private static final String FINALIZER_NAME = "theme-protection";
|
||||
|
||||
|
@ -46,6 +49,7 @@ public class ThemeReconciler implements Reconciler<Request> {
|
|||
|
||||
private final ThemeRootGetter themeRoot;
|
||||
private final SystemVersionSupplier systemVersionSupplier;
|
||||
private final TemplateEngineManager templateEngineManager;
|
||||
|
||||
private final RetryTemplate retryTemplate = RetryTemplate.builder()
|
||||
.maxAttempts(20)
|
||||
|
@ -53,13 +57,6 @@ public class ThemeReconciler implements Reconciler<Request> {
|
|||
.retryOn(IllegalStateException.class)
|
||||
.build();
|
||||
|
||||
public ThemeReconciler(ExtensionClient client, ThemeRootGetter themeRoot,
|
||||
SystemVersionSupplier systemVersionSupplier) {
|
||||
this.client = client;
|
||||
this.themeRoot = themeRoot;
|
||||
this.systemVersionSupplier = systemVersionSupplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result reconcile(Request request) {
|
||||
client.fetch(Theme.class, request.name())
|
||||
|
@ -173,6 +170,7 @@ public class ThemeReconciler implements Reconciler<Request> {
|
|||
}
|
||||
|
||||
private void reconcileThemeDeletion(Theme theme) {
|
||||
templateEngineManager.clearCache(theme.getMetadata().getName()).block();
|
||||
deleteThemeFiles(theme);
|
||||
// delete theme setting form
|
||||
String settingName = theme.getSpec().getSettingName();
|
||||
|
|
|
@ -32,10 +32,10 @@ import org.skyscreamer.jsonassert.JSONAssert;
|
|||
import org.springframework.retry.RetryException;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
import reactor.core.publisher.Mono;
|
||||
import run.halo.app.core.extension.AnnotationSetting;
|
||||
import run.halo.app.core.extension.Setting;
|
||||
import run.halo.app.core.extension.Theme;
|
||||
import run.halo.app.core.reconciler.ThemeReconciler;
|
||||
import run.halo.app.extension.ConfigMap;
|
||||
import run.halo.app.extension.ExtensionClient;
|
||||
import run.halo.app.extension.Metadata;
|
||||
|
@ -44,6 +44,7 @@ import run.halo.app.extension.controller.Reconciler;
|
|||
import run.halo.app.infra.SystemVersionSupplier;
|
||||
import run.halo.app.infra.ThemeRootGetter;
|
||||
import run.halo.app.infra.utils.JsonUtils;
|
||||
import run.halo.app.theme.TemplateEngineManager;
|
||||
|
||||
/**
|
||||
* Tests for {@link ThemeReconciler}.
|
||||
|
@ -66,6 +67,9 @@ class ThemeReconcilerTest {
|
|||
@Mock
|
||||
private File defaultTheme;
|
||||
|
||||
@Mock
|
||||
private TemplateEngineManager templateEngineManager;
|
||||
|
||||
@InjectMocks
|
||||
ThemeReconciler themeReconciler;
|
||||
|
||||
|
@ -76,6 +80,7 @@ class ThemeReconcilerTest {
|
|||
void setUp() throws IOException {
|
||||
defaultTheme = ResourceUtils.getFile("classpath:themes/default");
|
||||
lenient().when(systemVersionSupplier.get()).thenReturn(Version.parse("0.0.0"));
|
||||
lenient().when(templateEngineManager.clearCache(any())).thenReturn(Mono.empty());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -128,7 +133,8 @@ class ThemeReconcilerTest {
|
|||
when(themeRoot.get()).thenReturn(testWorkDir);
|
||||
|
||||
final ThemeReconciler themeReconciler =
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier);
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier,
|
||||
templateEngineManager);
|
||||
|
||||
final int[] retryFlags = {0, 0};
|
||||
when(extensionClient.fetch(eq(Setting.class), eq("theme-test-setting")))
|
||||
|
@ -157,6 +163,7 @@ class ThemeReconcilerTest {
|
|||
verify(extensionClient, times(2)).fetch(eq(Theme.class), eq(metadata.getName()));
|
||||
verify(extensionClient, times(3)).fetch(eq(Setting.class), eq(settingName));
|
||||
verify(extensionClient, times(3)).list(eq(AnnotationSetting.class), any(), eq(null));
|
||||
verify(templateEngineManager).clearCache(eq(metadata.getName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -167,7 +174,8 @@ class ThemeReconcilerTest {
|
|||
when(themeRoot.get()).thenReturn(testWorkDir);
|
||||
|
||||
final ThemeReconciler themeReconciler =
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier);
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier,
|
||||
templateEngineManager);
|
||||
|
||||
final int[] retryFlags = {0};
|
||||
when(extensionClient.fetch(eq(Setting.class), eq("theme-test-setting")))
|
||||
|
@ -196,7 +204,8 @@ class ThemeReconcilerTest {
|
|||
when(themeRoot.get()).thenReturn(testWorkDir);
|
||||
|
||||
final ThemeReconciler themeReconciler =
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier);
|
||||
new ThemeReconciler(extensionClient, themeRoot, systemVersionSupplier,
|
||||
templateEngineManager);
|
||||
Theme theme = fakeTheme();
|
||||
theme.setStatus(null);
|
||||
theme.getSpec().setRequires(">2.3.0");
|
||||
|
|
Loading…
Reference in New Issue