From 085911311a7e0cc9461dd1678cc2a197922ff5ce Mon Sep 17 00:00:00 2001 From: Shiming Zhang Date: Thu, 13 Nov 2025 14:18:02 +0800 Subject: [PATCH 1/4] Fix release cr manager --- pkg/controller/release_bearer_controller.go | 55 ++++++++++----------- pkg/controller/release_blob_controller.go | 7 ++- pkg/controller/release_chunk_controller.go | 7 ++- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/pkg/controller/release_bearer_controller.go b/pkg/controller/release_bearer_controller.go index 7b11f0a..5b1dc82 100644 --- a/pkg/controller/release_bearer_controller.go +++ b/pkg/controller/release_bearer_controller.go @@ -102,8 +102,12 @@ func (c *ReleaseBearerController) enqueueBearer(obj interface{}) { key := bearer.Name + now := time.Now() c.lastSeenMut.Lock() - c.lastSeen[key] = time.Now() + if bearer.CreationTimestamp.Time.Before(now) { + now = bearer.CreationTimestamp.Time + } + c.lastSeen[key] = now c.lastSeenMut.Unlock() c.workqueue.Add(key) } @@ -148,7 +152,6 @@ func (c *ReleaseBearerController) chunkHandler(ctx context.Context, name string) c.lastSeenMut.RLock() lastSeenTime, ok := c.lastSeen[name] c.lastSeenMut.RUnlock() - if !ok { return 0, nil } @@ -198,41 +201,37 @@ func (c *ReleaseBearerController) chunkHandler(ctx context.Context, name string) return 10 * time.Second, fmt.Errorf("failed to delete bearer %s: %v", name, err) } case v1alpha1.BearerPhaseSucceeded: - ttl, ok := getTTLDuration(bearer.ObjectMeta, v1alpha1.ReleaseTTLAnnotation) - expiresIn := bearer.Status.TokenInfo.ExpiresIn issuedAt := bearer.Status.TokenInfo.IssuedAt.Time if expiresIn != 0 && !issuedAt.IsZero() { expires := time.Duration(expiresIn) * time.Second - since := time.Since(issuedAt) - if ok { - ttl = min(ttl, expires-since) - } else { - ttl = expires - since + expirationTime := issuedAt.Add(expires) + if !expirationTime.After(time.Now()) { + klog.Infof("Deleting succeeded bearer %s after token expiration", name) + err = c.client.TaskV1alpha1().Bearers().Delete(ctx, bearer.Name, metav1.DeleteOptions{}) + if err != nil && !apierrors.IsNotFound(err) { + return 10 * time.Second, fmt.Errorf("failed to delete bearer %s: %v", name, err) + } + return 0, nil } - sub := time.Since(lastSeenTime) - if sub < ttl { - return ttl - sub, nil - } + return time.Until(expirationTime) + 10*time.Second, nil + } - klog.Infof("Deleting succeeded bearer %s after token expiration", name) - err = c.client.TaskV1alpha1().Bearers().Delete(ctx, bearer.Name, metav1.DeleteOptions{}) - if err != nil && !apierrors.IsNotFound(err) { - return 10 * time.Second, fmt.Errorf("failed to delete bearer %s: %v", name, err) - } - } else if ok { - sub := time.Since(lastSeenTime) - if sub < ttl { - return ttl - sub, nil - } + ttl, ok := getTTLDuration(bearer.ObjectMeta, v1alpha1.ReleaseTTLAnnotation) + if !ok { + return 0, nil + } + sub := time.Since(lastSeenTime) + if sub < ttl { + return ttl - sub, nil + } - klog.Infof("Deleting succeeded bearer %s after %v", name, ttl) - err = c.client.TaskV1alpha1().Bearers().Delete(ctx, name, metav1.DeleteOptions{}) - if err != nil && !apierrors.IsNotFound(err) { - return 10 * time.Second, fmt.Errorf("failed to delete bearer %s: %v", name, err) - } + klog.Infof("Deleting succeeded bearer %s after %v", name, ttl) + err = c.client.TaskV1alpha1().Bearers().Delete(ctx, name, metav1.DeleteOptions{}) + if err != nil && !apierrors.IsNotFound(err) { + return 10 * time.Second, fmt.Errorf("failed to delete bearer %s: %v", name, err) } } return 0, nil diff --git a/pkg/controller/release_blob_controller.go b/pkg/controller/release_blob_controller.go index f9f3fc3..25fc360 100644 --- a/pkg/controller/release_blob_controller.go +++ b/pkg/controller/release_blob_controller.go @@ -95,8 +95,12 @@ func (c *ReleaseBlobController) enqueueBlob(obj interface{}) { key := blob.Name + now := time.Now() c.lastSeenMut.Lock() - c.lastSeen[key] = time.Now() + if blob.CreationTimestamp.Time.Before(now) { + now = blob.CreationTimestamp.Time + } + c.lastSeen[key] = now c.lastSeenMut.Unlock() c.workqueue.Add(key) } @@ -141,7 +145,6 @@ func (c *ReleaseBlobController) chunkHandler(ctx context.Context, name string) ( c.lastSeenMut.RLock() lastSeenTime, ok := c.lastSeen[name] c.lastSeenMut.RUnlock() - if !ok { return 0, nil } diff --git a/pkg/controller/release_chunk_controller.go b/pkg/controller/release_chunk_controller.go index a1fa0fd..5f231e1 100644 --- a/pkg/controller/release_chunk_controller.go +++ b/pkg/controller/release_chunk_controller.go @@ -103,8 +103,12 @@ func (c *ReleaseChunkController) enqueueChunk(obj interface{}) { key := chunk.Name + now := time.Now() c.lastSeenMut.Lock() - c.lastSeen[key] = time.Now() + if chunk.CreationTimestamp.Time.Before(now) { + now = chunk.CreationTimestamp.Time + } + c.lastSeen[key] = now c.lastSeenMut.Unlock() c.workqueue.Add(key) } @@ -149,7 +153,6 @@ func (c *ReleaseChunkController) chunkHandler(ctx context.Context, name string) c.lastSeenMut.RLock() lastSeenTime, ok := c.lastSeen[name] c.lastSeenMut.RUnlock() - if !ok { return 0, nil } From 0dfb4a09c3b6ef32e462ee4f5de15e0bf018394f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 06:47:45 +0000 Subject: [PATCH 2/4] Initial plan From 517dcfeeb66e4d3e1565e194fbeeef9ced96ecaf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 06:55:10 +0000 Subject: [PATCH 3/4] Add creation and completion time display to webui - Added CreationTime and CompletionTime fields to entry struct - Updated blobToEntry() to populate timestamps from metadata and status - Updated chunkToEntry() to populate timestamps from metadata and status - Updated aggregateEntries() to track earliest creation and latest completion times - Added JavaScript functions to format timestamps and calculate durations - Updated HTML to display timestamps for all phases (Running, Failed, Pending, Succeeded) Co-authored-by: wzshiming <6565744+wzshiming@users.noreply.github.com> --- pkg/webui/html/index.html | 70 ++++++++++++++++++++++++++++++++++++++- pkg/webui/webui.go | 48 +++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/pkg/webui/html/index.html b/pkg/webui/html/index.html index 1823090..80d17a9 100644 --- a/pkg/webui/html/index.html +++ b/pkg/webui/html/index.html @@ -534,6 +534,62 @@