fix(watcher): populate RecordSummary StartTime/EndTime from Status fields#1285
Open
SergK wants to merge 1 commit into
Open
fix(watcher): populate RecordSummary StartTime/EndTime from Status fields#1285SergK wants to merge 1 commit into
SergK wants to merge 1 commit into
Conversation
…elds Fixes tektoncd#509 RecordSummary.StartTime is always NULL and EndTime is NULL for failed/timed-out/cancelled runs. The watcher derived timestamps from Knative conditions via getTimestamp(). This is broken for two reasons: 1. StartTime was read from ConditionReady. Tekton PipelineRun and TaskRun are batch resources (NewBatchConditionSet) whose happy condition is ConditionSucceeded. ConditionReady is for living resources like Knative Services and is never set on batch resources, so the lookup always returned nil. 2. EndTime was read from ConditionSucceeded, but getTimestamp() returned nil when the condition IsFalse(). For failed, timed-out, and cancelled runs ConditionSucceeded is False, so EndTime was nil even though the run had completed. Read Status.StartTime and Status.CompletionTime directly from the PipelineRun/TaskRun object via type switch. These fields are set by the Tekton controller for all terminal states. This follows the existing pattern used by getCompletionTime() in the dynamic reconciler. Signed-off-by: Sergiy Kulanov <sergiy_kulanov@epam.com>
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: khrm The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
SergK
added a commit
to KubeRocketCI/krci-portal
that referenced
this pull request
Apr 4, 2026
…lineRun query The getPipelineRunResults endpoint uses `order_by: summary.end_time desc` for sorting. However, RecordSummary.EndTime is NULL for many results due to a watcher bug in tektoncd/results (tektoncd/results#1285). Ordering by a NULL field corrupts the pagination cursor, causing page 2+ to return empty results. Changed to `order_by: create_time desc` which is: - Always populated (never NULL) - Semantically equivalent for recency-based sorting - The client hook already re-sorts by creationTimestamp anyway This unblocks the "Load more history" pagination control and allows users to view all 100+ PipelineRuns in the history, not just the initial 50. See: tektoncd/results#1285 Signed-off-by: Sergiy Kulanov <sergiy_kulanov@epam.com>
SergK
added a commit
to KubeRocketCI/krci-portal
that referenced
this pull request
Apr 4, 2026
…lineRun query The getPipelineRunResults endpoint uses `order_by: summary.end_time desc` for sorting. However, RecordSummary.EndTime is NULL for many results due to a watcher bug in tektoncd/results (tektoncd/results#1285). Ordering by a NULL field corrupts the pagination cursor, causing page 2+ to return empty results. Changed to `order_by: create_time desc` which is: - Always populated (never NULL) - Semantically equivalent for recency-based sorting - The client hook already re-sorts by creationTimestamp anyway This unblocks the "Load more history" pagination control and allows users to view all 100+ PipelineRuns in the history, not just the initial 50. See: tektoncd/results#1285 Signed-off-by: Sergiy Kulanov <sergiy_kulanov@epam.com>
SergK
added a commit
to KubeRocketCI/krci-portal
that referenced
this pull request
Apr 4, 2026
…lineRun query The getPipelineRunResults endpoint uses `order_by: summary.end_time desc` for sorting. However, RecordSummary.EndTime is NULL for many results due to a watcher bug in tektoncd/results (tektoncd/results#1285). Ordering by a NULL field corrupts the pagination cursor, causing page 2+ to return empty results. Changed to `order_by: create_time desc` which is: - Always populated (never NULL) - Semantically equivalent for recency-based sorting - The client hook already re-sorts by creationTimestamp anyway This unblocks the "Load more history" pagination control and allows users to view all 100+ PipelineRuns in the history, not just the initial 50. See: tektoncd/results#1285 Signed-off-by: Sergiy Kulanov <sergiy_kulanov@epam.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
RecordSummary.StartTimeis always NULL andEndTimeis NULL forfailed/timed-out/cancelled runs.
The watcher derived timestamps from Knative conditions via
getTimestamp().This is broken for two reasons:
StartTime was read from
ConditionReady. Tekton PipelineRun and TaskRunare batch resources (
NewBatchConditionSet) whose happy condition isConditionSucceeded.ConditionReadyis for living resources like KnativeServices and is never set on batch resources, so the lookup always returned
nil.
EndTime was read from
ConditionSucceeded, butgetTimestamp()returnednil when the condition
IsFalse(). For failed, timed-out, and cancelled runsConditionSucceededis False, so EndTime was nil even though the run hadcompleted.
Fix
Read
Status.StartTimeandStatus.CompletionTimedirectly from thePipelineRun/TaskRun object via type switch. These fields are set by the Tekton
controller for all terminal states. This follows the existing pattern used by
getCompletionTime()in the dynamic reconciler.getStartTime()andgetEndTime()helpersensureResult()to use the new helpersgetTimestamp()functionstates
/kind bug
Submitter Checklist
These are the criteria that every PR should meet, please check them off as you review them:
/kind <type>. Valid types are bug, cleanup, design, documentation, feature, flake, misc, question, tepRelease Notes