[mcp] Handle non-default TaskExecutor Some tasks run on different instances of Swarming from the default. We need to use the correct instance to obtain their details. Bug: b/491418947 Change-Id: Iae2e69e5b8979b8fcdf473abe62758c6985451cd Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/1325936 Reviewed-by: Brett Somocurcio <brettos@google.com> Auto-Submit: Eric Boren <borenet@google.com> Commit-Queue: Brett Somocurcio <brettos@google.com>
diff --git a/mcp/services/skia/task_details/client.go b/mcp/services/skia/task_details/client.go index 7b2e2ca..4e9306d 100644 --- a/mcp/services/skia/task_details/client.go +++ b/mcp/services/skia/task_details/client.go
@@ -6,6 +6,7 @@ "encoding/json" "fmt" "io" + "net/http" "strconv" "strings" @@ -39,11 +40,12 @@ ) type TaskDetailsClient struct { - swarm swarmingv2.SwarmingV2Client - td td_db.DB - tdLogs *logs.LogsManager - ts ts_db.DBCloser - logdog LogDogClient + swarm swarmingv2.SwarmingV2Client + swarmHttpClient *http.Client + td td_db.DB + tdLogs *logs.LogsManager + ts ts_db.DBCloser + logdog LogDogClient } func NewClient(ctx context.Context, btProject, btInstance, firestoreInstance, swarmingServer string) (*TaskDetailsClient, error) { @@ -76,11 +78,12 @@ swarm := swarmingv2.NewDefaultClient(swarmHttpClient, swarmingServer) return &TaskDetailsClient{ - swarm: swarm, - td: tdDB, - tdLogs: tdLogs, - ts: tsDB, - logdog: &logDogClientImpl{coord}, + swarm: swarm, + swarmHttpClient: swarmHttpClient, + td: tdDB, + tdLogs: tdLogs, + ts: tsDB, + logdog: &logDogClientImpl{coord}, }, nil } @@ -115,7 +118,11 @@ if task == nil { return nil, skerr.Fmt("No such task with ID %s", taskID) } - swarmTask, err := c.swarm.GetResult(ctx, &apipb.TaskIdWithPerfRequest{TaskId: task.SwarmingTaskId}) + swarm := c.swarm + if task.TaskExecutor != "" { + swarm = swarmingv2.NewDefaultClient(c.swarmHttpClient, task.TaskExecutor) + } + swarmTask, err := swarm.GetResult(ctx, &apipb.TaskIdWithPerfRequest{TaskId: task.SwarmingTaskId}) if err != nil { return nil, skerr.Wrap(err) } @@ -133,7 +140,7 @@ } // If we couldn't find recipe steps, just return the Swarming task logs. - swarmOutput, err := c.swarm.GetStdout(ctx, &apipb.TaskIdWithOffsetRequest{TaskId: task.SwarmingTaskId}) + swarmOutput, err := swarm.GetStdout(ctx, &apipb.TaskIdWithOffsetRequest{TaskId: task.SwarmingTaskId}) if err != nil { if !strings.Contains(err.Error(), "404 page not found") { return nil, skerr.Wrap(err)