Skip to content

Commit 42b9240

Browse files
committed
Release 5.23.0
1 parent 503b46b commit 42b9240

File tree

108 files changed

+2379
-1410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+2379
-1410
lines changed

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,33 @@
11
Release Notes
22
====
33

4+
# 06-29-2025
5+
<a href="https://www.nuget.org/packages/dotnext/5.23.0">DotNext 5.23.0</a>
6+
* Added `Atomic.Read` and `Atomic.Write` methods for **long** and **ulong** data types for cross-architecture support of atomic reads/writes
7+
* Fixed compatibility with 32-bit arch for `Timstamp` data type
8+
9+
<a href="https://www.nuget.org/packages/dotnext.metaprogramming/5.23.0">DotNext.Metaprogramming 5.23.0</a>
10+
* Updated dependencies
11+
12+
<a href="https://www.nuget.org/packages/dotnext.unsafe/5.23.0">DotNext.Unsafe 5.23.0</a>
13+
* Added `UnmanagedMemory<T>` data type that provides allocation of the blittable value in the unmanaged memory in CLS-compliant manner
14+
* Introduced `UnmanagedMemory.Discard` static method for detaching of the physical memory from the virtual memory page
15+
16+
<a href="https://www.nuget.org/packages/dotnext.threading/5.23.0">DotNext.Threading 5.23.0</a>
17+
* Fixed compatibility with 32-bit arch for asynchronous primitives and `IndexPool` data type
18+
* Replaced spin wait with the monitor lock for value task sources
19+
20+
<a href="https://www.nuget.org/packages/dotnext.io/5.23.0">DotNext.IO 5.23.0</a>
21+
* Updated dependencies
22+
23+
<a href="https://www.nuget.org/packages/dotnext.net.cluster/5.23.0">DotNext.Net.Cluster 5.23.0</a>
24+
* Introduced private memory allocation type for `WriteAheadLog` class
25+
* Added support of Linux Transparent Huge Pages for `WriteAheadLog` class when private memory allocation is enabled
26+
* `WriteAheadLog.FlushAsync` ensures that the background flush is completed
27+
28+
<a href="https://www.nuget.org/packages/dotnext.aspnetcore.cluster/5.23.0">DotNext.AspNetCore.Cluster 5.23.0</a>
29+
* Updated dependencies
30+
431
# 05-30-2025
532
<a href="https://www.nuget.org/packages/dotnext/5.22.0">DotNext 5.22.0</a>
633
* Added `!` operator overloading for the result and optional types: [261](https://github.com/dotnet/dotNext/pull/261)

README.md

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,33 @@ All these things are implemented in 100% managed code on top of existing .NET AP
4444
* [NuGet Packages](https://www.nuget.org/profiles/rvsakno)
4545

4646
# What's new
47-
Release Date: 05-30-2025
47+
Release Date: 06-29-2025
4848

49-
<a href="https://www.nuget.org/packages/dotnext/5.22.0">DotNext 5.22.0</a>
50-
* Added `!` operator overloading for the result and optional types: [261](https://github.com/dotnet/dotNext/pull/261)
49+
<a href="https://www.nuget.org/packages/dotnext/5.23.0">DotNext 5.23.0</a>
50+
* Added `Atomic.Read` and `Atomic.Write` methods for **long** and **ulong** data types for cross-architecture support of atomic reads/writes
51+
* Fixed compatibility with 32-bit arch for `Timstamp` data type
5152

52-
<a href="https://www.nuget.org/packages/dotnext.metaprogramming/5.22.0">DotNext.Metaprogramming 5.22.0</a>
53+
<a href="https://www.nuget.org/packages/dotnext.metaprogramming/5.23.0">DotNext.Metaprogramming 5.23.0</a>
5354
* Updated dependencies
5455

55-
<a href="https://www.nuget.org/packages/dotnext.unsafe/5.22.0">DotNext.Unsafe 5.22.0</a>
56-
* Updated dependencies
56+
<a href="https://www.nuget.org/packages/dotnext.unsafe/5.23.0">DotNext.Unsafe 5.23.0</a>
57+
* Added `UnmanagedMemory<T>` data type that provides allocation of the blittable value in the unmanaged memory in CLS-compliant manner
58+
* Introduced `UnmanagedMemory.Discard` static method for detaching of the physical memory from the virtual memory page
5759

58-
<a href="https://www.nuget.org/packages/dotnext.threading/5.22.0">DotNext.Threading 5.22.0</a>
59-
* Added `Interrupt` method to `AsyncTrigger` class
60+
<a href="https://www.nuget.org/packages/dotnext.threading/5.23.0">DotNext.Threading 5.23.0</a>
61+
* Fixed compatibility with 32-bit arch for asynchronous primitives and `IndexPool` data type
62+
* Replaced spin wait with the monitor lock for value task sources
6063

61-
<a href="https://www.nuget.org/packages/dotnext.io/5.22.0">DotNext.IO 5.22.0</a>
64+
<a href="https://www.nuget.org/packages/dotnext.io/5.23.0">DotNext.IO 5.23.0</a>
6265
* Updated dependencies
6366

64-
<a href="https://www.nuget.org/packages/dotnext.net.cluster/5.22.0">DotNext.Net.Cluster 5.22.0</a>
65-
* Introduced a new `WriteAheadLog` experimental class as long-term replacement of `MemoryBasedStateMachine` and `DiskBasedStateMachine`. Both classes remain available in the current major version. However, they are subject to removal in the next major version. A new write-ahead log provides much better performance, simpler configuration and simpler API
67+
<a href="https://www.nuget.org/packages/dotnext.net.cluster/5.23.0">DotNext.Net.Cluster 5.23.0</a>
68+
* Introduced private memory allocation type for `WriteAheadLog` class
69+
* Added support of Linux Transparent Huge Pages for `WriteAheadLog` class when private memory allocation is enabled
70+
* `WriteAheadLog.FlushAsync` ensures that the background flush is completed
6671

67-
<a href="https://www.nuget.org/packages/dotnext.aspnetcore.cluster/5.22.0">DotNext.AspNetCore.Cluster 5.22.0</a>
68-
* Added new configuration helper methods to support new write-ahead log
72+
<a href="https://www.nuget.org/packages/dotnext.aspnetcore.cluster/5.23.0">DotNext.AspNetCore.Cluster 5.23.0</a>
73+
* Updated dependencies
6974

7075
Changelog for previous versions located [here](./CHANGELOG.md).
7176

src/Directory.Packages.props

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,28 @@
2020
</ItemGroup>
2121
<ItemGroup>
2222
<!--Microsoft packages-->
23-
<PackageVersion Include="Microsoft.AspNetCore.Connections.Abstractions" Version="8.0.14" />
23+
<PackageVersion Include="Microsoft.AspNetCore.Connections.Abstractions" Version="8.0.16" />
2424
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" />
2525
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />
2626
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
2727
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.1" />
2828
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
2929
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
3030
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
31-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
32-
<PackageVersion Include="MSTest.Engine" Version="1.0.0-alpha.25167.10" />
33-
<PackageVersion Include="MSTest.SourceGeneration" Version="1.0.0-alpha.25167.10" />
34-
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.6.3" />
35-
<PackageVersion Include="Microsoft.Testing.Platform.MSBuild" Version="1.6.3" />
36-
<PackageVersion Include="MSTest.TestFramework" Version="3.8.3" />
37-
<PackageVersion Include="MSTest.Analyzers" Version="3.8.3" />
31+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
32+
<PackageVersion Include="MSTest.Engine" Version="1.0.0-alpha.25277.3" />
33+
<PackageVersion Include="MSTest.SourceGeneration" Version="1.0.0-alpha.25277.3" />
34+
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.7.1" />
35+
<PackageVersion Include="Microsoft.Testing.Platform.MSBuild" Version="1.7.1" />
36+
<PackageVersion Include="MSTest.TestFramework" Version="3.9.1" />
37+
<PackageVersion Include="MSTest.Analyzers" Version="3.9.1" />
3838
</ItemGroup>
3939
<ItemGroup>
4040
<!--Misc packages-->
41-
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
41+
<PackageVersion Include="BenchmarkDotNet" Version="0.15.0" />
4242
<PackageVersion Include="FastMember.Signed" Version="1.5.0" />
4343
<PackageVersion Include="xunit" Version="2.9.3" />
44-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
44+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.0" />
4545
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
4646
</ItemGroup>
4747
</Project>

src/DotNext.AotTests/DotNext.AotTests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<RootNamespace>DotNext</RootNamespace>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
8-
<Version>5.22.0</Version>
98
<IsPackable>false</IsPackable>
109
<Authors>.NET Foundation and Contributors</Authors>
1110
<Product>.NEXT Family of Libraries</Product>

src/DotNext.Benchmarks.WAL/DotNext.Benchmarks.WAL.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
<Copyright>Copyright © .NET Foundation and Contributors</Copyright>
1212
<RootNamespace>DotNext.Benchmarks.WAL</RootNamespace>
1313
<NoWarn>$(NoWarn);DOTNEXT001</NoWarn>
14-
<Version>5.22.0</Version>
1514
</PropertyGroup>
1615

1716
<ItemGroup>

src/DotNext.Benchmarks.WAL/Program.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using FASTER.core;
99

1010
const int count = 2000;
11+
const int entrySize = 1024;
1112
using var cts = new ConsoleLifetimeTokenSource();
1213

1314
Console.WriteLine("Starting DotNext WAL Performance Test...");
@@ -18,27 +19,28 @@
1819

1920
static async Task DotNextWalPerformanceTest(CancellationToken token)
2021
{
21-
var root = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
22-
23-
// page size is 512 KB
24-
var wal = new WriteAheadLog(new() { Location = root, ChunkMaxSize = 512 * 1024 }, new NoOpStateMachine());
22+
var options = new WriteAheadLog.Options
23+
{
24+
Location = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()),
25+
ChunkSize = 512 * 1024, // page size is 512 KB
26+
MemoryManagement = WriteAheadLog.MemoryManagementStrategy.PrivateMemory,
27+
};
2528

29+
var wal = new WriteAheadLog(options, new NoOpStateMachine());
2630
try
2731
{
28-
Memory<byte> buffer = new byte[1024];
32+
Memory<byte> buffer = new byte[entrySize];
2933
Random.Shared.NextBytes(buffer.Span);
30-
31-
var index = 0L;
34+
3235
var ts = new Timestamp();
3336
for (var i = 0; i < count; i++)
3437
{
35-
index = await wal.AppendAsync(buffer, token: token).ConfigureAwait(false);
38+
var index = await wal.AppendAsync(buffer, token: token).ConfigureAwait(false);
3639
await wal.CommitAsync(index, token).ConfigureAwait(false);
3740
}
3841

39-
await wal.WaitForApplyAsync(index, token).ConfigureAwait(false);
40-
4142
Console.WriteLine($"Finished. Elapsed time: {ts.Elapsed}");
43+
await wal.FlushAsync(token).ConfigureAwait(false);
4244
}
4345
finally
4446
{
@@ -51,8 +53,8 @@ static async Task FasterLogPerformanceTest(CancellationToken token)
5153
using var linkedToken = CancellationTokenSource.CreateLinkedTokenSource(token);
5254
var root = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
5355

54-
// page size is 512 KB
55-
using var fasterLog = new FasterLog(new FasterLogSettings(root) { PageSize = 1L << 22 });
56+
// file size is 512 KB
57+
using var fasterLog = new FasterLog(new FasterLogSettings(root) { SegmentSize = 1L << 22 });
5658
var committer = Task.Run(async () =>
5759
{
5860
while (await fasterLog.WaitUncommittedAsync(fasterLog.TailAddress, linkedToken.Token).ConfigureAwait(false))
@@ -61,7 +63,7 @@ static async Task FasterLogPerformanceTest(CancellationToken token)
6163
}
6264
}, linkedToken.Token);
6365

64-
Memory<byte> buffer = new byte[1024];
66+
Memory<byte> buffer = new byte[entrySize];
6567
Random.Shared.NextBytes(buffer.Span);
6668

6769
var ts = new Timestamp();

src/DotNext.Benchmarks/DotNext.Benchmarks.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
<RootNamespace>DotNext</RootNamespace>
99
<StartupObject>DotNext.Program</StartupObject>
1010
<IsPackable>false</IsPackable>
11-
<Version>5.22.0</Version>
1211
<Authors>.NET Foundation and Contributors</Authors>
1312
<Product>.NEXT Family of Libraries</Product>
1413
<Description>Various benchmarks demonstrating performance aspects of .NEXT extensions</Description>

src/DotNext.IO/DotNext.IO.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<Authors>.NET Foundation and Contributors</Authors>
1212
<Company />
1313
<Product>.NEXT Family of Libraries</Product>
14-
<VersionPrefix>5.22.0</VersionPrefix>
14+
<VersionPrefix>5.23.0</VersionPrefix>
1515
<VersionSuffix></VersionSuffix>
1616
<AssemblyName>DotNext.IO</AssemblyName>
1717
<PackageLicenseExpression>MIT</PackageLicenseExpression>

src/DotNext.Metaprogramming/DotNext.Metaprogramming.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<ImplicitUsings>true</ImplicitUsings>
99
<IsAotCompatible>false</IsAotCompatible>
1010
<Features>nullablePublicOnly</Features>
11-
<VersionPrefix>5.22.0</VersionPrefix>
11+
<VersionPrefix>5.23.0</VersionPrefix>
1212
<VersionSuffix></VersionSuffix>
1313
<Authors>.NET Foundation</Authors>
1414
<Product>.NEXT Family of Libraries</Product>

src/DotNext.Tests/.runsettings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
<RunConfiguration>
44
<TestSessionTimeout>300000</TestSessionTimeout>
55
<TargetFrameworkVersion>net8.0</TargetFrameworkVersion>
6+
<LongRunningTestSeconds>30</LongRunningTestSeconds>
7+
<DiagnosticMessages>true</DiagnosticMessages>
68
</RunConfiguration>
79
<DataCollectionRunSettings>
810
<DataCollectors>

0 commit comments

Comments
 (0)