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 } 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 @@