diff --git a/src/Runner.Common/JobServerQueue.cs b/src/Runner.Common/JobServerQueue.cs index d84614c15..dd8907ebe 100644 --- a/src/Runner.Common/JobServerQueue.cs +++ b/src/Runner.Common/JobServerQueue.cs @@ -299,7 +299,7 @@ namespace GitHub.Runner.Common { try { - // Give at most 60s for each request. + // Give at most 60s for each request. using (var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(60))) { await _jobServer.AppendTimelineRecordFeedAsync(_scopeIdentifier, _hubName, _planId, _jobTimelineId, _jobTimelineRecordId, stepRecordId, batch.Select(logLine => logLine.Line).ToList(), batch[0].LineNumber, timeoutTokenSource.Token); @@ -600,8 +600,7 @@ namespace GitHub.Runner.Common { foreach (var issue in record.Issues) { - String source; - issue.Data.TryGetValue("sourcepath", out source); + string source = issue["sourcepath"]; Trace.Verbose($" Issue: c={issue.Category}, t={issue.Type}, s={source ?? string.Empty}, m={issue.Message}"); } } diff --git a/src/Runner.Listener/JobDispatcher.cs b/src/Runner.Listener/JobDispatcher.cs index aaa83b80c..12a8b26d7 100644 --- a/src/Runner.Listener/JobDispatcher.cs +++ b/src/Runner.Listener/JobDispatcher.cs @@ -33,7 +33,7 @@ namespace GitHub.Runner.Listener // This implementation of IJobDispatcher is not thread safe. // It is based on the fact that the current design of the runner is a dequeue // and processes one message from the message queue at a time. - // In addition, it only executes one job every time, + // In addition, it only executes one job every time, // and the server will not send another job while this one is still running. public sealed class JobDispatcher : RunnerService, IJobDispatcher { @@ -426,7 +426,7 @@ namespace GitHub.Runner.Listener { workerOutput.Add(stdout.Data); } - + if (printToStdout) { term.WriteLine(stdout.Data, skipTracing: true); @@ -512,7 +512,7 @@ namespace GitHub.Runner.Listener var accessToken = systemConnection?.Authorization?.Parameters["AccessToken"]; notification.JobStarted(message.JobId, accessToken, systemConnection.Url); - HostContext.WritePerfCounter($"SentJobToWorker_{requestId.ToString()}"); + HostContext.WritePerfCounter($"SentJobToWorker_{requestId}"); try { @@ -620,7 +620,7 @@ namespace GitHub.Runner.Listener } } - // wait worker to exit + // wait worker to exit // if worker doesn't exit within timeout, then kill worker. completedTask = await Task.WhenAny(workerProcessTask, Task.Delay(-1, workerCancelTimeoutKillToken)); @@ -1014,7 +1014,7 @@ namespace GitHub.Runner.Listener } var unhandledExceptionIssue = new Issue() { Type = IssueType.Error, Message = errorMessage }; - unhandledExceptionIssue.Data[Constants.Runner.InternalTelemetryIssueDataKey] = Constants.Runner.WorkerCrash; + unhandledExceptionIssue[Constants.Runner.InternalTelemetryIssueDataKey] = Constants.Runner.WorkerCrash; jobRecord.ErrorCount++; jobRecord.Issues.Add(unhandledExceptionIssue); await jobServer.UpdateTimelineRecordsAsync(message.Plan.ScopeIdentifier, message.Plan.PlanType, message.Plan.PlanId, message.Timeline.Id, new TimelineRecord[] { jobRecord }, CancellationToken.None); diff --git a/src/Runner.Worker/ExecutionContext.cs b/src/Runner.Worker/ExecutionContext.cs index 1f7c6e620..9fb0786af 100644 --- a/src/Runner.Worker/ExecutionContext.cs +++ b/src/Runner.Worker/ExecutionContext.cs @@ -591,13 +591,20 @@ namespace GitHub.Runner.Worker Message = refinedMessage, }; - result.Data.AddRangeIfRangeNotNull(metadata?.Data); + + if (metadata != null) + { + foreach (var kvp in metadata.Data) + { + result[kvp.Key] = kvp.Value; + } + } // It's important to keep track of the step number (key:stepNumber) and the line number (key:logFileLineNumber) of every issue that gets logged. // Actions UI from the run summary page use both values to easily link to an exact locations in logs where annotations originate from. if (_record.Order != null) { - result.Data["stepNumber"] = _record.Order.ToString(); + result["stepNumber"] = _record.Order.ToString(); } string wellKnownTag = null; @@ -627,7 +634,7 @@ namespace GitHub.Runner.Worker if (!string.IsNullOrEmpty(logText)) { long logLineNumber = Write(wellKnownTag, logText); - result.Data["logFileLineNumber"] = logLineNumber.ToString(); + result["logFileLineNumber"] = logLineNumber.ToString(); } } if (previousCountForIssueType.GetValueOrDefault(0) < _maxIssueCount) diff --git a/src/Sdk/DTWebApi/WebApi/Issue.cs b/src/Sdk/DTWebApi/WebApi/Issue.cs index c9dbbd789..337103d3d 100644 --- a/src/Sdk/DTWebApi/WebApi/Issue.cs +++ b/src/Sdk/DTWebApi/WebApi/Issue.cs @@ -5,7 +5,6 @@ using GitHub.Services.Common; namespace GitHub.DistributedTask.WebApi { - public interface IReadOnlyIssue { IssueType Type { get; } @@ -26,14 +25,14 @@ namespace GitHub.DistributedTask.WebApi private Issue(Issue original) { - m_data = new Dictionary(StringComparer.OrdinalIgnoreCase); + m_data = new Dictionary(StringComparer.OrdinalIgnoreCase); if (original != null) { this.Type = original.Type; this.Category = original.Category; this.Message = original.Message; this.IsInfrastructureIssue = original.IsInfrastructureIssue; - this.Data.AddRange(original.Data); + m_data.AddRange(original.m_data); } } @@ -45,14 +44,14 @@ namespace GitHub.DistributedTask.WebApi } [DataMember(Order = 2)] - public String Category + public string Category { get; set; } [DataMember(Order = 3)] - public String Message + public string Message { get; set; @@ -65,14 +64,6 @@ namespace GitHub.DistributedTask.WebApi set; } - public IDictionary Data - { - get - { - return m_data; - } - } - public string this[string key] { get @@ -80,9 +71,12 @@ namespace GitHub.DistributedTask.WebApi m_data.TryGetValue(key, out string result); return result; } + set + { + m_data[key] = value; + } } - public Issue Clone() { return new Issue(this); @@ -107,8 +101,8 @@ namespace GitHub.DistributedTask.WebApi } [DataMember(Name = "Data", EmitDefaultValue = false, Order = 4)] - private IDictionary m_serializedData; + private IDictionary m_serializedData; - private IDictionary m_data; + private IDictionary m_data; } }