diff --git a/Dockerfile b/Dockerfile index 8d7989d153..369303deff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,4 +23,6 @@ ENV JVM_OPTS="-Xmx256m -Xms256m" \ RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone +Expose 8090 + ENTRYPOINT ["sh", "-c", "java ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"] diff --git a/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java b/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java index 4223c42c27..566df88c1e 100644 --- a/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Objects; import java.util.function.Function; +import java.util.function.UnaryOperator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.OptimisticLockingFailureException; @@ -328,9 +329,11 @@ public Mono deleteContent(String postName, String snapshotName) .flatMap(post -> { var headSnapshotName = post.getSpec().getHeadSnapshot(); if (StringUtils.equals(headSnapshotName, snapshotName)) { - // update head to release - post.getSpec().setHeadSnapshot(post.getSpec().getReleaseSnapshot()); - return updatePostWithRetry(post); + return updatePostWithRetry(post, record -> { + // update head to release + record.getSpec().setHeadSnapshot(record.getSpec().getReleaseSnapshot()); + return record; + }); } return Mono.just(post); }) @@ -352,14 +355,15 @@ public Mono deleteContent(String postName, String snapshotName) }); } - private Mono updatePostWithRetry(Post post) { - return client.update(post) + private Mono updatePostWithRetry(Post post, UnaryOperator func) { + return client.update(func.apply(post)) .onErrorResume(OptimisticLockingFailureException.class, e -> Mono.defer(() -> client.get(Post.class, post.getMetadata().getName()) - .flatMap(client::update)) - .retryWhen(Retry.backoff(8, Duration.ofMillis(100)) - .filter(OptimisticLockingFailureException.class::isInstance) + .map(func) + .flatMap(client::update) ) + .retryWhen(Retry.backoff(8, Duration.ofMillis(100)) + .filter(OptimisticLockingFailureException.class::isInstance)) ); } diff --git a/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java b/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java index 11e60e9292..8fc7609448 100644 --- a/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Objects; import java.util.function.Function; +import java.util.function.UnaryOperator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.OptimisticLockingFailureException; @@ -206,9 +207,11 @@ public Mono deleteContent(String pageName, String snapshotName) .flatMap(page -> { var headSnapshotName = page.getSpec().getHeadSnapshot(); if (StringUtils.equals(headSnapshotName, snapshotName)) { - // update head to release - page.getSpec().setHeadSnapshot(page.getSpec().getReleaseSnapshot()); - return updatePostWithRetry(page); + return updatePageWithRetry(page, record -> { + // update head to release + page.getSpec().setHeadSnapshot(page.getSpec().getReleaseSnapshot()); + return record; + }); } return Mono.just(page); }) @@ -230,14 +233,15 @@ public Mono deleteContent(String pageName, String snapshotName) }); } - private Mono updatePostWithRetry(SinglePage page) { - return client.update(page) + private Mono updatePageWithRetry(SinglePage page, UnaryOperator func) { + return client.update(func.apply(page)) .onErrorResume(OptimisticLockingFailureException.class, e -> Mono.defer(() -> client.get(SinglePage.class, page.getMetadata().getName()) - .flatMap(client::update)) - .retryWhen(Retry.backoff(8, Duration.ofMillis(100)) - .filter(OptimisticLockingFailureException.class::isInstance) + .map(func) + .flatMap(client::update) ) + .retryWhen(Retry.backoff(8, Duration.ofMillis(100)) + .filter(OptimisticLockingFailureException.class::isInstance)) ); }