From e08570f99174b22e33775920212e478aac14df7c Mon Sep 17 00:00:00 2001 From: Youssef Fahmy Date: Tue, 14 Jul 2026 14:43:19 +0200 Subject: [PATCH 1/2] fix: differentiate unset value from null value in OpenApiSchema.Const (#2936) * Differentiate unset value from null value in OpenApiSchema.Const * Fix for ref * Fix default for * Different approach * Fix deserializing of const null * chore: update performance benchmark reports (#2) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> * chore(benchmark): update benchmark reports Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> --- .../performance.Descriptions-report-github.md | 12 ++-- .../performance.Descriptions-report.csv | 12 ++-- .../performance.Descriptions-report.html | 14 ++--- .../performance.Descriptions-report.json | 2 +- .../performance.EmptyModels-report-github.md | 56 +++++++++--------- .../performance.EmptyModels-report.csv | 56 +++++++++--------- .../performance.EmptyModels-report.html | 58 +++++++++---------- .../performance.EmptyModels-report.json | 2 +- .../Models/JsonSchemaReference.cs | 22 ++++++- src/Microsoft.OpenApi/Models/OpenApiSchema.cs | 34 +++++++++-- .../References/OpenApiSchemaReference.cs | 2 +- .../Reader/JsonNodeHelper.cs | 7 ++- .../Reader/V3/OpenApiV3Deserializer.cs | 2 +- .../Writers/OpenApiWriterExtensions.cs | 1 + .../V31Tests/OpenApiSchemaTests.cs | 49 ++++++++++++++++ .../OpenApiSchema/schemaWithConstNull.json | 21 +++++++ .../OpenApiSchema/schemaWithConstNull.json | 22 +++++++ 17 files changed, 257 insertions(+), 115 deletions(-) create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiSchema/schemaWithConstNull.json create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V32Tests/Samples/OpenApiSchema/schemaWithConstNull.json diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md index e3019f4d3..d369fd4da 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report-github.md @@ -12,9 +12,9 @@ WarmupCount=3 ``` | Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | |------------- |-------------:|--------------:|-------------:|-----------:|-----------:|----------:|-------------:| -| PetStoreYaml | 232.0 μs | 56.09 μs | 3.07 μs | 76.1719 | 9.7656 | - | 314.13 KB | -| PetStoreJson | 117.3 μs | 10.56 μs | 0.58 μs | 42.9688 | 7.3242 | - | 176.27 KB | -| GHESYaml | 621,674.1 μs | 152,892.95 μs | 8,380.58 μs | 45000.0000 | 19000.0000 | 3000.0000 | 256630.98 KB | -| GHESJson | 264,154.1 μs | 490,035.63 μs | 26,860.51 μs | 18000.0000 | 10000.0000 | 2000.0000 | 113802.94 KB | -| GHESNextYaml | 777,958.3 μs | 269,413.33 μs | 14,767.45 μs | 80000.0000 | 20000.0000 | 3000.0000 | 452706.23 KB | -| GHESNextJson | 432,900.8 μs | 561,774.69 μs | 30,792.77 μs | 54000.0000 | 14000.0000 | 3000.0000 | 314472.13 KB | +| PetStoreYaml | 352.2 μs | 299.63 μs | 16.42 μs | 89.8438 | 15.6250 | - | 367.82 KB | +| PetStoreJson | 147.2 μs | 88.89 μs | 4.87 μs | 48.8281 | - | - | 202.1 KB | +| GHESYaml | 673,081.0 μs | 446,393.95 μs | 24,468.36 μs | 54000.0000 | 20000.0000 | 3000.0000 | 309626.63 KB | +| GHESJson | 329,204.5 μs | 228,948.96 μs | 12,549.47 μs | 24000.0000 | 13000.0000 | 3000.0000 | 139236.93 KB | +| GHESNextYaml | 863,940.5 μs | 152,558.37 μs | 8,362.24 μs | 91000.0000 | 21000.0000 | 3000.0000 | 511080.8 KB | +| GHESNextJson | 485,171.6 μs | 68,963.33 μs | 3,780.11 μs | 58000.0000 | 14000.0000 | 3000.0000 | 342912.2 KB | diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv index c4ac9f16f..eba89d84b 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.csv @@ -1,7 +1,7 @@ Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated -PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,232.0 μs,56.09 μs,3.07 μs,76.1719,9.7656,0.0000,314.13 KB -PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,117.3 μs,10.56 μs,0.58 μs,42.9688,7.3242,0.0000,176.27 KB -GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"621,674.1 μs","152,892.95 μs","8,380.58 μs",45000.0000,19000.0000,3000.0000,256630.98 KB -GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"264,154.1 μs","490,035.63 μs","26,860.51 μs",18000.0000,10000.0000,2000.0000,113802.94 KB -GHESNextYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"777,958.3 μs","269,413.33 μs","14,767.45 μs",80000.0000,20000.0000,3000.0000,452706.23 KB -GHESNextJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"432,900.8 μs","561,774.69 μs","30,792.77 μs",54000.0000,14000.0000,3000.0000,314472.13 KB +PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,352.2 μs,299.63 μs,16.42 μs,89.8438,15.6250,0.0000,367.82 KB +PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,147.2 μs,88.89 μs,4.87 μs,48.8281,0.0000,0.0000,202.1 KB +GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"673,081.0 μs","446,393.95 μs","24,468.36 μs",54000.0000,20000.0000,3000.0000,309626.63 KB +GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"329,204.5 μs","228,948.96 μs","12,549.47 μs",24000.0000,13000.0000,3000.0000,139236.93 KB +GHESNextYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"863,940.5 μs","152,558.37 μs","8,362.24 μs",91000.0000,21000.0000,3000.0000,511080.8 KB +GHESNextJson,ShortRun,False,Default,Default,Default,Default,Default,Default,111111111111,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"485,171.6 μs","68,963.33 μs","3,780.11 μs",58000.0000,14000.0000,3000.0000,342912.2 KB diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html index 2fca70ae8..6f11135f9 100644 --- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html +++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html @@ -2,7 +2,7 @@ -performance.Descriptions-20260708-084315 +performance.Descriptions-20260714-084517