diff --git a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go index 44c8e504..ee345c4a 100644 --- a/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go +++ b/modules/mesh-provisioner-client/cmd/mesh-provisioner-client/client.go @@ -970,7 +970,11 @@ func (c *Client) report(ctx context.Context, kvs map[string]jetstream.KeyValue, logf("[provisioner-client] the report of %s: %v", r.Module, err) return } - if _, err := kvs[AppliedBucket].Put(ctx, c.Node+"."+r.Module, body); err != nil { + // Kept under a context the client's stop does not cancel, bounded: a report made as the client stops is still kept, + // or s.applied would never name the module and a later pass would never remove it (leftModules). + keep, done := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second) + defer done() + if _, err := kvs[AppliedBucket].Put(keep, c.Node+"."+r.Module, body); err != nil { logf("[provisioner-client] the report of %s could not be kept: %v", r.Module, err) } else { s.applied[r.Module] = true