Added a setter to GitHub.DistributedTask.WebApi.Issue's key-value-pair indexer.

This commit is contained in:
John Wesley Walker III
2023-02-07 07:45:00 +00:00
parent efc0a92cc7
commit 4eb9adc958
4 changed files with 27 additions and 27 deletions
+2 -3
View File
@@ -299,7 +299,7 @@ namespace GitHub.Runner.Common
{ {
try try
{ {
// Give at most 60s for each request. // Give at most 60s for each request.
using (var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(60))) 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); 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) foreach (var issue in record.Issues)
{ {
String source; string source = issue["sourcepath"];
issue.Data.TryGetValue("sourcepath", out source);
Trace.Verbose($" Issue: c={issue.Category}, t={issue.Type}, s={source ?? string.Empty}, m={issue.Message}"); Trace.Verbose($" Issue: c={issue.Category}, t={issue.Type}, s={source ?? string.Empty}, m={issue.Message}");
} }
} }
+5 -5
View File
@@ -33,7 +33,7 @@ namespace GitHub.Runner.Listener
// This implementation of IJobDispatcher is not thread safe. // This implementation of IJobDispatcher is not thread safe.
// It is based on the fact that the current design of the runner is a dequeue // 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. // 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. // and the server will not send another job while this one is still running.
public sealed class JobDispatcher : RunnerService, IJobDispatcher public sealed class JobDispatcher : RunnerService, IJobDispatcher
{ {
@@ -426,7 +426,7 @@ namespace GitHub.Runner.Listener
{ {
workerOutput.Add(stdout.Data); workerOutput.Add(stdout.Data);
} }
if (printToStdout) if (printToStdout)
{ {
term.WriteLine(stdout.Data, skipTracing: true); term.WriteLine(stdout.Data, skipTracing: true);
@@ -512,7 +512,7 @@ namespace GitHub.Runner.Listener
var accessToken = systemConnection?.Authorization?.Parameters["AccessToken"]; var accessToken = systemConnection?.Authorization?.Parameters["AccessToken"];
notification.JobStarted(message.JobId, accessToken, systemConnection.Url); notification.JobStarted(message.JobId, accessToken, systemConnection.Url);
HostContext.WritePerfCounter($"SentJobToWorker_{requestId.ToString()}"); HostContext.WritePerfCounter($"SentJobToWorker_{requestId}");
try 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. // if worker doesn't exit within timeout, then kill worker.
completedTask = await Task.WhenAny(workerProcessTask, Task.Delay(-1, workerCancelTimeoutKillToken)); 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 }; 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.ErrorCount++;
jobRecord.Issues.Add(unhandledExceptionIssue); jobRecord.Issues.Add(unhandledExceptionIssue);
await jobServer.UpdateTimelineRecordsAsync(message.Plan.ScopeIdentifier, message.Plan.PlanType, message.Plan.PlanId, message.Timeline.Id, new TimelineRecord[] { jobRecord }, CancellationToken.None); await jobServer.UpdateTimelineRecordsAsync(message.Plan.ScopeIdentifier, message.Plan.PlanType, message.Plan.PlanId, message.Timeline.Id, new TimelineRecord[] { jobRecord }, CancellationToken.None);
+10 -3
View File
@@ -591,13 +591,20 @@ namespace GitHub.Runner.Worker
Message = refinedMessage, 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. // 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. // 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) if (_record.Order != null)
{ {
result.Data["stepNumber"] = _record.Order.ToString(); result["stepNumber"] = _record.Order.ToString();
} }
string wellKnownTag = null; string wellKnownTag = null;
@@ -627,7 +634,7 @@ namespace GitHub.Runner.Worker
if (!string.IsNullOrEmpty(logText)) if (!string.IsNullOrEmpty(logText))
{ {
long logLineNumber = Write(wellKnownTag, logText); long logLineNumber = Write(wellKnownTag, logText);
result.Data["logFileLineNumber"] = logLineNumber.ToString(); result["logFileLineNumber"] = logLineNumber.ToString();
} }
} }
if (previousCountForIssueType.GetValueOrDefault(0) < _maxIssueCount) if (previousCountForIssueType.GetValueOrDefault(0) < _maxIssueCount)
+10 -16
View File
@@ -5,7 +5,6 @@ using GitHub.Services.Common;
namespace GitHub.DistributedTask.WebApi namespace GitHub.DistributedTask.WebApi
{ {
public interface IReadOnlyIssue public interface IReadOnlyIssue
{ {
IssueType Type { get; } IssueType Type { get; }
@@ -26,14 +25,14 @@ namespace GitHub.DistributedTask.WebApi
private Issue(Issue original) private Issue(Issue original)
{ {
m_data = new Dictionary<String, String>(StringComparer.OrdinalIgnoreCase); m_data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (original != null) if (original != null)
{ {
this.Type = original.Type; this.Type = original.Type;
this.Category = original.Category; this.Category = original.Category;
this.Message = original.Message; this.Message = original.Message;
this.IsInfrastructureIssue = original.IsInfrastructureIssue; 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)] [DataMember(Order = 2)]
public String Category public string Category
{ {
get; get;
set; set;
} }
[DataMember(Order = 3)] [DataMember(Order = 3)]
public String Message public string Message
{ {
get; get;
set; set;
@@ -65,14 +64,6 @@ namespace GitHub.DistributedTask.WebApi
set; set;
} }
public IDictionary<String, String> Data
{
get
{
return m_data;
}
}
public string this[string key] public string this[string key]
{ {
get get
@@ -80,9 +71,12 @@ namespace GitHub.DistributedTask.WebApi
m_data.TryGetValue(key, out string result); m_data.TryGetValue(key, out string result);
return result; return result;
} }
set
{
m_data[key] = value;
}
} }
public Issue Clone() public Issue Clone()
{ {
return new Issue(this); return new Issue(this);
@@ -107,8 +101,8 @@ namespace GitHub.DistributedTask.WebApi
} }
[DataMember(Name = "Data", EmitDefaultValue = false, Order = 4)] [DataMember(Name = "Data", EmitDefaultValue = false, Order = 4)]
private IDictionary<String, String> m_serializedData; private IDictionary<string, string> m_serializedData;
private IDictionary<String, String> m_data; private IDictionary<string, string> m_data;
} }
} }