mirror of https://github.com/halo-dev/halo
Fix AttachmentReconciler repeated execution (#4052)
<!-- Thanks for sending a pull request! Here are some tips for you: 1. 如果这是你的第一次,请阅读我们的贡献指南:<https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>。 1. If this is your first time, please read our contributor guidelines: <https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>. 2. 请根据你解决问题的类型为 Pull Request 添加合适的标签。 2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. 3. 请确保你已经添加并运行了适当的测试。 3. Ensure you have added or ran the appropriate tests for your PR. --> #### What type of PR is this? /kind bug <!-- 添加其中一个类别: Add one of the following kinds: /kind bug /kind cleanup /kind documentation /kind feature /kind improvement 适当添加其中一个或多个类别(可选): Optionally add one or more of the following kinds if applicable: /kind api-change /kind deprecation /kind failing-test /kind flake /kind regression --> #### What this PR does / why we need it: Fix AttachmentReconciler repeated execution. #### Which issue(s) this PR fixes: <!-- PR 合并时自动关闭 issue。 Automatically closes linked issue when PR is merged. 用法:`Fixes #<issue 号>`,或者 `Fixes (粘贴 issue 完整链接)` Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> Fixes #3746 #### Special notes for your reviewer: The reconile method in run.halo.app.core.extension.reconciler.attachment.AttachmentReconciler will be executed repeatedly, uploading an attachment will be executed twice, because updating the finalizers property will be in onUpdate of run.halo.app.extension.controller.ExtensionWatcher Will request duplicate addition, I provide a fix for you to review #### Does this PR introduce a user-facing change? <!-- 如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。 否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change), Release Note 需要以 `action required` 开头。 If no, just write "NONE" in the release-note block below. If yes, a release note is required: Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required". --> ```release-note 修复 AttachmentReconciler 重复执行 ```pull/4070/head
parent
31740e732f
commit
636ec6329a
|
@ -40,11 +40,7 @@ public class AttachmentReconciler implements Reconciler<Request> {
|
|||
client.fetch(Attachment.class, request.name()).ifPresent(attachment -> {
|
||||
// TODO Handle the finalizer
|
||||
if (attachment.getMetadata().getDeletionTimestamp() != null) {
|
||||
attachmentService.delete(attachment)
|
||||
.doOnNext(deletedAttachment -> {
|
||||
removeFinalizer(attachment.getMetadata().getName());
|
||||
})
|
||||
.blockOptional();
|
||||
removeFinalizer(attachment);
|
||||
return;
|
||||
}
|
||||
// add finalizer
|
||||
|
@ -89,14 +85,25 @@ public class AttachmentReconciler implements Reconciler<Request> {
|
|||
});
|
||||
}
|
||||
|
||||
void removeFinalizer(String attachmentName) {
|
||||
client.fetch(Attachment.class, attachmentName).ifPresent(attachment -> {
|
||||
var finalizers = attachment.getMetadata().getFinalizers();
|
||||
if (finalizers != null && finalizers.remove(Constant.FINALIZER_NAME)) {
|
||||
// update it
|
||||
client.update(attachment);
|
||||
}
|
||||
});
|
||||
void removeFinalizer(Attachment oldAttachment) {
|
||||
if (!hasFinalizer(oldAttachment, Constant.FINALIZER_NAME)) {
|
||||
return;
|
||||
}
|
||||
attachmentService.delete(oldAttachment).block();
|
||||
client.fetch(Attachment.class, oldAttachment.getMetadata().getName())
|
||||
.ifPresent(attachment -> {
|
||||
var finalizers = attachment.getMetadata().getFinalizers();
|
||||
if (hasFinalizer(attachment, Constant.FINALIZER_NAME)
|
||||
&& finalizers.remove(Constant.FINALIZER_NAME)) {
|
||||
// update it
|
||||
client.update(attachment);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
boolean hasFinalizer(Attachment attachment, String finalizer) {
|
||||
var finalizers = attachment.getMetadata().getFinalizers();
|
||||
return finalizers != null && finalizers.contains(finalizer);
|
||||
}
|
||||
|
||||
void addFinalizerIfNotSet(String attachmentName, Set<String> existingFinalizers) {
|
||||
|
|
Loading…
Reference in New Issue