diff --git a/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java b/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java index b8c1508fb..d77a94ba9 100644 --- a/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java @@ -50,8 +50,9 @@ public class ThumbnailServiceImpl implements ThumbnailService { // restriction return ongoingTasks.computeIfAbsent(cacheKey, k -> doGenerate(imageUri, size) // In the case of concurrency, doGenerate must return the same instance + .doFinally(signalType -> ongoingTasks.remove(cacheKey)) .cache() - .doFinally(signalType -> ongoingTasks.remove(cacheKey))); + ); } record CacheKey(URI imageUri, ThumbnailSize size) { diff --git a/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java b/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java index 6821b6be1..c1c1433cc 100644 --- a/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java @@ -192,7 +192,7 @@ class ThumbnailServiceImplTest { var createdUri = URI.create("/test-thumb.jpg"); doReturn(Mono.just(createdUri)).when(spyThumbnailService).create(any(), any()); - int threadCount = 10; + int threadCount = 100; ExecutorService executor = Executors.newFixedThreadPool(threadCount); var latch = new CountDownLatch(threadCount);