Kept compositions follow config changes from a durable consumer, so going back to an earlier build keeps today's config (issue 1945, ADR 0545) #466

Merged
jschoubben merged 7 commits from fix/1945-kept-compositions-follow-config into main 2026-10-25 18:37:58 +00:00
Showing only changes of commit ff3cc47027 - Show all commits
+10 -1
View File
@@ -137,6 +137,9 @@ func followKept(ctx context.Context, open *stores, node string, modules map[stri
var errs []error
builds := map[string][]inventory.Build{}
for _, k := range kept {
if ctx.Err() != nil {
return wrote, errors.Join(append(errs, ctx.Err())...) // stopped: the rest is the next controller's
}
if _, read := builds[k.module]; !read {
if builds[k.module], err = inv.Builds(ctx, k.module, 20); err != nil {
errs = append(errs, fmt.Errorf("%s's builds: %w", k.module, err))
@@ -311,6 +314,10 @@ func followConfigOnce(ctx context.Context, open *stores) error {
forgetResolved() // the next composition reads the values just written, not a read of the last 5 s
failed := false
for node, modules := range now {
if ctx.Err() != nil {
failed = true // stopped: the writes are refused below and delivered to the next controller
break
}
if err := composerFor(open).compose(ctx, []string{node}, false); err != nil {
fmt.Printf("config: %s is not composed after its config changed: %v\n", node, err)
failed = true
@@ -321,7 +328,9 @@ func followConfigOnce(ctx context.Context, open *stores) error {
}
}
for _, m := range msgs {
if failed {
if failed && ctx.Err() != nil {
_ = m.Nak() // stopped: delivered at once to the next controller
} else if failed {
_ = m.NakWithDelay(doneKeyRetry) // tried again: the bus delivers the writes again
} else {
acking, cancel := context.WithTimeout(context.WithoutCancel(ctx), 10*time.Second)