From 8e4ee28f1ea96d7bc1b4f7f1055d7adce6b65bb9 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Wed, 18 Jun 2025 04:48:43 -0700 Subject: [PATCH 1/5] nasparallelbench wait for api --- .../NASParallelBenchExecutor.cs | 28 +++++++++++++++++++ .../VirtualClient.Contracts/IApiClient.cs | 1 + .../VirtualClientApiClient.cs | 1 + .../VirtualClient.Core/ApiClientManager.cs | 1 + .../VirtualClient.Main/ApiManager.cs | 1 + 5 files changed, 32 insertions(+) diff --git a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs index 492fe8572e..7a26612021 100644 --- a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs @@ -59,6 +59,7 @@ public NASParallelBenchExecutor(IServiceCollection dependencies, IDictionary protected override async Task InitializeAsync(EventContext telemetryContext, CancellationToken cancellationToken) { + // await Task.Delay(TimeSpan.FromSeconds(30)); await this.CheckDistroSupportAsync(telemetryContext, cancellationToken); DependencyPath workloadPackage = await this.GetPlatformSpecificPackageAsync(this.PackageName, cancellationToken); @@ -146,6 +147,8 @@ private async Task BuildBinariesAsync(EventContext telemetryContext, Cancellatio IApiClientManager clientManager = this.Dependencies.GetService(); var apiClient = clientManager.GetOrCreateApiClient(IPAddress.Loopback.ToString(), IPAddress.Loopback); + await this.WaitForApiServerReadyAsync(apiClient, cancellationToken); + HttpResponseMessage response = await apiClient.GetStateAsync(nameof(this.NpbBuildState), cancellationToken) .ConfigureAwait(false); @@ -172,6 +175,31 @@ await this.LogProcessDetailsAsync(makeProcess, telemetryContext) } } + private async Task WaitForApiServerReadyAsync(IApiClient apiClient, CancellationToken cancellationToken, int timeoutSeconds = 30) + { + var timeout = TimeSpan.FromSeconds(timeoutSeconds); + var start = DateTime.UtcNow; + + while (DateTime.UtcNow - start < timeout) + { + try + { + var response = await apiClient.GetHeartbeatAsync(cancellationToken); + if (response.IsSuccessStatusCode) + { + return; + } + } + catch + { + } + + await Task.Delay(1000, cancellationToken); + } + + throw new Exception("API server did not become ready in time."); + } + private async Task CheckDistroSupportAsync(EventContext telemetryContext, CancellationToken cancellationToken) { if (this.Platform == PlatformID.Unix) diff --git a/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs b/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs index bf976e232a..81cdda6570 100644 --- a/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs +++ b/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs @@ -10,6 +10,7 @@ namespace VirtualClient using Newtonsoft.Json.Linq; using Polly; using VirtualClient.Common.Contracts; + using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; /// diff --git a/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs b/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs index da796e5c65..de090f5956 100644 --- a/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs +++ b/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs @@ -16,6 +16,7 @@ namespace VirtualClient using VirtualClient.Common.Contracts; using VirtualClient.Common.Extensions; using VirtualClient.Common.Rest; + using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; /// diff --git a/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs b/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs index ce6eee4a85..a62e8ed939 100644 --- a/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs +++ b/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs @@ -8,6 +8,7 @@ namespace VirtualClient using System.Linq; using System.Net; using VirtualClient.Common.Extensions; + using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; using VirtualClient.Contracts.Proxy; diff --git a/src/VirtualClient/VirtualClient.Main/ApiManager.cs b/src/VirtualClient/VirtualClient.Main/ApiManager.cs index 1b711b3c7b..ebe1ab9eda 100644 --- a/src/VirtualClient/VirtualClient.Main/ApiManager.cs +++ b/src/VirtualClient/VirtualClient.Main/ApiManager.cs @@ -3,6 +3,7 @@ namespace VirtualClient { + using System; using System.Collections.Generic; using System.IO.Abstractions; using System.Reflection; From 03333d96fbe5af280c9364241346b5539743c486 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Wed, 18 Jun 2025 22:01:23 -0700 Subject: [PATCH 2/5] Removing imports. --- src/VirtualClient/VirtualClient.Contracts/IApiClient.cs | 1 - .../VirtualClient.Contracts/VirtualClientApiClient.cs | 1 - src/VirtualClient/VirtualClient.Core/ApiClientManager.cs | 1 - src/VirtualClient/VirtualClient.Main/ApiManager.cs | 1 - 4 files changed, 4 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs b/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs index 81cdda6570..bf976e232a 100644 --- a/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs +++ b/src/VirtualClient/VirtualClient.Contracts/IApiClient.cs @@ -10,7 +10,6 @@ namespace VirtualClient using Newtonsoft.Json.Linq; using Polly; using VirtualClient.Common.Contracts; - using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; /// diff --git a/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs b/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs index de090f5956..da796e5c65 100644 --- a/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs +++ b/src/VirtualClient/VirtualClient.Contracts/VirtualClientApiClient.cs @@ -16,7 +16,6 @@ namespace VirtualClient using VirtualClient.Common.Contracts; using VirtualClient.Common.Extensions; using VirtualClient.Common.Rest; - using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; /// diff --git a/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs b/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs index a62e8ed939..ce6eee4a85 100644 --- a/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs +++ b/src/VirtualClient/VirtualClient.Core/ApiClientManager.cs @@ -8,7 +8,6 @@ namespace VirtualClient using System.Linq; using System.Net; using VirtualClient.Common.Extensions; - using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; using VirtualClient.Contracts.Proxy; diff --git a/src/VirtualClient/VirtualClient.Main/ApiManager.cs b/src/VirtualClient/VirtualClient.Main/ApiManager.cs index ebe1ab9eda..1b711b3c7b 100644 --- a/src/VirtualClient/VirtualClient.Main/ApiManager.cs +++ b/src/VirtualClient/VirtualClient.Main/ApiManager.cs @@ -3,7 +3,6 @@ namespace VirtualClient { - using System; using System.Collections.Generic; using System.IO.Abstractions; using System.Reflection; From 26432fd6e6076cd0cb0cd06596a6b2e502f0250f Mon Sep 17 00:00:00 2001 From: saibulusu Date: Thu, 19 Jun 2025 09:43:29 -0700 Subject: [PATCH 3/5] Removing comment. --- .../NASParallelBench/NASParallelBenchExecutor.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs index 7a26612021..8a446114b9 100644 --- a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs @@ -59,7 +59,6 @@ public NASParallelBenchExecutor(IServiceCollection dependencies, IDictionary protected override async Task InitializeAsync(EventContext telemetryContext, CancellationToken cancellationToken) { - // await Task.Delay(TimeSpan.FromSeconds(30)); await this.CheckDistroSupportAsync(telemetryContext, cancellationToken); DependencyPath workloadPackage = await this.GetPlatformSpecificPackageAsync(this.PackageName, cancellationToken); From b6127c8cf188720dec985e3b5087f4393ae09905 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Thu, 19 Jun 2025 16:05:32 -0700 Subject: [PATCH 4/5] Removed private helper method, using PollForHeartbeatAsync. --- .../NASParallelBenchExecutor.cs | 30 +------------------ 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs index 8a446114b9..0a1ff22bbc 100644 --- a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs @@ -7,15 +7,12 @@ namespace VirtualClient.Actions using System.Collections.Generic; using System.Net; using System.Net.Http; - using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; - using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; using VirtualClient.Common; using VirtualClient.Common.Extensions; - using VirtualClient.Common.Platform; using VirtualClient.Common.Telemetry; using VirtualClient.Contracts; @@ -146,7 +143,7 @@ private async Task BuildBinariesAsync(EventContext telemetryContext, Cancellatio IApiClientManager clientManager = this.Dependencies.GetService(); var apiClient = clientManager.GetOrCreateApiClient(IPAddress.Loopback.ToString(), IPAddress.Loopback); - await this.WaitForApiServerReadyAsync(apiClient, cancellationToken); + await apiClient.PollForHeartbeatAsync(TimeSpan.FromSeconds(30), cancellationToken); HttpResponseMessage response = await apiClient.GetStateAsync(nameof(this.NpbBuildState), cancellationToken) .ConfigureAwait(false); @@ -174,31 +171,6 @@ await this.LogProcessDetailsAsync(makeProcess, telemetryContext) } } - private async Task WaitForApiServerReadyAsync(IApiClient apiClient, CancellationToken cancellationToken, int timeoutSeconds = 30) - { - var timeout = TimeSpan.FromSeconds(timeoutSeconds); - var start = DateTime.UtcNow; - - while (DateTime.UtcNow - start < timeout) - { - try - { - var response = await apiClient.GetHeartbeatAsync(cancellationToken); - if (response.IsSuccessStatusCode) - { - return; - } - } - catch - { - } - - await Task.Delay(1000, cancellationToken); - } - - throw new Exception("API server did not become ready in time."); - } - private async Task CheckDistroSupportAsync(EventContext telemetryContext, CancellationToken cancellationToken) { if (this.Platform == PlatformID.Unix) From 3ebdbed6dd596ade9f1f382b200394e91472ae39 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Thu, 19 Jun 2025 16:17:18 -0700 Subject: [PATCH 5/5] Polling for 40 minutes. --- .../NASParallelBench/NASParallelBenchExecutor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs index 0a1ff22bbc..e5d1f7a27d 100644 --- a/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/NASParallelBench/NASParallelBenchExecutor.cs @@ -143,7 +143,7 @@ private async Task BuildBinariesAsync(EventContext telemetryContext, Cancellatio IApiClientManager clientManager = this.Dependencies.GetService(); var apiClient = clientManager.GetOrCreateApiClient(IPAddress.Loopback.ToString(), IPAddress.Loopback); - await apiClient.PollForHeartbeatAsync(TimeSpan.FromSeconds(30), cancellationToken); + await apiClient.PollForHeartbeatAsync(TimeSpan.FromMinutes(40), cancellationToken); HttpResponseMessage response = await apiClient.GetStateAsync(nameof(this.NpbBuildState), cancellationToken) .ConfigureAwait(false);