From 0bd813bf2b1bc75fe41a266e9781bca3c51bce59 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 13:22:12 +0000 Subject: [PATCH 01/19] Update dependencies from https://github.com/dotnet/diagnostics build 20240521.1 (#6704) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4ed878e130f..9c03ec21b6c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 35998bc24f3ce093f3cef0cc50e224f9b07847ca + 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 - + https://github.com/dotnet/diagnostics - 35998bc24f3ce093f3cef0cc50e224f9b07847ca + 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade e6f70c7dd528f05cd28cec2a179d58c22e91d9ac - + https://github.com/dotnet/diagnostics - 35998bc24f3ce093f3cef0cc50e224f9b07847ca + 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 4efff11eab7..cc3b16ea277 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24270.1 - 8.0.0-preview.24270.1 + 8.0.0-preview.24271.1 + 8.0.0-preview.24271.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.527001 + 1.0.527101 $(MicrosoftNETCoreApp31Version) From b22fa02f6187bfd18a35ab6cf7ca62fb12fffc9c Mon Sep 17 00:00:00 2001 From: Joe Schmitt <1146681+schmittjoseph@users.noreply.github.com> Date: Wed, 22 May 2024 13:08:57 -0700 Subject: [PATCH 02/19] Validate IPC message commandset before acknowledging (#6699) --- .../Communication/CommandServer.cpp | 24 ++++++++++++++++--- .../Communication/CommandServer.h | 9 +++++-- .../Communication/MessageCallbackManager.cpp | 16 ++++++++++--- .../Communication/MessageCallbackManager.h | 9 ++++++- .../MainProfiler/MainProfiler.cpp | 15 +++++++++++- .../MainProfiler/MainProfiler.h | 1 + src/inc/macros.h | 6 ++++- 7 files changed, 69 insertions(+), 11 deletions(-) diff --git a/src/Profilers/MonitorProfiler/Communication/CommandServer.cpp b/src/Profilers/MonitorProfiler/Communication/CommandServer.cpp index 7da903c2c00..3bae1c139a0 100644 --- a/src/Profilers/MonitorProfiler/Communication/CommandServer.cpp +++ b/src/Profilers/MonitorProfiler/Communication/CommandServer.cpp @@ -13,7 +13,10 @@ CommandServer::CommandServer(const std::shared_ptr& logger, ICorProfile { } -HRESULT CommandServer::Start(const std::string& path, std::function callback) +HRESULT CommandServer::Start( + const std::string& path, + std::function callback, + std::function validateMessageCallback) { if (_shutdown.load()) { @@ -31,6 +34,7 @@ HRESULT CommandServer::Start(const std::string& path, std::functionLog(LogLevel::Error, _LS("Unexpected error when receiving data: 0x%08x"), hr); + // Best-effort shutdown, ignore the result. + client->Shutdown(); continue; } + bool doEnqueueMessage = true; + hr = _validateMessageCallback(message); + if (FAILED(hr)) + { + _logger->Log(LogLevel::Error, _LS("Failed to validate message: 0x%08x"), hr); + doEnqueueMessage = false; + } + *reinterpret_cast(response.Payload.data()) = hr; hr = client->Send(response); if (FAILED(hr)) { _logger->Log(LogLevel::Error, _LS("Unexpected error when sending data: 0x%08x"), hr); - continue; + doEnqueueMessage = false; } hr = client->Shutdown(); if (FAILED(hr)) { _logger->Log(LogLevel::Warning, _LS("Unexpected error during shutdown: 0x%08x"), hr); + // Not fatal, keep processing the message } - _clientQueue.Enqueue(message); + if (doEnqueueMessage) + { + _clientQueue.Enqueue(message); + } } } diff --git a/src/Profilers/MonitorProfiler/Communication/CommandServer.h b/src/Profilers/MonitorProfiler/Communication/CommandServer.h index 71ff2b772bf..b94f042543f 100644 --- a/src/Profilers/MonitorProfiler/Communication/CommandServer.h +++ b/src/Profilers/MonitorProfiler/Communication/CommandServer.h @@ -19,7 +19,10 @@ class CommandServer final { public: CommandServer(const std::shared_ptr& logger, ICorProfilerInfo12* profilerInfo); - HRESULT Start(const std::string& path, std::function callback); + HRESULT Start( + const std::string& path, + std::function callback, + std::function validateMessageCallback); void Shutdown(); private: @@ -29,6 +32,8 @@ class CommandServer final std::atomic_bool _shutdown; std::function _callback; + std::function _validateMessageCallback; + IpcCommServer _server; BlockingQueue _clientQueue; @@ -38,4 +43,4 @@ class CommandServer final std::thread _clientThread; ComPtr _profilerInfo; -}; \ No newline at end of file +}; diff --git a/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.cpp b/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.cpp index 5c590702649..bd7744c1c01 100644 --- a/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.cpp +++ b/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.cpp @@ -3,6 +3,14 @@ #include "MessageCallbackManager.h" +bool MessageCallbackManager::IsRegistered(unsigned short commandSet) +{ + std::lock_guard lookupLock(m_lookupMutex); + + std::function existingCallback; + return TryGetCallback(commandSet, existingCallback); +} + bool MessageCallbackManager::TryRegister(unsigned short commandSet, ManagedMessageCallback pCallback) { return TryRegister(commandSet, [pCallback](const IpcMessage& message)-> HRESULT @@ -13,7 +21,8 @@ bool MessageCallbackManager::TryRegister(unsigned short commandSet, ManagedMessa bool MessageCallbackManager::TryRegister(unsigned short commandSet, std::function callback) { - std::lock_guard lock(m_mutex); + std::lock_guard dispatchLock(m_dispatchMutex); + std::lock_guard lookupLock(m_lookupMutex); std::function existingCallback; if (TryGetCallback(commandSet, existingCallback)) @@ -27,7 +36,7 @@ bool MessageCallbackManager::TryRegister(unsigned short commandSet, std::functio HRESULT MessageCallbackManager::DispatchMessage(const IpcMessage& message) { - std::lock_guard lock(m_mutex); + std::lock_guard dispatchLock(m_dispatchMutex); std::function callback; if (!TryGetCallback(message.CommandSet, callback)) @@ -40,7 +49,8 @@ HRESULT MessageCallbackManager::DispatchMessage(const IpcMessage& message) void MessageCallbackManager::Unregister(unsigned short commandSet) { - std::lock_guard lock(m_mutex); + std::lock_guard dispatchLock(m_dispatchMutex); + std::lock_guard lookupLock(m_lookupMutex); m_callbacks.erase(commandSet); } diff --git a/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.h b/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.h index fc7f77cd524..8dc23f3507e 100644 --- a/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.h +++ b/src/Profilers/MonitorProfiler/Communication/MessageCallbackManager.h @@ -16,11 +16,18 @@ class MessageCallbackManager { public: HRESULT DispatchMessage(const IpcMessage& message); + bool IsRegistered(unsigned short commandSet); bool TryRegister(unsigned short commandSet, std::function callback); bool TryRegister(unsigned short commandSet, ManagedMessageCallback pCallback); void Unregister(unsigned short commandSet); private: bool TryGetCallback(unsigned short commandSet, std::function& callback); std::unordered_map> m_callbacks; - std::mutex m_mutex; + // + // Ideally we would use a single std::shared_mutex instead, but we are targeting C++11 without + // an easy way to upgrade to C++17 at this time, so we use two separate mutexes instead to + // allow for IsRegistered to be used while a DispatchMessage call is in progress. + // + std::mutex m_dispatchMutex; + std::mutex m_lookupMutex; }; diff --git a/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.cpp b/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.cpp index 75796528a51..9383d5db211 100644 --- a/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.cpp +++ b/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.cpp @@ -247,7 +247,10 @@ HRESULT MainProfiler::InitializeCommandServer() return E_FAIL; } - hr = _commandServer->Start(to_string(socketPath), [this](const IpcMessage& message)-> HRESULT { return this->MessageCallback(message); }); + hr = _commandServer->Start( + to_string(socketPath), + [this](const IpcMessage& message)-> HRESULT { return this->MessageCallback(message); }, + [this](const IpcMessage& message)-> HRESULT { return this->ValidateMessage(message); }); if (FAILED(hr)) { g_MessageCallbacks.Unregister(static_cast(CommandSet::Profiler)); @@ -263,6 +266,16 @@ HRESULT MainProfiler::MessageCallback(const IpcMessage& message) return g_MessageCallbacks.DispatchMessage(message); } +HRESULT MainProfiler::ValidateMessage(const IpcMessage& message) +{ + if (g_MessageCallbacks.IsRegistered(message.CommandSet)) + { + return S_OK; + } + + return E_NOT_SUPPORTED; +} + HRESULT MainProfiler::ProfilerCommandSetCallback(const IpcMessage& message) { switch (static_cast(message.Command)) diff --git a/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.h b/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.h index 0f519da2e50..afc656bdd5c 100644 --- a/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.h +++ b/src/Profilers/MonitorProfiler/MainProfiler/MainProfiler.h @@ -54,6 +54,7 @@ class MainProfiler final : HRESULT InitializeEnvironmentHelper(); HRESULT InitializeCommandServer(); HRESULT MessageCallback(const IpcMessage& message); + HRESULT ValidateMessage(const IpcMessage& message); HRESULT ProfilerCommandSetCallback(const IpcMessage& message); HRESULT ProcessCallstackMessage(); private: diff --git a/src/inc/macros.h b/src/inc/macros.h index 89575286a90..ef8aeb7f976 100644 --- a/src/inc/macros.h +++ b/src/inc/macros.h @@ -16,8 +16,12 @@ #define E_NOT_SET HRESULT_FROM_WIN32(1168L) //ERROR_NOT_FOUND #endif +#ifndef E_NOT_SUPPORTED +#define E_NOT_SUPPORTED HRESULT_FROM_WIN32(50L) //ERROR_NOT_SUPPORTED +#endif + #ifndef IfOomRetMem #define START_NO_OOM_THROW_REGION try { #define END_NO_OOM_THROW_REGION } catch (const std::bad_alloc&) { return E_OUTOFMEMORY; } #define IfOomRetMem(exp) START_NO_OOM_THROW_REGION; exp; END_NO_OOM_THROW_REGION; -#endif \ No newline at end of file +#endif From cd0d6adcdfc7ede2108fb7bed1aa82e46fdf91bb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 13:32:00 +0000 Subject: [PATCH 03/19] Update dependencies from https://github.com/dotnet/arcade build 20240520.4 (#6710) [main] Update dependencies from dotnet/arcade --- eng/Version.Details.xml | 20 ++++++++++---------- eng/Versions.props | 6 +++--- global.json | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9c03ec21b6c..47434892e71 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -22,29 +22,29 @@ https://github.com/dotnet/roslyn-analyzers b4d9a1334d5189172977ba8fddd00bda70161e4a - + https://github.com/dotnet/arcade - e6f70c7dd528f05cd28cec2a179d58c22e91d9ac + f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/arcade - e6f70c7dd528f05cd28cec2a179d58c22e91d9ac + f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/arcade - e6f70c7dd528f05cd28cec2a179d58c22e91d9ac + f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/arcade - e6f70c7dd528f05cd28cec2a179d58c22e91d9ac + f2b2071632d5d4c46d0f904f2b0d917b1752551b https://github.com/dotnet/installer 68e8abb1d3e1a240a6e4c29dcd220aae91681676 - + https://github.com/dotnet/arcade - e6f70c7dd528f05cd28cec2a179d58c22e91d9ac + f2b2071632d5d4c46d0f904f2b0d917b1752551b https://github.com/dotnet/diagnostics diff --git a/eng/Versions.props b/eng/Versions.props index cc3b16ea277..fc56f9e696e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -48,9 +48,9 @@ --> - 8.0.0-beta.24266.3 - 8.0.0-beta.24266.3 - 8.0.0-beta.24266.3 + 8.0.0-beta.24270.4 + 8.0.0-beta.24270.4 + 8.0.0-beta.24270.4 8.0.1 8.0.1-servicing.23580.8 diff --git a/global.json b/global.json index 57112d4a1e4..243f0e838f0 100644 --- a/global.json +++ b/global.json @@ -26,7 +26,7 @@ }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.7.0", - "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24266.3", - "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.24266.3" + "Microsoft.DotNet.Arcade.Sdk": "8.0.0-beta.24270.4", + "Microsoft.DotNet.Helix.Sdk": "8.0.0-beta.24270.4" } } From 60ef6b8dd39937886ee3e3b179e757355e60743b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 25 May 2024 12:55:17 -0700 Subject: [PATCH 04/19] [main] Update dependencies from dotnet/diagnostics (#6709) --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 47434892e71..38417b390cc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 + 47a8d48ecc8d320682f1d22fdbbce71528d32a3b - + https://github.com/dotnet/diagnostics - 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 + 47a8d48ecc8d320682f1d22fdbbce71528d32a3b https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - 4a64bc5c0fd3abf17f5b10efbc91051c186db4d3 + 47a8d48ecc8d320682f1d22fdbbce71528d32a3b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index fc56f9e696e..9f48d8d04c9 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24271.1 - 8.0.0-preview.24271.1 + 8.0.0-preview.24273.1 + 8.0.0-preview.24273.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.527101 + 1.0.527301 $(MicrosoftNETCoreApp31Version) From ca21a9a4a401e38faf7206a5f39468b0b688c171 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 13:17:05 +0000 Subject: [PATCH 05/19] Update dependencies from https://github.com/dotnet/diagnostics build 20240524.3 (#6721) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 38417b390cc..b404c00389f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 47a8d48ecc8d320682f1d22fdbbce71528d32a3b + b50fca6e1024c29a41319df0729724dbe628dc4e - + https://github.com/dotnet/diagnostics - 47a8d48ecc8d320682f1d22fdbbce71528d32a3b + b50fca6e1024c29a41319df0729724dbe628dc4e https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - 47a8d48ecc8d320682f1d22fdbbce71528d32a3b + b50fca6e1024c29a41319df0729724dbe628dc4e https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 9f48d8d04c9..cd2f2ad02da 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24273.1 - 8.0.0-preview.24273.1 + 8.0.0-preview.24274.3 + 8.0.0-preview.24274.3 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.527301 + 1.0.527403 $(MicrosoftNETCoreApp31Version) From eadf4194745e3b5337b046e68f7e97deb071a554 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 13:46:04 +0000 Subject: [PATCH 06/19] Update dependencies from https://github.com/dotnet/diagnostics build 20240527.1 (#6724) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b404c00389f..7c1ee7957d1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - b50fca6e1024c29a41319df0729724dbe628dc4e + 7a3cfdfc6f2988f676ada70037df6b1a207ff55a - + https://github.com/dotnet/diagnostics - b50fca6e1024c29a41319df0729724dbe628dc4e + 7a3cfdfc6f2988f676ada70037df6b1a207ff55a https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - b50fca6e1024c29a41319df0729724dbe628dc4e + 7a3cfdfc6f2988f676ada70037df6b1a207ff55a https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index cd2f2ad02da..9068a4b249b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24274.3 - 8.0.0-preview.24274.3 + 8.0.0-preview.24277.1 + 8.0.0-preview.24277.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.527403 + 1.0.527701 $(MicrosoftNETCoreApp31Version) From 37959c3867f721b4889abdbf963dff2634f0ac01 Mon Sep 17 00:00:00 2001 From: Justin Anderson Date: Tue, 28 May 2024 10:21:29 -0700 Subject: [PATCH 07/19] Exclude 7.3 from CG (#6716) --- eng/pipelines/dotnet-monitor-cg.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/dotnet-monitor-cg.yml b/eng/pipelines/dotnet-monitor-cg.yml index 945a7fce46f..91d6932fe4c 100644 --- a/eng/pipelines/dotnet-monitor-cg.yml +++ b/eng/pipelines/dotnet-monitor-cg.yml @@ -5,6 +5,7 @@ schedules: include: - shipped/* exclude: + - shipped/7.3 - shipped/7.2 - shipped/7.1 always: true From 12cc023deaccc29c3e55152812f341be652e1d67 Mon Sep 17 00:00:00 2001 From: Joe Schmitt <1146681+schmittjoseph@users.noreply.github.com> Date: Tue, 28 May 2024 11:02:38 -0700 Subject: [PATCH 08/19] Configure request limits via DI (#6730) --- .../RequestThrottling/RequestLimit.cs | 7 +++++++ .../RequestThrottling/RequestLimitTracker.cs | 16 +++++----------- .../TestHostHelper.cs | 2 +- .../Commands/CollectCommandHandler.cs | 2 +- .../ServiceCollectionExtensions.cs | 17 +++++++++++++++++ 5 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimit.cs diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimit.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimit.cs new file mode 100644 index 00000000000..f082ddb429a --- /dev/null +++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimit.cs @@ -0,0 +1,7 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.Diagnostics.Monitoring.WebApi +{ + public sealed record RequestLimit(string Key, int Limit); +} diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs index 031b4225429..0f2f886ea4d 100644 --- a/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs +++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs @@ -27,19 +27,13 @@ private sealed class RequestCount : IDisposable private readonly ConcurrentDictionary _requestCounts = new(); private readonly ILogger _logger; - public RequestLimitTracker(ILogger logger) + public RequestLimitTracker(ILogger logger, IEnumerable limits) { - //CONSIDER Should we have configuration for these? + foreach (RequestLimit requestLimit in limits) + { + _requestLimitTable.Add(requestLimit.Key, requestLimit.Limit); + } - _requestLimitTable.Add(Utilities.ArtifactType_Dump, 1); - _requestLimitTable.Add(Utilities.ArtifactType_GCDump, 1); - _requestLimitTable.Add(Utilities.ArtifactType_Logs, 3); - _requestLimitTable.Add(Utilities.ArtifactType_Trace, 3); - _requestLimitTable.Add(Utilities.ArtifactType_Metrics, 3); - _requestLimitTable.Add(Utilities.ArtifactType_Stacks, 1); - _requestLimitTable.Add(Utilities.ArtifactType_Exceptions, 1); - _requestLimitTable.Add(Utilities.ArtifactType_Parameters, 1); - _requestLimitTable.Add(Unlimited, int.MaxValue); _logger = logger; } diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestHostHelper.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestHostHelper.cs index 386ac5add24..02c48fa9433 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestHostHelper.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/TestHostHelper.cs @@ -110,7 +110,7 @@ public static IHost CreateHost( } services.ConfigureEgress(); - services.AddSingleton(); + services.ConfigureRequestLimits(); services.ConfigureOperationStore(); services.ConfigureDiagnosticPort(context.Configuration); diff --git a/src/Tools/dotnet-monitor/Commands/CollectCommandHandler.cs b/src/Tools/dotnet-monitor/Commands/CollectCommandHandler.cs index 799ff74c852..f3282419c73 100644 --- a/src/Tools/dotnet-monitor/Commands/CollectCommandHandler.cs +++ b/src/Tools/dotnet-monitor/Commands/CollectCommandHandler.cs @@ -119,7 +119,7 @@ private static IHostBuilder Configure(this IHostBuilder builder, StartupAuthenti services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); + services.ConfigureRequestLimits(); services.ConfigureOperationStore(); services.ConfigureExtensions(); services.ConfigureExtensionLocations(settings); diff --git a/src/Tools/dotnet-monitor/ServiceCollectionExtensions.cs b/src/Tools/dotnet-monitor/ServiceCollectionExtensions.cs index 159ad6037e8..606cc93adf3 100644 --- a/src/Tools/dotnet-monitor/ServiceCollectionExtensions.cs +++ b/src/Tools/dotnet-monitor/ServiceCollectionExtensions.cs @@ -41,6 +41,7 @@ using Microsoft.Extensions.Options; using System; using System.IO; +using Utils = Microsoft.Diagnostics.Monitoring.WebApi.Utilities; namespace Microsoft.Diagnostics.Tools.Monitor { @@ -365,6 +366,22 @@ public static IServiceCollection ConfigureHostingStartup(this IServiceCollection return services; } + public static IServiceCollection ConfigureRequestLimits(this IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Dump, 1); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_GCDump, 1); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Logs, 3); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Trace, 3); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Metrics, 3); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Stacks, 1); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Exceptions, 1); }); + services.AddSingleton((_) => { return new RequestLimit(Utils.ArtifactType_Parameters, 1); }); + services.AddSingleton((_) => { return new RequestLimit(RequestLimitTracker.Unlimited, int.MaxValue); }); + + return services; + } + public static IServiceCollection ConfigureStartupHook(this IServiceCollection services) { services.AddScoped(); From 9fbb244f23537368a64eb8454ca5265745a8bfb3 Mon Sep 17 00:00:00 2001 From: Joe Schmitt <1146681+schmittjoseph@users.noreply.github.com> Date: Thu, 30 May 2024 09:29:48 -0700 Subject: [PATCH 09/19] Add retries (#6747) --- .../CollectionRuleDescriptionTests.cs | 418 +++++++++--------- 1 file changed, 215 insertions(+), 203 deletions(-) diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs index de40fd8d471..88702577df1 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs @@ -111,101 +111,107 @@ await ScenarioRunner.SingleTarget( [InlineData(DiagnosticPortConnectionMode.Listen)] public async Task CollectionRuleDescription_ActionLimitTest(DiagnosticPortConnectionMode mode) { - using TemporaryDirectory tempDirectory = new(_outputHelper); - string ExpectedFilePath = Path.Combine(tempDirectory.FullName, "file.txt"); - string ExpectedFileContent = Guid.NewGuid().ToString("N"); - - const int ExpectedActionCountLimit = 1; - - Task ruleCompletedTask = null; - - await ScenarioRunner.SingleTarget( - _outputHelper, - _httpClientFactory, - mode, - TestAppScenarios.SpinWait.Name, - appValidate: async (runner, client) => + await RetryUtilities.RetryAsync( + func: async () => { - // Validate detailed description for the NonStartup rule before spinning the CPU + using TemporaryDirectory tempDirectory = new(_outputHelper); + string ExpectedFilePath = Path.Combine(tempDirectory.FullName, "file.txt"); + string ExpectedFileContent = Guid.NewGuid().ToString("N"); - CollectionRuleDetailedDescription actualDetailedDescription_Before = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); - CollectionRuleDetailedDescription expectedDetailedDescription_Before = new() - { - ActionCountLimit = ExpectedActionCountLimit, - LifetimeOccurrences = 0, - SlidingWindowOccurrences = 0, - State = CollectionRuleState.Running, - StateReason = Running - }; - Assert.Equal(expectedDetailedDescription_Before, actualDetailedDescription_Before); + const int ExpectedActionCountLimit = 1; - // Validate brief descriptions for all rules before spinning the CPU + Task ruleCompletedTask = null; - Dictionary actualDescriptions_Before = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); - Dictionary expectedDescriptions_Before = new() - { + await ScenarioRunner.SingleTarget( + _outputHelper, + _httpClientFactory, + mode, + TestAppScenarios.SpinWait.Name, + appValidate: async (runner, client) => { - NonStartupRuleName, new CollectionRuleDescription() - { - State = expectedDetailedDescription_Before.State, - StateReason = expectedDetailedDescription_Before.StateReason - } - } - }; + // Validate detailed description for the NonStartup rule before spinning the CPU - ValidateCollectionRuleDescriptions(expectedDescriptions_Before, actualDescriptions_Before); + CollectionRuleDetailedDescription actualDetailedDescription_Before = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); + CollectionRuleDetailedDescription expectedDetailedDescription_Before = new() + { + ActionCountLimit = ExpectedActionCountLimit, + LifetimeOccurrences = 0, + SlidingWindowOccurrences = 0, + State = CollectionRuleState.Running, + StateReason = Running + }; + Assert.Equal(expectedDetailedDescription_Before, actualDetailedDescription_Before); + + // Validate brief descriptions for all rules before spinning the CPU + + Dictionary actualDescriptions_Before = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); + Dictionary expectedDescriptions_Before = new() + { + { + NonStartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_Before.State, + StateReason = expectedDetailedDescription_Before.StateReason + } + } + }; - await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StartSpin); + ValidateCollectionRuleDescriptions(expectedDescriptions_Before, actualDescriptions_Before); - await ruleCompletedTask; + await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StartSpin); - await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StopSpin); + await ruleCompletedTask; - // Validate detailed description for the NonStartup rule after spinning the CPU + await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StopSpin); - CollectionRuleDetailedDescription actualDetailedDescription_After = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); - CollectionRuleDetailedDescription expectedDetailedDescription_After = new() - { - ActionCountLimit = ExpectedActionCountLimit, - LifetimeOccurrences = 1, - SlidingWindowOccurrences = 1, - State = CollectionRuleState.Finished, - StateReason = FinishedActionCount - }; - Assert.Equal(expectedDetailedDescription_After, actualDetailedDescription_After); - - // Validate brief descriptions for all rules after spinning the CPU + // Validate detailed description for the NonStartup rule after spinning the CPU - Dictionary actualDescriptions_After = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); - Dictionary expectedDescriptions_After = new() - { - { - NonStartupRuleName, new CollectionRuleDescription() + CollectionRuleDetailedDescription actualDetailedDescription_After = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); + CollectionRuleDetailedDescription expectedDetailedDescription_After = new() { - State = expectedDetailedDescription_After.State, - StateReason = expectedDetailedDescription_After.StateReason - } - } - }; - - ValidateCollectionRuleDescriptions(expectedDescriptions_After, actualDescriptions_After); - }, - configureTool: runner => - { - runner.ConfigurationFromEnvironment.CreateCollectionRule(NonStartupRuleName) - .SetEventCounterTrigger(options => + ActionCountLimit = ExpectedActionCountLimit, + LifetimeOccurrences = 1, + SlidingWindowOccurrences = 1, + State = CollectionRuleState.Finished, + StateReason = FinishedActionCount + }; + Assert.Equal(expectedDetailedDescription_After, actualDetailedDescription_After); + + // Validate brief descriptions for all rules after spinning the CPU + + Dictionary actualDescriptions_After = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); + Dictionary expectedDescriptions_After = new() + { + { + NonStartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_After.State, + StateReason = expectedDetailedDescription_After.StateReason + } + } + }; + + ValidateCollectionRuleDescriptions(expectedDescriptions_After, actualDescriptions_After); + }, + configureTool: runner => { - // cpu usage greater than 1% for 1 second - options.ProviderName = "System.Runtime"; - options.CounterName = "cpu-usage"; - options.GreaterThan = 1; - options.SlidingWindowDuration = TimeSpan.FromSeconds(1); - }) - .AddExecuteActionAppAction(Assembly.GetExecutingAssembly(), "TextFileOutput", ExpectedFilePath, ExpectedFileContent) - .SetActionLimits(count: ExpectedActionCountLimit); - - ruleCompletedTask = runner.WaitForCollectionRuleCompleteAsync(NonStartupRuleName); - }); + runner.ConfigurationFromEnvironment.CreateCollectionRule(NonStartupRuleName) + .SetEventCounterTrigger(options => + { + // cpu usage greater than 1% for 1 second + options.ProviderName = "System.Runtime"; + options.CounterName = "cpu-usage"; + options.GreaterThan = 1; + options.SlidingWindowDuration = TimeSpan.FromSeconds(1); + }) + .AddExecuteActionAppAction(Assembly.GetExecutingAssembly(), "TextFileOutput", ExpectedFilePath, ExpectedFileContent) + .SetActionLimits(count: ExpectedActionCountLimit); + + ruleCompletedTask = runner.WaitForCollectionRuleCompleteAsync(NonStartupRuleName); + }); + }, + shouldRetry: (Exception ex) => ex is TaskCanceledException, + outputHelper: _outputHelper); } /// @@ -215,135 +221,141 @@ await ScenarioRunner.SingleTarget( [InlineData(DiagnosticPortConnectionMode.Listen)] public async Task CollectionRuleDescription_MultipleRulesTest(DiagnosticPortConnectionMode mode) { - using TemporaryDirectory tempDirectory = new(_outputHelper); - string ExpectedFilePath = Path.Combine(tempDirectory.FullName, "file.txt"); - string ExpectedFileContent = Guid.NewGuid().ToString("N"); - - const int ExpectedActionCountLimit = 1; - - Task ruleCompletedTask_Startup = null; - Task ruleCompletedTask_NonStartup = null; - - await ScenarioRunner.SingleTarget( - _outputHelper, - _httpClientFactory, - mode, - TestAppScenarios.SpinWait.Name, - appValidate: async (runner, client) => + await RetryUtilities.RetryAsync( + func: async () => { - await ruleCompletedTask_Startup; + using TemporaryDirectory tempDirectory = new(_outputHelper); + string ExpectedFilePath = Path.Combine(tempDirectory.FullName, "file.txt"); + string ExpectedFileContent = Guid.NewGuid().ToString("N"); - // Validate detailed description for the NonStartup rule - CollectionRuleDetailedDescription actualDetailedDescription_NonStartup = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); - CollectionRuleDetailedDescription expectedDetailedDescription_NonStartup = new() - { - ActionCountLimit = ExpectedActionCountLimit, - LifetimeOccurrences = 0, - SlidingWindowOccurrences = 0, - State = CollectionRuleState.Running, - StateReason = Running - }; - Assert.Equal(expectedDetailedDescription_NonStartup, actualDetailedDescription_NonStartup); + const int ExpectedActionCountLimit = 1; - // Validate detailed description for the Startup rule + Task ruleCompletedTask_Startup = null; + Task ruleCompletedTask_NonStartup = null; - CollectionRuleDetailedDescription actualDetailedDescription_Startup = await client.GetCollectionRuleDetailedDescriptionAsync(StartupRuleName, await runner.ProcessIdTask, null, null); - CollectionRuleDetailedDescription expectedDetailedDescription_Startup = new() - { - ActionCountLimit = CollectionRuleLimitsOptionsDefaults.ActionCount, - LifetimeOccurrences = 1, - SlidingWindowOccurrences = 1, - State = CollectionRuleState.Finished, - StateReason = FinishedStartup - }; - Assert.Equal(expectedDetailedDescription_Startup, actualDetailedDescription_Startup); - - // Validate brief descriptions for all rules - - Dictionary actualDescriptions = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); - Dictionary expectedDescriptions = new() - { - { - NonStartupRuleName, new CollectionRuleDescription() + await ScenarioRunner.SingleTarget( + _outputHelper, + _httpClientFactory, + mode, + TestAppScenarios.SpinWait.Name, + appValidate: async (runner, client) => { - State = expectedDetailedDescription_NonStartup.State, - StateReason = expectedDetailedDescription_NonStartup.StateReason - } - }, - { - StartupRuleName, new CollectionRuleDescription() + await ruleCompletedTask_Startup; + + // Validate detailed description for the NonStartup rule + CollectionRuleDetailedDescription actualDetailedDescription_NonStartup = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); + CollectionRuleDetailedDescription expectedDetailedDescription_NonStartup = new() + { + ActionCountLimit = ExpectedActionCountLimit, + LifetimeOccurrences = 0, + SlidingWindowOccurrences = 0, + State = CollectionRuleState.Running, + StateReason = Running + }; + Assert.Equal(expectedDetailedDescription_NonStartup, actualDetailedDescription_NonStartup); + + // Validate detailed description for the Startup rule + + CollectionRuleDetailedDescription actualDetailedDescription_Startup = await client.GetCollectionRuleDetailedDescriptionAsync(StartupRuleName, await runner.ProcessIdTask, null, null); + CollectionRuleDetailedDescription expectedDetailedDescription_Startup = new() + { + ActionCountLimit = CollectionRuleLimitsOptionsDefaults.ActionCount, + LifetimeOccurrences = 1, + SlidingWindowOccurrences = 1, + State = CollectionRuleState.Finished, + StateReason = FinishedStartup + }; + Assert.Equal(expectedDetailedDescription_Startup, actualDetailedDescription_Startup); + + // Validate brief descriptions for all rules + + Dictionary actualDescriptions = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); + Dictionary expectedDescriptions = new() + { + { + NonStartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_NonStartup.State, + StateReason = expectedDetailedDescription_NonStartup.StateReason + } + }, + { + StartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_Startup.State, + StateReason = expectedDetailedDescription_Startup.StateReason + } + } + }; + + ValidateCollectionRuleDescriptions(expectedDescriptions, actualDescriptions); + + await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StartSpin); + + await ruleCompletedTask_NonStartup; + + await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StopSpin); + + // Validate detailed description for the NonStartup rule after spinning the CPU + + CollectionRuleDetailedDescription actualDetailedDescription_After = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); + CollectionRuleDetailedDescription expectedDetailedDescription_After = new() + { + ActionCountLimit = ExpectedActionCountLimit, + LifetimeOccurrences = 1, + SlidingWindowOccurrences = 1, + State = CollectionRuleState.Finished, + StateReason = FinishedActionCount + }; + Assert.Equal(expectedDetailedDescription_After, actualDetailedDescription_After); + + // Validate brief descriptions for all rules after spinning the CPU + + Dictionary actualDescriptions_After = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); + Dictionary expectedDescriptions_After = new() + { + { + NonStartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_After.State, + StateReason = expectedDetailedDescription_After.StateReason + } + }, + { + StartupRuleName, new CollectionRuleDescription() + { + State = expectedDetailedDescription_Startup.State, + StateReason = expectedDetailedDescription_Startup.StateReason + } + } + }; + + ValidateCollectionRuleDescriptions(expectedDescriptions_After, actualDescriptions_After); + + }, + configureTool: runner => { - State = expectedDetailedDescription_Startup.State, - StateReason = expectedDetailedDescription_Startup.StateReason - } - } - }; - - ValidateCollectionRuleDescriptions(expectedDescriptions, actualDescriptions); - - await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StartSpin); - - await ruleCompletedTask_NonStartup; - - await runner.SendCommandAsync(TestAppScenarios.SpinWait.Commands.StopSpin); - - // Validate detailed description for the NonStartup rule after spinning the CPU - - CollectionRuleDetailedDescription actualDetailedDescription_After = await client.GetCollectionRuleDetailedDescriptionAsync(NonStartupRuleName, await runner.ProcessIdTask, null, null); - CollectionRuleDetailedDescription expectedDetailedDescription_After = new() - { - ActionCountLimit = ExpectedActionCountLimit, - LifetimeOccurrences = 1, - SlidingWindowOccurrences = 1, - State = CollectionRuleState.Finished, - StateReason = FinishedActionCount - }; - Assert.Equal(expectedDetailedDescription_After, actualDetailedDescription_After); - - // Validate brief descriptions for all rules after spinning the CPU - - Dictionary actualDescriptions_After = await client.GetCollectionRulesDescriptionAsync(await runner.ProcessIdTask, null, null); - Dictionary expectedDescriptions_After = new() - { - { - NonStartupRuleName, new CollectionRuleDescription() - { - State = expectedDetailedDescription_After.State, - StateReason = expectedDetailedDescription_After.StateReason - } - }, - { - StartupRuleName, new CollectionRuleDescription() - { - State = expectedDetailedDescription_Startup.State, - StateReason = expectedDetailedDescription_Startup.StateReason - } - } - }; - - ValidateCollectionRuleDescriptions(expectedDescriptions_After, actualDescriptions_After); - + runner.ConfigurationFromEnvironment.CreateCollectionRule(NonStartupRuleName) + .SetEventCounterTrigger(options => + { + // cpu usage greater than 1% for 1 second + options.ProviderName = "System.Runtime"; + options.CounterName = "cpu-usage"; + options.GreaterThan = 1; + options.SlidingWindowDuration = TimeSpan.FromSeconds(1); + }) + .AddExecuteActionAppAction(Assembly.GetExecutingAssembly(), "TextFileOutput", ExpectedFilePath, ExpectedFileContent) + .SetActionLimits(count: ExpectedActionCountLimit); + + runner.ConfigurationFromEnvironment.CreateCollectionRule(StartupRuleName) + .SetStartupTrigger(); + + ruleCompletedTask_Startup = runner.WaitForCollectionRuleCompleteAsync(StartupRuleName); + ruleCompletedTask_NonStartup = runner.WaitForCollectionRuleCompleteAsync(NonStartupRuleName); + }); }, - configureTool: runner => - { - runner.ConfigurationFromEnvironment.CreateCollectionRule(NonStartupRuleName) - .SetEventCounterTrigger(options => - { - // cpu usage greater than 1% for 1 second - options.ProviderName = "System.Runtime"; - options.CounterName = "cpu-usage"; - options.GreaterThan = 1; - options.SlidingWindowDuration = TimeSpan.FromSeconds(1); - }) - .AddExecuteActionAppAction(Assembly.GetExecutingAssembly(), "TextFileOutput", ExpectedFilePath, ExpectedFileContent) - .SetActionLimits(count: ExpectedActionCountLimit); - - runner.ConfigurationFromEnvironment.CreateCollectionRule(StartupRuleName) - .SetStartupTrigger(); - - ruleCompletedTask_Startup = runner.WaitForCollectionRuleCompleteAsync(StartupRuleName); - ruleCompletedTask_NonStartup = runner.WaitForCollectionRuleCompleteAsync(NonStartupRuleName); - }); + shouldRetry: (Exception ex) => ex is TaskCanceledException, + outputHelper: _outputHelper); } private static void ValidateCollectionRuleDescriptions(Dictionary expectedCollectionRuleDescriptions, Dictionary actualCollectionRuleDescriptions) From 47c7ad91e99e04f6aba9373434665fb253755d5f Mon Sep 17 00:00:00 2001 From: Claudiu Guiman Date: Thu, 30 May 2024 15:57:47 -0400 Subject: [PATCH 10/19] ParameterCapturingTests: Increase capture duration and set limit to 1 (#6752) --- .../HttpApi/ApiClient.cs | 2 +- .../ParameterCapturingTests.cs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs index b4b84dc2b1a..c6907b2fbda 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs @@ -628,7 +628,7 @@ public async Task CaptureParametersAsync(int processId, TimeS } bool isInfinite = (duration == Timeout.InfiniteTimeSpan); - string uri = FormattableString.Invariant($"/parameters?pid={processId}&durationSeconds={(isInfinite ? -1 : duration.Seconds)}"); + string uri = FormattableString.Invariant($"/parameters?pid={processId}&durationSeconds={(isInfinite ? -1 : duration.TotalSeconds)}"); if (!string.IsNullOrEmpty(egressProvider)) { uri += FormattableString.Invariant($"&egressProvider={egressProvider}"); diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ParameterCapturingTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ParameterCapturingTests.cs index 0d91d93bc7c..ee16752cbf5 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ParameterCapturingTests.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ParameterCapturingTests.cs @@ -21,9 +21,8 @@ using System.Runtime.InteropServices; using System.Text.Json; using System.Text.Json.Serialization; -#if NET7_0_OR_GREATER using System.Threading; -#endif + using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -114,7 +113,7 @@ await RunTestCaseCore(TestAppScenarios.ParameterCapturing.SubScenarios.AspNetApp CaptureParametersConfiguration config = GetValidConfiguration(); - ValidationProblemDetailsException validationException = await Assert.ThrowsAsync(() => apiClient.CaptureParametersAsync(processId, TimeSpan.FromSeconds(1), config)); + ValidationProblemDetailsException validationException = await Assert.ThrowsAsync(() => apiClient.CaptureParametersAsync(processId, Timeout.InfiniteTimeSpan, config)); Assert.Equal(HttpStatusCode.BadRequest, validationException.StatusCode); await appRunner.SendCommandAsync(TestAppScenarios.ParameterCapturing.Commands.Continue); @@ -131,7 +130,7 @@ await RunTestCaseCore(TestAppScenarios.ParameterCapturing.SubScenarios.AspNetApp CaptureParametersConfiguration config = GetValidConfiguration(); MethodDescription expectedCapturedMethod = config.Methods[0]; - OperationResponse response = await apiClient.CaptureParametersAsync(processId, TimeSpan.FromSeconds(2), config, format, FileProviderName); + OperationResponse response = await apiClient.CaptureParametersAsync(processId, CommonTestTimeouts.GeneralTimeout, config, format, FileProviderName); Assert.Equal(HttpStatusCode.Accepted, response.StatusCode); OperationStatusResponse _ = await apiClient.WaitForOperationToStart(response.OperationUri); @@ -194,7 +193,8 @@ private static CaptureParametersConfiguration GetValidConfiguration() TypeName = "SampleMethods.StaticTestMethodSignatures", MethodName = "NoArgs" } - } + }, + CaptureLimit = 1 }; } From 0f2717449942c57f4e48c3434b9a101995927629 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 14:53:06 -0700 Subject: [PATCH 11/19] [main] Bump Microsoft.NETCore.DotNetHost in /eng/dependabot/net6.0 (#6742) Bumps [Microsoft.NETCore.DotNetHost](https://github.com/dotnet/runtime) from 6.0.30 to 6.0.31. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v6.0.30...v6.0.31) --- updated-dependencies: - dependency-name: Microsoft.NETCore.DotNetHost dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- eng/dependabot/net6.0/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/dependabot/net6.0/Versions.props b/eng/dependabot/net6.0/Versions.props index c916bdfb645..eba3a04dc1e 100644 --- a/eng/dependabot/net6.0/Versions.props +++ b/eng/dependabot/net6.0/Versions.props @@ -10,6 +10,6 @@ 6.0.0 - 6.0.30 + 6.0.31 From 703a84ae3eb928204b15ad7a461a61decf652463 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 14:54:26 -0700 Subject: [PATCH 12/19] [main] Bump Microsoft.NETCore.DotNetHost in /eng/dependabot/net7.0 (#6739) Bumps [Microsoft.NETCore.DotNetHost](https://github.com/dotnet/runtime) from 7.0.19 to 7.0.20. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.19...v7.0.20) --- updated-dependencies: - dependency-name: Microsoft.NETCore.DotNetHost dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- eng/dependabot/net7.0/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/dependabot/net7.0/Versions.props b/eng/dependabot/net7.0/Versions.props index e63b1a1fd98..c83d32c994f 100644 --- a/eng/dependabot/net7.0/Versions.props +++ b/eng/dependabot/net7.0/Versions.props @@ -10,6 +10,6 @@ 7.0.0 - 7.0.19 + 7.0.20 From 3c31273c42196ec0813b7b5b947ab8e1bd1801ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 14:54:43 -0700 Subject: [PATCH 13/19] [main] Bump Microsoft.Identity.Web (#6738) Bumps the identity-dependencies group in /eng/dependabot/independent with 1 update: [Microsoft.Identity.Web](https://github.com/AzureAD/microsoft-identity-web). Updates `Microsoft.Identity.Web` from 2.18.2 to 2.19.0 - [Release notes](https://github.com/AzureAD/microsoft-identity-web/releases) - [Changelog](https://github.com/AzureAD/microsoft-identity-web/blob/master/changelog.md) - [Commits](https://github.com/AzureAD/microsoft-identity-web/compare/2.18.2...2.19.0) --- updated-dependencies: - dependency-name: Microsoft.Identity.Web dependency-type: direct:production update-type: version-update:semver-minor dependency-group: identity-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- eng/dependabot/independent/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/dependabot/independent/Versions.props b/eng/dependabot/independent/Versions.props index f18b1e139bc..c40341aaac7 100644 --- a/eng/dependabot/independent/Versions.props +++ b/eng/dependabot/independent/Versions.props @@ -5,7 +5,7 @@ 1.11.3 12.20.0 12.18.0 - 2.18.2 + 2.19.0 1.6.14 4.3.2 5.0.0 From e5430b50243a17eac4294849e46eddec9e9340d3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:19:48 +0000 Subject: [PATCH 14/19] [main] Update dependencies from dotnet/diagnostics (#6759) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7c1ee7957d1..cfe3dfddb87 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 7a3cfdfc6f2988f676ada70037df6b1a207ff55a + 481674f73f11e8096f48820ae133d98c88d64a14 - + https://github.com/dotnet/diagnostics - 7a3cfdfc6f2988f676ada70037df6b1a207ff55a + 481674f73f11e8096f48820ae133d98c88d64a14 https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - 7a3cfdfc6f2988f676ada70037df6b1a207ff55a + 481674f73f11e8096f48820ae133d98c88d64a14 https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 9068a4b249b..4adea73195f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24277.1 - 8.0.0-preview.24277.1 + 8.0.0-preview.24281.1 + 8.0.0-preview.24281.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.527701 + 1.0.528101 $(MicrosoftNETCoreApp31Version) From 6a13c8f695673e0e63ccce3266deeb9b4e4e9506 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 11:32:26 -0700 Subject: [PATCH 15/19] [main] Bump Microsoft.NETCore.DotNetHost in /eng/dependabot/net8.0 (#6736) Bumps [Microsoft.NETCore.DotNetHost](https://github.com/dotnet/runtime) from 8.0.5 to 8.0.6. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.5...v8.0.6) --- updated-dependencies: - dependency-name: Microsoft.NETCore.DotNetHost dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wiktor Kopec --- eng/dependabot/net8.0/Versions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/dependabot/net8.0/Versions.props b/eng/dependabot/net8.0/Versions.props index 0dd5910c8a9..81bacd28d4c 100644 --- a/eng/dependabot/net8.0/Versions.props +++ b/eng/dependabot/net8.0/Versions.props @@ -10,6 +10,6 @@ 8.0.0 - 8.0.5 + 8.0.6 From 4fb831d4f433edc90e7945c092ebb9483c38dee5 Mon Sep 17 00:00:00 2001 From: AntonPalyok Date: Tue, 4 Jun 2024 01:09:10 +0200 Subject: [PATCH 16/19] Add documentation note about in-process features are only supported in Listen mode. (#6755) * Add documentation note about in-process features are only supported in Listen mode. * Update 'github-action-markdown-link-check' to latest version to fix markdown link validation issues * Fix wrong links in documentation/api/definitions.md * Ignore 'hub.docker.com' in markdown link checker because it returns Status Code 405 on GET requests. --- .github/linters/check-markdown-links-config.json | 3 +++ .github/workflows/check-markdown-links.yml | 2 +- documentation/api/definitions.md | 4 ++-- documentation/api/stacks.md | 4 ++-- .../configuration/in-process-features-configuration.md | 4 ++++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/linters/check-markdown-links-config.json b/.github/linters/check-markdown-links-config.json index 49b07a50043..ef2b131a34c 100644 --- a/.github/linters/check-markdown-links-config.json +++ b/.github/linters/check-markdown-links-config.json @@ -11,6 +11,9 @@ }, { "pattern": "^https://www\\.dotnetfoundation.org/.*" + }, + { + "pattern": "^https://hub\\.docker\\.com/.*" } ], "aliveStatusCodes": [ diff --git a/.github/workflows/check-markdown-links.yml b/.github/workflows/check-markdown-links.yml index eecf9969116..cd7e01d655b 100644 --- a/.github/workflows/check-markdown-links.yml +++ b/.github/workflows/check-markdown-links.yml @@ -19,7 +19,7 @@ jobs: persist-credentials: false - name: Check markdown links - uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368 + uses: gaurav-nelson/github-action-markdown-link-check@7d83e59a57f3c201c76eed3d33dff64ec4452d27 with: config-file: .github/linters/check-markdown-links-config.json use-quiet-mode: 'yes' diff --git a/documentation/api/definitions.md b/documentation/api/definitions.md index b7b55aa2571..dff57e617e4 100644 --- a/documentation/api/definitions.md +++ b/documentation/api/definitions.md @@ -54,7 +54,7 @@ Object describing the basic state of a collection rule for the executing instanc | Name | Type | Description | |---|---|---| -| State | [CollectionRuleState](#collectionrulestate-63) | Indicates what state the collection rule is in for the current process. | +| State | [CollectionRuleState](#collectionrulestate) | Indicates what state the collection rule is in for the current process. | | StateReason | string | Human-readable explanation for the current state of the collection rule. | ## CollectionRuleDetailedDescription @@ -65,7 +65,7 @@ Object describing the detailed state of a collection rule for the executing inst | Name | Type | Description | |---|---|---| -| State | [CollectionRuleState](#collectionrulestate-63) | Indicates what state the collection rule is in for the current process. | +| State | [CollectionRuleState](#collectionrulestate) | Indicates what state the collection rule is in for the current process. | | StateReason | string | Human-readable explanation for the current state of the collection rule. | | LifetimeOccurrences | int | The number of times the trigger has executed for a process in its lifetime. | | SlidingWindowOccurrences | int | The number of times the trigger has executed within the current sliding window. | diff --git a/documentation/api/stacks.md b/documentation/api/stacks.md index 7efd903dd52..4147e7f57a4 100644 --- a/documentation/api/stacks.md +++ b/documentation/api/stacks.md @@ -62,7 +62,7 @@ Allowed schemes: ### Sample Request ```http -GET /stack?pid=21632 HTTP/1.1 +GET /stacks?pid=21632 HTTP/1.1 Host: localhost:52323 Authorization: Bearer fffffffffffffffffffffffffffffffffffffffffff= Accept: application/json @@ -100,7 +100,7 @@ Location: localhost:52323/operations/67f07e40-5cca-4709-9062-26302c484f18 ### Sample Request ```http -GET /stack?pid=21632 HTTP/1.1 +GET /stacks?pid=21632 HTTP/1.1 Host: localhost:52323 Authorization: Bearer fffffffffffffffffffffffffffffffffffffffffff= Accept: text/plain diff --git a/documentation/configuration/in-process-features-configuration.md b/documentation/configuration/in-process-features-configuration.md index 26d7578259d..b8503cc1215 100644 --- a/documentation/configuration/in-process-features-configuration.md +++ b/documentation/configuration/in-process-features-configuration.md @@ -4,6 +4,10 @@ First Available: 8.0 Preview 7 +> [!NOTE] +> In-process features are only supported when running dotnet-monitor in `Listen` mode. +> See [Diagnostic Port](./diagnostic-port-configuration.md) configuration for details. + Some features of `dotnet monitor` require loading libraries into target applications. These libraries ship with `dotnet monitor` and are provisioned to be available to target applications using the `DefaultSharedPath` option in the [storage configuration](./storage-configuration.md) section. The following features require these in-process libraries to be used: - [Call Stacks](#call-stacks) From 70f3537e8459a2de835b4d4a55e713e7ee55b711 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:04:08 +0000 Subject: [PATCH 17/19] Update dependencies from https://github.com/dotnet/diagnostics build 20240603.1 (#6763) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cfe3dfddb87..f3d6efaf33a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 481674f73f11e8096f48820ae133d98c88d64a14 + 05f88f687a02aa865384beda97a8910d4d57b17b - + https://github.com/dotnet/diagnostics - 481674f73f11e8096f48820ae133d98c88d64a14 + 05f88f687a02aa865384beda97a8910d4d57b17b https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - 481674f73f11e8096f48820ae133d98c88d64a14 + 05f88f687a02aa865384beda97a8910d4d57b17b https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 4adea73195f..92465ac9dd9 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24281.1 - 8.0.0-preview.24281.1 + 8.0.0-preview.24303.1 + 8.0.0-preview.24303.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.528101 + 1.0.530301 $(MicrosoftNETCoreApp31Version) From 3bcbcafdbc5462cdc9af6b50afd32ef3d5f0e304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:13:50 -0700 Subject: [PATCH 18/19] Bump dawidd6/action-download-artifact from 3.1.4 to 5 (#6767) Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 3.1.4 to 5. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/09f2f74827fd3a8607589e5ad7f9398816f540fe...deb3bb83256a78589fef6a7b942e5f2573ad7c13) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/submit-linter-suggestions.yml | 2 +- .github/workflows/submit-to-do-issue.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/submit-linter-suggestions.yml b/.github/workflows/submit-linter-suggestions.yml index cc98a9b091b..688a9abfe04 100644 --- a/.github/workflows/submit-linter-suggestions.yml +++ b/.github/workflows/submit-linter-suggestions.yml @@ -49,7 +49,7 @@ jobs: # The default artifact download action doesn't support cross-workflow # artifacts, so use a 3rd party one. - name: 'Download linting results' - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe + uses: dawidd6/action-download-artifact@deb3bb83256a78589fef6a7b942e5f2573ad7c13 with: workflow: ${{env.workflow_name}} run_id: ${{github.event.workflow_run.id }} diff --git a/.github/workflows/submit-to-do-issue.yml b/.github/workflows/submit-to-do-issue.yml index 518ac4a701e..1a77ad39cf0 100644 --- a/.github/workflows/submit-to-do-issue.yml +++ b/.github/workflows/submit-to-do-issue.yml @@ -35,7 +35,7 @@ jobs: # The default artifact download action doesn't support cross-workflow # artifacts, so use a 3rd party one. - name: 'Download linting results' - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe + uses: dawidd6/action-download-artifact@deb3bb83256a78589fef6a7b942e5f2573ad7c13 with: workflow: ${{env.workflow_name}} run_id: ${{github.event.workflow_run.id }} From f653b640dd9ed817812ce6f1bf3927f016d40aed Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:06:18 +0000 Subject: [PATCH 19/19] Update dependencies from https://github.com/dotnet/diagnostics build 20240604.1 (#6773) [main] Update dependencies from dotnet/diagnostics --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f3d6efaf33a..8df5c729251 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://dev.azure.com/dnceng/internal/_git/dotnet-aspnetcore 8e941eb42f819adb116b881195158b3887a70a1c - + https://github.com/dotnet/diagnostics - 05f88f687a02aa865384beda97a8910d4d57b17b + 1c854868f031c1fb9cb2e175baaab120a42b42fd - + https://github.com/dotnet/diagnostics - 05f88f687a02aa865384beda97a8910d4d57b17b + 1c854868f031c1fb9cb2e175baaab120a42b42fd https://github.com/dotnet/command-line-api @@ -46,9 +46,9 @@ https://github.com/dotnet/arcade f2b2071632d5d4c46d0f904f2b0d917b1752551b - + https://github.com/dotnet/diagnostics - 05f88f687a02aa865384beda97a8910d4d57b17b + 1c854868f031c1fb9cb2e175baaab120a42b42fd https://dev.azure.com/dnceng/internal/_git/dotnet-runtime diff --git a/eng/Versions.props b/eng/Versions.props index 92465ac9dd9..4645d782daa 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -57,8 +57,8 @@ 2.0.0-beta4.24209.3 - 8.0.0-preview.24303.1 - 8.0.0-preview.24303.1 + 8.0.0-preview.24304.1 + 8.0.0-preview.24304.1 8.0.103-servicing.24114.15 @@ -67,7 +67,7 @@ 8.0.1 8.0.1-servicing.23580.1 - 1.0.530301 + 1.0.530401 $(MicrosoftNETCoreApp31Version)