- Added support of synchronous lock acquisition to
AsyncExclusiveLock
,AsyncReaderWriterLock
,AsyncManualResetEvent
,AsyncAutoResetEvent
so the users can easily migrate step-by-step from monitors and other synchronization primitives to async-friendly primitives - Fixed random
InvalidOperationException
caused byRandomAccessCache<TKey, TValue>
- Added synchronous methods to
RandomAccessCache<TKey, TValue>
to support 251 feature request
- Added helpers to
DelegateHelpers
class to convert delegates with synchronous signature to their asynchronous counterparts - Added support of async enumerator to
SingletonList<T>
- Fixed exception propagation in
DynamicTaskAwaitable
- Added support of ConfigureAwaitOptions to
DynamicTaskAwaitable
DotNext.Metaprogramming 5.14.0
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed graceful shutdown of Raft TCP listener
- Updated vulnerable dependencies
DotNext.AspNetCore.Cluster 5.14.0
- Updated vulnerable dependencies
- Improved interoperability of
DotNext.Runtime.ValueReference<T>
andDotNext.Runtime.ReadOnlyValueReference<T>
with .NEXT ecosystem - Fixed 249
- Improved codegen quality for ad-hoc enumerator types
DotNext.Metaprogramming 5.13.0
- Updated dependencies
- Updated dependencies
- Redesigned
AsyncEventHub
to improve overall performance and reduce memory allocation - Improved codegen quality for ad-hoc enumerator types
- Improved codegen quality for ad-hoc enumerator types
- Updated dependencies
DotNext.AspNetCore.Cluster 5.13.0
- Updated dependencies
DotNext.MaintenanceServices 0.4.0
- Added gc refresh-mem-limit maintenance command
- Updated dependencies
- Added support of static field references to
DotNext.Runtime.ValueReference<T>
data type
- Smallish performance improvements of
RandomAccessCache<TKey, TValue>
class
- Added
DotNext.Runtime.ValueReference<T>
data type that allows to obtain async-friendly managed pointer to the field - Deprecation of
ConcurrentCache<TKey, TValue>
in favor ofRandomAccessCache<TKey, TValue>
DotNext.Metaprogramming 5.12.0
- Updated dependencies
- Updated dependencies
- Introduced async-friendly
RandomAccessCache<TKey, TValue>
as a replacement for deprecatedConcurrentCache<TKey, TValue>
. It uses SIEVE eviction algorithm.
- Updated dependencies
- Fixed cancellation of
PersistentState
async methods
DotNext.AspNetCore.Cluster 5.12.0
- Fixed cancellation of
PersistentState
async methods
- Added
DotNext.Threading.Epoch
for epoch-based reclamation - Fixed one-shot FNV1a hashing method
- Fixed 248
- Minor performance improvements
DotNext.Metaprogramming 5.11.0
- Minor performance improvements
- Updated dependencies
- Minor performance improvements
- Updated dependencies
- Fixed
AsyncSharedLock.Downgrade
behavior, so it can be used to release a weak lock - Updated dependencies
- Minor performance improvements
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 5.11.0
- Updated dependencies
- Added
FirstOrNone
andLastOrNone
extension methods back from .NEXT 4.x as requested in 247
- Added
TaskQueue<T>
class - Added
Completion
optional property to TaskCompletionPipe<T> that allows to synchronize on full completion of the pipe - Added one-shot static methods to TaskCompletionPipe to take
IAsyncEnumerable<T>
over tasks as they complete
- Improved performance of
FileWriter
in some corner cases
- Fixed 244
DotNext.AspNetCore.Cluster 5.7.3
- Fixed 244
- Added
WaitAnyAsync
overload method to wait on a group of cancellation tokens that supports interruption
- Fixed 244
DotNext.AspNetCore.Cluster 5.7.2
- Fixed 244
- Improved reliability of disk I/O for the new WAL binary format
DotNext.AspNetCore.Cluster 5.7.1
- Improved reliability of disk I/O for the new WAL binary format
- Introduced
WaitAnyAsync
method to wait on a group of cancellation tokens - Added cancellation support for
WaitAsync
extension method for WaitHandle class
Timestamp.ElapsedTicks
returns a value that is always greater than zero- Fixed hidden copies of value types caused by in modifier
- Added support of TimeProvider to
Timestamp
andTimeout
types
- Updated dependencies
- Updated dependencies
- Fixed 241
- Introduced API for implementing leases, see
DotNext.Threading.Leases
namespace
- Various performance improvements
- Fixed 242
DotNext.AspNetCore.Cluster 5.7.0
- Fixed 242
- Fixed 240
- Smallish performance improvements for all synchronization primitives
- Added support of custom data to be passed to
PersistentState.ApplyAsync
method through WAL processing pipeline
DotNext.AspNetCore.Cluster 5.6.0
- Updated dependencies
- Smallish performance improvements of
IndexPool
instance methods - Added ability to instantiate empty
IndexPool
- Fixed 234
- Updated dependencies
- Fixed behavior of
IRaftCluster.ConsensusToken
when a node is in standby mode
DotNext.AspNetCore.Cluster 5.5.1
- Updated dependencies
- Fixed race condition caused by
LinkedCancellationTokenSource.CancellationOrigin
property that leads to incorrectly returned cancellation token
- Introduced
IRaftCluster.WaitForLeadershipAsync
method that waits for the local node to be elected as a leader of the cluster - Fixed 233
- Fixed correctness of appending no-op entry by a leader used as a write barrier
DotNext.AspNetCore.Cluster 5.5.0
- Updated dependencies
- Added
FileWriter.WrittenBuffer
property
- Changed binary file format for WAL for more efficient I/O. A new format is incompatible with all previous versions. To enable legacy format, set
PersistentState.Options.UseLegacyBinaryFormat
property to true - Introduced a new experimental binary format for WAL based on sparse files. Can be enabled with
PersistentState.Options.MaxLogEntrySize
property
DotNext.AspNetCore.Cluster 5.4.0
- Updated dependencies
- Provided support of thread-local storage for
StreamSource.AsSharedStream
- Remove type cast for
Func.Constant
static method
- Added
StreamSource.AsSharedStream
extension method that allows to obtain read-only stream over memory block which position is local for each consuming async flow or thread. In other words, the stream can be shared between async flows for independent reads.
- Updated dependencies
- Updated dependencies
- Improved performance of
IndexPool.Take
method
- Updated dependencies
- Smallish performance improvements of WAL
DotNext.AspNetCore.Cluster 5.3.0
- Smallish performance improvements of WAL
- Added
Number.IsPrime
static method that allows to check whether the specified number is a prime number - Fixed AOT compatibility issues
- Updated dependencies
- Updated dependencies
- Added specialized
IndexPool
data type that can be useful for implementing fast object pools
- Updated dependencies
DotNext.AspNetCore.Cluster 5.2.0
- Added
Span.Advance<T>
extension method for spans CollectionType.GetItemType
now correctly recognizes enumerable pattern even if target type doesn't implementIEnumerable<T>
- Updated dependencies
- Added
UnmanagedMemory.AsMemory
static method that allows to wrap unmanaged pointer into Memory<T>
- Updated dependencies
- Merged 225
- Added
AsUnbufferedStream
extension method for SafeFileHandle class
- Updated dependencies
DotNext.AspNetCore.Cluster 5.1.0
- Updated dependencies
- Fixed behavior to no-op when
GCLatencyModeScope
is initialized to default
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Attempt to fix 221
DotNext.AspNetCore.Cluster 5.0.3
- Attempt to fix 221
- Fixed XML docs
- Fixed 223
- Updated dependencies
- Added correct validation for maximum possible timeout for all
WaitAsync
methods
- Updated dependencies
- Prevent indexing of WAL files on Windows
DotNext.AspNetCore.Cluster 5.0.2
- Updated dependencies
- Smallish performance improvements of dynamic buffers
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Improved performance of
FileWriter
andFileBufferingWriter
classes by utilizing Scatter/Gather IO - Reduced memory allocations required by async methods of
FileWriter
andFileBufferingWriter
classes - Updated dependencies
- Improved IO performance of Persistent WAL due to related improvements in DotNext.IO library
- Updated dependencies
DotNext.AspNetCore.Cluster 5.0.1
- Updated dependencies
.NEXT 5.0.0 has been released! The primary goal of the new release is migration to .NET 8 to fully utilize its features such as Generic Math and static abstract interface members. 5.x is not fully backward compatible with 4.x because of breaking changes in the API. Most of changes done in DotNext, DotNext.IO, and DotNext.Unsafe libraries. UDP transport for Raft is completely removed in favor of existing TCP implementation. There is a plan to implement multiplexed TCP connection and Raft sharding. New features:
- Numeric ranges for LINQ. Thanks to Generic Math
- Little-endian and big-endian readers/writer for various buffer types. Again thanks to Generic Math
- UTF-8 formatting support for various buffer types
DotNext.Reflection library is deprecated and no longer maintained.
SustainedLowLatency
GC mode is now applied for heartbeats round initiated by heartbeat timeout. A round forced by replication programmatically doesn't set this mode that allows GC to be more intrusive. This trade-off provides better balance between memory consumption and replication time- Updated dependencies
DotNext.AspNetCore.Cluster 4.15.3
- Updated dependencies
- Reduced memory allocation caused by async methods using SpawningAsyncTaskMethodBuilder state machine builder
- Fixed 204
- Fixed 205
AsyncCountdownEvent.Reset
now throwsPendingTaskInterruptedException
on every caller suspended byWaitAsync
- Raft performance: reduced memory allocation caused by heartbeat round
- Updated dependencies
DotNext.AspNetCore.Cluster 4.15.2
- Updated dependencies
- Merged PR 203
- Raft performance: improved throughput of
IRaftCluster.ReplicateAsync
method when cluster minority is not accessible (faulty node). Now the leader waits for replication from majority of nodes instead of all nodes - Updated dependencies
DotNext.AspNetCore.Cluster 4.15.0
- Updated dependencies
- Fixed leader lease renewal
- Updated dependencies
DotNext.AspNetCore.Cluster 4.14.5
- Updated dependencies
- Clarified exception type when
AddMemberAsync
orRemoveMemberAsync
is called on Follower node - Updated dependencies
DotNext.AspNetCore.Cluster 4.14.4
- Updated dependencies
- Optimized performance of
PooledArrayBufferWriter<T>
andPooledBufferWriter<T>
classes as a result of discussion in 192 - Added
Span.Swap
andSpan.Move
extension methods - Updated dependencies
- Deprecation of
partitioning
configuration property - Updated dependencies
DotNext.AspNetCore.Cluster 4.14.3
- Updated dependencies
- Removed redundant memory barrier from async locks and reduced size of wait nodes
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 4.14.2
- Updated dependencies
DotNext.Metaprogramming 4.15.0
- Fixed broken compatibility introduced in C# 10 at language level. See 189 discussion. The change provides backward compatibility at source code level, but it's binary compatible. This means that all you need is to rebuild your project without any code changes
- Updated dependencies
- Optimized
AsyncEventHub
andScheduler
performance - Fixed regression: reuse
CancellationTokenSource
used for timeout tracking by all async locks
- Updated dependencies
DotNext.AspNetCore.Cluster 4.14.1
- Updated dependencies
- Added implicit conversion from BoxedValue<T> to ValueType
- SpawningAsyncTaskMethodBuilder reuses the same .NET internals as AsyncTaskMethodBuilder
- Added non-generic
TypeMap
andConcurrentTypeMap
implementations acting as a set in contrast to existing generic counterparts - Introduced
Optional<T>.ValueOrDefault
property which is linked with existingHasValue
property be means of nullability analysis - Updated dependencies
DotNext.Metaprogramming 4.14.0
- Fixed 187
- Updated dependencies
- Updated dependencies
- Fixed scheduling of continuation if it is represented by async state machine
- Updated dependencies
- Fixed abstract representation of Write-Ahead Log
- Updated dependencies
DotNext.AspNetCore.Cluster 4.14.0
- Fixed 185
- Updated dependencies
- Removed memory allocation inside of
Sequence.AddAll
extension method - Smallish performance improvements of
SingletonList
value type
DotNext.Metaprogramming 4.13.1
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed 184
- Reduced memory allocation when reading single log entry from WAL
- Updated dependencies
DotNext.AspNetCore.Cluster 4.13.1
- Fixed 184
- Updated dependencies
- Added of
AlignOf
intrinsic method that allows to obtain alignment requirements for the specified type ConcurrentCache
recognizes types with atomic write semantics more precisely that allows to avoid memory allocations for certain generic arguments- Introduced
TrimLength
overloaded extension method for Span<T> data type that allows to retrieve the trimmed part of the span
DotNext.Metaprogramming 4.13.0
- Updated dependencies
Pointer<T>.IsAligned
property is unmarked as obsolete because it is possible to determine memory alignment correctly- Updated dependencies
- Fixed 183
- Updated dependencies
- Updated dependencies
- Fixed cancellation of some async methods exposed by Raft implementation and WAL
- Updated dependencies
DotNext.AspNetCore.Cluster 4.13.0
- Updated dependencies
- Improved Raft metrics over System.Diagnostics.Metrics
- Improved performance of AppendEntries consensus message
DotNext.AspNetCore.Cluster 4.12.5
- Improved Raft metrics over System.Diagnostics.Metrics
- Updated dependencies
- Fixed: sometimes
ConcurrentCache.TakeSnapshot
method may return evicted key/value pairs
DotNext.Metaprogramming 4.12.4
- Updated dependencies
- Updated dependencies
- Deprecation of
AsyncLock.TryAcquireAsync(CancellationToken)
overload - Updated dependencies
- Updated dependencies
- Perf: avoid Pre-Vote phase in case of concurrency between inbound Vote request and transition to Candidate state
- Optimized memory consumption by
RaftCluster
implementation - Updated dependencies
DotNext.AspNetCore.Cluster 4.12.4
- Updated dependencies
- Fixed concurrency between add and update operations of ConcurrentCache class
DotNext.Metaprogramming 4.12.3
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed 173
- Updated dependencies
DotNext.AspNetCore.Cluster 4.12.3
- Updated dependencies
DotNext.MaintenanceServices 0.2.0
- Make probe timeout optional
- Updated dependencies
- Fixed 169
- Fixed concurrency between add and update operations of ConcurrentCache class
DotNext.AspNetCore.Cluster 4.12.2
- Updated dependencies
- Fixed 162
- Fixed other race conditions in
ConcurrentCache
- Improved performance of
BitVector
methods
- Performance improvements of interpolated string handlers
DotNext.Metaprogramming 4.12.0
- Updated dependencies
- Updated dependencies
- Reduced complexity of
QueuedSynchronizer
class internals - Fixed rare concurrency issues when multiple consumers trying to get task result from
ValueTaskCompletionSource
- Reduced number of work items submitted by async locks internally
- Provided
ManualResetCompletionSource.Cleanup
protected virtual method for custom cleanup operations - Heavily reduced monitor lock contention that can be caused by
ValueTaskCompletionSource
orValueTaskCompletionSource<T>
- Updated dependencies
- Performance improvements of interpolated string handlers
- Updated dependencies
- Fixed initialization logic of PhiAccrualFailureDetector
- Partially fixed 153. Optionally, the node which initial state cannot be recognized by failure detector (e.g., node never responds) is treated as dead
- Fixed 155
DotNext.AspNetCore.Cluster 4.12.0
- Fixed initialization logic of PhiAccrualFailureDetector
- Partially fixed 153. Optionally, the node which initial state cannot be recognized by failure detector (e.g., node never responds) is treated as dead
- Fixed 155
- Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
DotNext.Metaprogramming 4.11.0
- Updated dependencies
- Added methods to
Pointer<T>
data type for unaligned memory access
- Added special methods to AsyncTrigger class to implement asynchronous spin-wait
- AsyncTrigger<T> is deprecated in favor of
QueuedSynchronizer<T>
- Introduced
QueuedSynchronizer<T>
class that provides low-level infrastructure for writing custom synchronization primitives - Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
- Optimized memory allocations caused by
FileBufferingWriter
class - Added
DotNext.Text.Json.JsonSerializable<T>
wrapper acting as a bridge between binary DTO and JSON serialization infrastructure from .NET BCL - Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
- Reduced API surface requiring RequiresPreviewFeatures attribute
- Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
- Fixed 151
- Fixed 153
- Raft: reduced memory allocations when the node is Leader
- Raft: fixed correctness of
ForceReplication
method when it is used as a write barrier in a distributed environment - Reduced API surface requiring RequiresPreviewFeatures attribute
DotNext.AspNetCore.Cluster 4.11.0
- Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
Starting from the current release, DotNext.Reflection
library is no longer published on regular basis. See this post for more information.
- Added API discussed and proposed in 143. The requested features are implemented as
DotNext.Buffers.Binary.BinaryTransformations
class.
DotNext.Metaprogramming 4.10.0
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Optimized memory allocations caused by
FileBufferingWriter
class - Updated dependencies
- Fixed 146
- Fixed 147
- Reduced memory allocations caused by the implementation of the leader lease
- Updated dependencies
DotNext.AspNetCore.Cluster 4.10.0
- Fixed 146
- Updated dependencies
- Introduced
SpawningAsyncTaskMethodBuilder
that can be used in combination with AsyncMethodBuilderAttribute to force execution of async method in parallel with the current flow - Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Smallish performance improvements of async locks
- Fixed upgrade lock acquisition using
AsyncLock
value type - Updated dependencies
- Use
ValueTask
caching for hot execution paths - Updated dependencies
- Reduced memory allocation caused by WAL and TCP/UDP transports
- Reduced managed heap fragmentation
- Added support of DNS and Unix Domain Socket addresses of cluster nodes for better compatibility with containers
- Updated dependencies
DotNext.AspNetCore.Cluster 4.9.0
- HTTP transport: optimized memory allocations
- Updated dependencies
- Smallish performance improvements of async locks
- Updated dependencies
- TCP/UDP Raft transport: optimized memory allocations
- Updated dependencies
DotNext.AspNetCore.Cluster 4.8.3
- HTTP transport: optimized memory allocations
- Updated dependencies
- Optimized memory allocations produced by instances of
TaskCompletionPipe<T>
class - Updated dependencies
- Reduced memory allocations caused by instances of
FileReader
andFileWriter
classes - Updated dependencies
- Optimized memory allocations produced by persistent WAL and Raft algorithm implementation
- Updated dependencies
DotNext.AspNetCore.Cluster 4.8.2
- Updated dependencies
- Improved quality and performance of random string generator exposed as
RandomExtensions.NextString
extension methods (138) - Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed critical bug 136 that prevents reentrant reads from persistent channel
- Updated dependencies
- Updated dependencies
- Fixed 139
- Fixed calculation of Phi performed by Phi Accrual Failure Detector. The bug leads to false positive detection
- Updated dependencies
DotNext.AspNetCore.Cluster 4.8.1
- Updated dependencies
- Added scoped keyword to necessary buffer types and extension methods for better compatibility with C# 11
- Added Builder Pattern concept as an interface
- Added extra properties to Timestamp value type for precise measurements
- Introduced additional methods for reading data from sparse buffer with help of SequencePosition cursor
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
TaskCompletionPipe<T>
doesn't require capacity anymore- Fix: potential consumer hangs when a number consumers is larger than number of pending tasks
- Updated dependencies
- Updated dependencies
- Added automatic removal of unresponsive nodes from Raft cluster using Failure Detector
- Added implementation of Phi Accrual Failure Detector
- Added ability to turn cluster node into Standby mode and back to normal mode (see discussion)
- Raft functional extensions are grouped as a set of interfaces located in a new
DotNext.Net.Cluster.Consensus.Raft.Extensions
namespace - Fixed cluster recovery when cold start mode is used (135)
- Updated dependencies
DotNext.AspNetCore.Cluster 4.8.0
- Added automatic removal of unresponsive nodes from Raft cluster using Failure Detector registered in DI
- Raft functional extensions are available for query through DI as interfaces
- Updated dependencies
- Fixed 127
- Fixed 126
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Removed redundant type cast in
Pointer<T>
value type - Updated dependencies
Scheduler.DelayedTaskCanceledException
is added to identify graceful cancellation of the scheduled task (when it was canceled without entering the callback)- Updated dependencies
- Updated dependencies
- Smallish performance improvements when processing command queue in HyParView implementation
- Updated dependencies
DotNext.AspNetCore.Cluster 4.7.4
- Updated dependencies
- Deprecation of EqualityComparerBuilder<T> in favor of C# Records
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Removed redundant type cast in
Pointer<T>
value type - Updated dependencies
- Fixed parameter name when throwing
ArgumentNullException
inAsyncLazy<T>
constructor - Updated dependencies
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 4.7.3
- Updated dependencies
- Critical bug fixes for
ConcurrentCache<TKey, TValue>
class: incorrect behavior of LFU policy (wrong sorting order)
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Reduced memory allocation caused by several async lock types
- Updated dependencies
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 4.7.2
- Updated dependencies
- Fixed source-level compatibility issues with Roslyn compiler shipped with .NET 6.0.8 (SDK 6.0.400) due to backward incompatible changes in it
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Completed first phase of migration of
Pointer<T>
and related data types to nint and nuint data types - Updated dependencies
- Updated dependencies
- Fixed source-level compatibility issues with Roslyn compiler shipped with .NET 6.0.8 (SDK 6.0.400) due to backward incompatible changes in it
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 4.7.1
- Updated dependencies
Mac OS is added as a target OS for running tests to track compatibility with this operating system.
- Fixed memory alignment issues
- Added
TaskType.GetIsCompletedGetter
method that allows to obtain Task.IsCompleted property in the form of closed delegate - Significantly improved performance of HEX conversion methods with SSSE3 hardware intrinsics
- Introduced
DotNext.Buffers.Text.Hex
class with static methods for efficient conversion to/from hexadecimal representation of binary data with UTF-16 and UTF-8 support - Introduced
NextChars
extension methods that allows to fill buffer with random characters
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Reduced memory allocation caused by extension methods declared in Scheduler class
- Reduced monitor lock contention in async locks
- Added lock stealing methods to some synchronization primitives:
AsyncExclusiveLock
,AsyncReaderWriterLock
- Introduced
GetConsumer
extension method forTaskCompletionPipe<Task<T>>
class that allows to consume task results asynchronously - Updated dependencies
- Removed defensive copies of structs
- Updated dependencies
- Removed defensive copies of structs
- Adaptation of Microsoft.AspNetCore.Connections library allows to completely split network transport implementation details from Raft-specific stuff. Now you can implement custom network transport and other network-related concerns much more easier
- Updated dependencies
DotNext.AspNetCore.Cluster 4.7.0
- Removed defensive copies of structs
- Introduced
RaftClusterHttpHost
that provides a way to host multiple Raft clusters in the same process. This feature can be used for implementation of sharding - Cluster node identification now relies on UriEndPoint class instead of HttpEndPoint. This allows to use more flexible traffic routing strategies between cluster nodes
- Updated dependencies
- Fixed memory alignment issues
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed task pooling of some asynchronous methods
- Updated dependencies
- Fixed task pooling of some asynchronous methods
- Updated dependencies
- Fixed task pooling of some asynchronous methods
- Updated dependencies
DotNext.AspNetCore.Cluster 4.6.1
- Updated dependencies
- First version of library providing Application Maintenance Inteface via Unix Domain Socket and command-line shell for app administrators
- Added support for probes when running app in Kubernetes
- Added
CharComparer
class that allows to compare single characters in the same way as StringComparer comparing strings - Minor performance improvements of static methods declared in Span class
- Added stack manipulation methods to BufferWriterSlim<T> value type
- Introduced Timeout.Expired static property that allows to obtain expired timeout
- Added
LastOrNone
extension methods for various collection types - Deprecated
DotNext.Runtime.CompilerServices.Shared<T>
value type - Added a new powerful API for receiving asynchronous notifications from GC (see
DotNext.Runtime.GCNotification
class)
- Updated dependencies
- Updated dependencies
- Small performance improvements of unmanaged memory allocator
- Updated dependencies
- Fixed incorrect array bounds check in AsyncEventHub class
- Optimized completion callback scheduling for all types of asynchronous locks
- Linked token created using
LinkedTokenSourceFactory.LinkTo
extension method now allows to track the originally canceled token - Added
DotNext.Threading.Scheduler
static class that allows to delay execution of asynchronous tasks - Updated dependencies
- Minor performance improvements of FileReader data type
- Reduced memory allocation caused by asynchronous string decoding methods
- Added
IAsyncBinaryReader.TryGetRemainingBytesCount
method that allows to preallocate buffers - Updated dependencies
- Optimized read barrier
- Fixed cancellation token propagation in public instance methods declared in IRaftCluster interface
- Introduced a simple framework for rumor spreading for peer-to-peer applications based on Lamport timestamps:
DotNext.Net.Cluster.Messaging.Gossip.RumorTimestamp
andDotNext.Net.Cluster.Messaging.Gossip.RumorSpreadingManager
classes. Also you can check out modified example of P2P application based on HyParView protocol insrc/examples
folder - Added compatibility of
DotNext.Net.Cluster.Messaging.JsonMessage<T>
class with JSON Source Generator - Introduced
DotNext.Net.Cluster.Messaging.IOutputChannel.SendMessageAsync
overload that directly supports data types implementingDotNext.Runtime.Serialization.ISerializable<T>
interface - Raft vote and pre-vote requests will be rejected if the requester is not a known cluster member (applicable for all transports: HTTP, UDP, TCP)
- Fixed race conditions between Raft state transitions
- Added
ILeaderLease.Token
property that allows to control linearizable asynchronous reads on the leader node
DotNext.AspNetCore.Cluster 4.6.0
- Added explicit implementation of newly introduced
DotNext.Net.Cluster.Messaging.IOutputChannel.SendMessageAsync
overload - Updated dependencies
- Added
Base64Encoder.MaxCharsToFlush
constant for convenient allocation of the buffer to be passed toBase64Encoder.Flush
method - Added static methods to
Base64Encoder
andBase64Decoder
types that allow to convert large data asynchronously with low memory consumption - Added
DotNext.Runtime.CompilerServices.Scope
type that allows to attach callbacks to the lexical scope
- Updated dependencies
- Updated dependencies
- Small performance improvements of unmanaged memory allocator
- Updated dependencies
- Updated dependencies
- Added ability to asynchronously enumerate streams, pipes, and text streams using async enumerator pattern (
ReadAllAsync
extension method) - Added implementation of IAsyncEnumerable<byte> to
FileReader
class
- Attempt to modify cluster membership concurrently now leads to exception
- Added
ICluster.WaitForLeaderAsync
method for convenience - Fixed 108
DotNext.AspNetCore.Cluster 4.5.0
- Updated dependencies
- Added memory threshold option to
SoftReferenceOptions
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed issue that ignores the value of
PersistentChannelOptions.BufferSize
property - Fixed critical bug in
PersistentChannel
that leads to incorrect position of the reader within the file with stored messages - Updated dependencies
- Updated dependencies
- Improved logging in case of critical faults during Raft state transitions
- Fixed 105
DotNext.AspNetCore.Cluster 4.4.1
- Updated dependencies
- Added efficient way to concate multiple strings and represent the result as a rented buffer. See
Span.Concat
method. - String concatenation support is added to BufferWriterSlim<char> as well
- Added
DotNext.Text.InterpolatedString
class with factory methods to create interpolated strings using rented memory
- Added support of with operator from C#
- Added support of object initializer
- Added
Record<T>
concept class to work with record types
- Updated dependencies
- Added support of channel completion to PersistentChannel<TInput, TOutput> class
- Added
PersistentChannelOptions.ReliableEnumeration
option that allows transactional reads - Fixed token linkage represented by extension methods from LinkedTokenSourceFactory class
- Added extension methods that allow to write interpolated strings efficiently to TextWriter
- Fixed exception type for cancellation of replication
- Fixed incorrect behavior when
IRaftCluster.LeaderChanged
fired butIRaftCluster.LeadershipToken
indicates that leader is not yet elected - Updated dependencies
DotNext.AspNetCore.Cluster 4.4.0
- Updated dependencies
- Introduced
DotNext.Runtime.Caching.ConcurrentCache<TKey, TValue>
class with LRU/LFU cache eviction policies - Improved performance of atomic operations based on CAS (Compare-And-Swap)
- Fixed behavior of optimistic read lock in ReaderWriterSpinLock class
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed behavior of optimistic read lock in AsyncReaderWriterLock class
- Updated dependencies
- Added flushToDisk option to
FileBufferingWriter.Flush
andFileBufferingWriter.FlushAsync
methods - Updated dependencies
- Improved startup time of persistent WAL
- Default value of PersistentState.Options.WriteMode is changed to
AutoFlush
- Fixed transfer of custom cancellation token passed to
RaftCluster.ReplicateAsync
method - Updated dependencies
DotNext.AspNetCore.Cluster 4.3.0
- Fixed 103
- Updated dependencies
Many thanks to Copenhagen Atomics for supporting this release.
- Improved scalability of mechanism that allows to attach custom data to arbitrary objects using
UserDataStorage
andUserDataSlot<T>
types. The improvement works better in high workloads without the risk of lock contention but requires a bit more CPU cycles to obtain the data attached to the object - Added ability to enumerate values stored in
TypeMap<T>
orConcurrentTypeMap<T>
- Improved debugging experience of
UserDataStorage
type - Added
Dictionary.Empty
static method that allows to obtain a singleton of empty IReadOnlyDictionary<TKey, TValue> - Fixed decoding buffer oveflow in
Base64Decoder
type - Added
Base64Encoder
type for fast encoding of large binary data - Deprecation of
Sequence.FirstOrEmpty
extension methods in favor ofSequence.FirstOrNone
- Fixed #91
- Public constructors of
PooledBufferWriter
andPooledArrayBufferWriter
with parameters are obsolete in favor of init-only properties - Reduced size of the compiled assembly: omit nullability attributes for private and internal members
- Optimized performance of
Timeout
,Optional<T>
,Result<T>
andResult<T, TError>
types - Introduced
DotNext.Runtime.SoftReference
data type in addition to WeakReference from .NET
- Improved overall performance of some scenarios where
UserDataStorage
is used - Reduced size of the compiled assembly: omit nullability attributes for private and internal members
- Improved overall performance of some scenarios where
UserDataStorage
is used - Reduced size of the compiled assembly: omit nullability attributes for private and internal members
- Updated dependencies
- Reduced size of the compiled assembly: omit private and internal member's nullability attributes
- Reduced execution time of
CreateTask
overloads declared inValueTaskCompletionSource
andValueTaskCompletionSource<T>
classes - Added overflow check to
AsyncCounter
class - Improved debugging experience of all asynchronous locks
- Reduced size of the compiled assembly: omit nullability attributes for private and internal members
- Reduced lock contention that can be caused by asynchronous locks in concurrent scenarios
- Added
Reset()
method toTaskCompletionPipe<T>
that allows to reuse the pipe
- Reduced size of the compiled assembly: omit nullability attributes for private and internal members
FileWriter
now implements IBufferWriter<byte>
- Improved compatibility with IL trimming
- Reduced size of the compiled assembly: omit private and internal member's nullability attributes
- Completely rewritten implementation of TCP transport: better buffering and less network overhead. This version of protocol is not binary compatible with any version prior to 4.2.0
- Increased overall stability of the cluster
- Fixed bug with incorrect calculation of the offset within partition file when using persistent WAL. The bug could prevent the node to start correctly with non-empty WAL
- Added Reflection-free support of JSON log entries powered by JSON Source Generator from .NET
- Introduced Incremental log compaction mode to achieve the best performance when the snapshot is relatively small
- Reduced network overhead caused by read barrier used on the follower side for linearizable reads
DotNext.AspNetCore.Cluster 4.2.0
- Improved compatibility with IL trimming
- Reduced size of the compiled assembly: omit nullability attributes for private and internal members
- Smallish performance improvements
- Updated dependencies
- Updated dependencies
- Performance improvements of
Pointer<T>
public methods
- Fixed potential concurrency issue than can be caused by
AsyncBridge
public methods when cancellation token or wait handle is about to be canceled or signaled
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 4.1.3
- Updated dependencies
- Minor performance improvements
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Minor performance improvements of
FileBufferingWriter
class
- Updated dependencies
DotNext.AspNetCore.Cluster 4.1.2
- Updated dependencies
- Minor performance improvements
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Minor performance improvements
- Minor performance improvements
- Updated dependencies
DotNext.AspNetCore.Cluster 4.1.1
- Updated dependencies
- Optimized bounds check in growable buffers
- Changed behavior of exceptions capturing by
DotNext.Threading.Tasks.Synchronization.GetResult
overloaded methods - Added
DotNext.Threading.Tasks.Synchronization.TryGetResult
method - Added
DotNext.Buffers.ReadOnlySequencePartitioner
static class with methods for ReadOnlySequence<T> partitioning in parallel processing scenarios - Enabled support of IL trimming
- IL trimming is explicitly disabled because the library highly relied on Reflection API
DotNext.Reflection 4.1.0 IL trimming is explicitly disabled because the library highly relied on Reflection API
- Enabled support of IL trimming
- Reduced memory allocation by async locks
- Added cancellation support to
AsyncLazy<T>
class - Introduced
TaskCompletionPipe<T>
class that allows to consume tasks as they complete - Removed Microsoft.Extensions.ObjectPool dependency
- Enabled support of IL trimming
- Enabled support of IL trimming
- Enabled support of IL trimming
DotNext.AspNetCore.Cluster 4.1.0
- Enabled support of IL trimming
.NEXT 4.0.0 major release is out! Its primary focus is .NET 6 support as well as some other key features:
- Native support of C# 10 Interpolated Strings across various buffer types, streams and other I/O enhancements. String building and string encoding/decoding with zero allocation overhead is now a reality
- All asynchronous locks do not allocate tasks anymore in case of lock contention. Instead, they are moved to ValueTask pooling
ValueTaskCompletionSource
andValueTaskCompletionSource<T>
classes are stabilized and used as a core of ValueTask pooling- Introduced Raft-native cluster membership management as proposed in Diego's original paper instead of external discovery mechanism
- Introduced Gossip-based messaging framework
Use this guide to migrate from 3.x.
- Added
DotNext.Span.Shuffle
andDotNext.Collections.Generic.List.Shuffle
extension methods that allow to randomize position of elements within span/collection - Added
DotNext.Collections.Generic.Sequence.Copy
extension method for making copy of the original enumerable collection. The memory for the copy is always rented from the pool - Added
DotNext.Collections.Generic.Collection.PeekRandom
extension method that allows to select random element from the collection - Improved performance of
DotNext.Span.TrimLength
andStringExtensions.TrimLength
extension methods - Introduced
DotNext.Buffers.BufferHelpers.TrimLength
extension methods for ReadOnlyMemory<T> and Memory<T> data types - Improved performance of
DotNext.Buffers.BufferWriter<T>.AddAll
method - Reduced memory allocations by
ElementAt
,FirstOrEmpty
,FirstOrNull
,ForEach
extension methods inDotNext.Collections.Generic.Sequence
class - Added
DotNext.Numerics.BitVector
that allows to convert bool vectors into integral types - Added ability to write interpolated strings to
IBufferWriter<char>
without temporary allocations - Added ability to write interpolated strings to
BufferWriterSlim<char>
. This makesBufferWriterSlim<char>
type as allocation-free alternative to StringBuilder - Introduced a concept of binary-formattable types. See
DotNext.Buffers.IBinaryFormattable<TSelf>
interface for more information - Introduced
Reference<T>
type as a way to pass the reference to the memory location in asynchronous scenarios Box<T>
is replaced withReference<T>
value typeITypeMap<T>
interface and implementing classes allow to associate an arbitrary value with the type- Added overloaded
Result<T, TError>
value type for C-style error handling
- Added support of interpolated string expression as described in this article using
InterpolationExpression.Create
static method - Added support of task pooling to async lambda expressions
- Migration to C# 10 and .NET 6
- Migration to C# 10 and .NET 6
- Unmanaged memory pool has moved to NativeMemory class instead of Marshal.AllocHGlobal method
- Polished
ValueTaskCompletionSource
andValueTaskCompletionSource<T>
data types. Also these types become a foundation for all synchronization primitives within the library - Return types of all methods of asynchronous locks now moved to ValueTask and ValueTask<T> types
- Together with previous change, all asynchronous locks are written on top of
ValueTaskCompletionSource
andValueTaskCompletionSource<T>
data types. It means that these asynchronous locks use task pooling that leads to zero allocation on the heap and low GC latency - Added
AsyncEventHub
synchronization primitive for asynchronous code - Introduced diagnostics and debugging tools for all synchronization primitives: lock contentions, information about suspended callers, et. al.
- Added
DotNext.IO.SequenceBinaryReader.Position
property that allows to obtain the current position of the reader in the underlying sequence - Added
DotNext.IO.SequenceBinaryReader.Read(Span<byte>)
method - Optimized performance of some
ReadXXX
methods ofDotNext.IO.SequenceReader
type - All
WriteXXXAsync
methods ofIAsyncBinaryWriter
are replaced with a singleWriteFormattableAsync
method supporting ISpanFormattable interface. Now you can encode efficiently any type that implements this interface - Added
FileWriter
andFileReader
classes that are tuned for fast file I/O with the ability to access the buffer explicitly - Introduced a concept of a serializable Data Transfer Objects represented by
ISerializable<TSelf>
interface. The interface allows to control the serialization/deserialization behavior on top ofIAsyncBinaryWriter
andIAsyncBinaryReader
interfaces. Thanks to static abstract interface methods, the value of the type can be easily reconstructed from its serialized state - Added support of binary-formattable types to
IAsyncBinaryWriter
andIAsyncBinaryReader
interfaces - Improved performance of
FileBufferingWriter
I/O operations with preallocated file size feature introduced in .NET 6 StreamExtensions.Combine
allows to represent multiple streams as a single stream
- Optimized memory allocation for each hearbeat message emitted by Raft node in leader state
- Fixed compatibility of WAL Interpreter Framework with TCP/UDP transports
- Added support of Raft-native cluster configuration management that allows to use Raft features for managing cluster members instead of external discovery protocol
- Persistent WAL has moved to new implementation of asynchronous locks to reduce the memory allocation
- Added various snapshot building strategies: incremental and inline
- Optimized file I/O performance of persistent WAL
- Reduced the number of opened file descriptors required by persistent WAL
- Improved performance of partitions allocation in persistent WAL with preallocated file size feature introduced in .NET 6
- Fixed packet loss for TCP/UDP transports
- Added read barrier for linearizable reads on Raft follower nodes
- Added transport-agnostic implementation of HyParView membership protocol suitable for Gossip-based messaging
DotNext.AspNetCore.Cluster 4.0.0
- Added configurable HTTP protocol version selection policy
- Added support of leader lease in Raft implementation for optimized read operations
- Added
IRaftCluster.LeadershipToken
property that allows to track leadership transfer - Introduced
IRaftCluster.Readiness
property that represents the readiness probe. The probe indicates whether the cluster member is ready to serve client requests
DotNext.Threading.Tasks.Synchronization.WaitAsync
doesn't suspend the exception associated with faulty input task anymore
- Fixed 73
- Added
ValueTypeExtensions.Normalize
extension methods that allow to normalize numbers of different types - Improved overall performance of extension methods declaring in
RandomExtensions
class - Added
Func.IsTypeOf<T>()
andPredicate.IsTypeOf<T>()
cached predicates - Deprecation of
CallerMustBeSynchronizedAttribute
- Fixed backward compatibility issues when DotNext 3.2.x or later used in combination with DotNext.IO 3.1.x
- Fixed LGTM warnings
- Added
CodeGenerator.Statement
static method to simplify migration from pure Expression Trees - Fixed LGTM warnings
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Introduced a new asynchronous primitive
AsyncCorrelationSource
for synchronization - Added
ValueTaskCompletionSource<T>
as reusable source of tasks suitable for pooling
FileBufferingWriter.GetWrittenContentAsync
overload returningReadOnlySequence<T>
now ensures that the buffer tail is flushed to the diskFileBufferingWriter.Flush
andFileBufferingWriter.FlushAsync
methods ensure that the buffer tail is flushed to the disk
- Added implementation of Jump consistent hash
- Added support of typed message handlers. See
MessagingClient
andMessageHandler
classes for more information
DotNext.AspNetCore.Cluster 3.3.0
- Added ETW counter for response time of nodes in the cluster
- Fixed implementation of
Optional<T>.GetHashCode
to distinguish hash code of undefined and null values
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 3.2.1
- Updated dependencies
- Added
TryDetachBuffer
method toBufferWriterSlim<T>
type that allows to flow buffer in async scenarios - Added
TryGetWrittenContent
method toSparseBufferWriter<T>
that allows to obtain the written buffer if it is represented by contiguous memory block - Added
OptionalConverterFactory
class that allows to useOptional<T>
data type in JSON serialization. This type allows to hide data from JSON if the property of field has undefined value. Useful for designing DTOs for REST API with partial resource updates via PATCH method. Available only when target is .NET 5. - Added
TryResize
andResize
methods toMemoryOwner<T>
value type - Updated dependencies
- Call site optimization for
AsDynamic()
extension method that allows to construct LINQ expression tree on-the-fly using C# expressions - Fixed 70
- Respect volatile modifier when reading/writing field
- Added additional overloads to
Pointer<T>
value type with nuint parameter
- Added
EnsureState
toAsyncTrigger
class as synchronous alternative with fail-fast behavior
- Improved performance of all
IAsyncBinaryReader
interface implementations - Added
TryReadBlock
extension method that allows to read the block of memory from pipe synchronously - Updated dependencies
- Smallish improvements of I/O operations related to log entries
- Improved performance of background compaction algorithm
- Persistent WAL now supports concurrent read/write. Appending of new log entries to the log tail doesn't suspend readers anymore
- Added event id and event name to all log messages
DotNext.AspNetCore.Cluster 3.2.0
- Improved performance of log entries decoding on receiver side
- Added event id and event name to all log messages
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
FileBufferingWriter.Options
is refactored as value type to avoid heap allocation- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 3.1.1
- Updated dependencies
This release is primarily focused on improvements of stuff related to cluster programming and Raft: persistent WAL, transferring over the wire, buffering and reducing I/O overhead. Many ideas for this release were proposed by potrusil-osi in the issue 57.
- Added async support to
IGrowableBuffer<T>
interface - Added indexer to
MemoryOwner<T>
supporting nint data type - Added more members to
SpanReader<T>
andSpanWriter<T>
types
- Updated dependencies
- Updated dependencies
- Updated dependencies
AsyncTigger
now supports fairness policy when resuming suspended callers- Added support of diagnostics counters
- Added
SkipAsync
method toIAsyncBinaryReader
interface - Added
TryGetBufferWriter
toIAsyncBinaryWriter
interface that allows to avoid async overhead when writing to in-memory buffer - Added more performance optimization options to
FileBufferingWriter
class - Fixed bug in
StreamSegment.Position
property setter causes invalid position in the underlying stream
- Added support of three log compaction modes to
PersistentState
class:- Sequential which is the default compaction mode in 3.0.x and earlier versions. Provides best optimization of disk space by the cost of the performance of adding new log entries
- Background which allows to run log compaction in parallel with write operations
- Foreground which runs log compaction in parallel with commit operation
- Small performance improvements when passing log entries over the wire for TCP and UDP protocols
- Added buffering API for log entries
- Added optional buffering of log entries and snapshot when transferring using TCP or UDP protocols
- Introduced copy-on-read behavior to
PersistentState
class to reduce lock contention between writers and the replication process - Introduced in-memory cache of log entries to
PersistentState
class to eliminate I/O overhead when appending and applying new log entries - Reduced number of reads from Raft audit trail during replication
- Interpreter Framework: removed overhead caused by deserialization of command identifier from the log entry. Now the identifier is a part of log entry metadata which is usually pre-cached by underlying WAL implementation
DotNext.AspNetCore.Cluster 3.1.0
- Added ability to override cluster members discovery service. See
IMembersDiscoveryService
interface - Small performance improvements when passing log entries over the wire for HTTP/1, HTTP/2 and HTTP/3 protocols
- Added optional buffering of log entries and snapshot when transferring over the wire. Buffering allows to reduce lock contention of persistent WAL
- Introduced incremental compaction of committed log entries which is running by special background worker
Breaking Changes: Binary format of persistent WAL has changed. PersistentState
class from 3.1.0 release is unable to parse the log that was created by earlier versions.
DotNext.AspNetCore.Cluster 3.0.2
- Fixed IP address filter when white list of allowed networks is in use
- Minor performance optimizations of Raft heartbeat processing
DotNext.AspNetCore.Cluster 3.0.1
- Unexpected HTTP response received from Raft RPC call cannot crash the node anymore (see 54)
The next major version is out! Its primary focus is .NET 5 support while keeping compatibility with .NET Standard 2.1. As a result, .NEXT libraries built for multiple target frameworks. Additional changes include performance optimizations, polishing of existing API, dropping support of members that were deprecated in 2.x, expanding usage of nullable reference types.
Migration guide for 2.x users is here. Please consider that this version is not fully backward compatible with 2.x.
- Improved performance of SparseBufferWriter<T>, BufferWriterSlim<T>, PooledArrayBufferWriter<T>, PooledBufferWriter<T>
- Fixed nullability attributes
ArrayRental<T>
type is replaced by MemoryOwner<T> type- Removed obsolete members and classes
- Removed
UnreachableCodeExecutionException
exception - Completely rewritten implementation of extension methods provided by AsyncDelegate class
- Added Base64Decoder type for efficient decoding of base64-encoded bytes in streaming scenarios
- Removed
Future<T>
type - Added
ThreadPoolWorkItemFactory
static class with extension methods for constructing IThreadPoolWorkItem instances from method pointers. Available only for .NET 5 target - Introduced factory methods for constructing delegate instances from the pointers to the managed methods
DOTNEXT_STACK_ALLOC_THRESHOLD
environment variable can be used to override stack allocation threshold for all .NEXT routines- Dropped support of value delegates. They are replaced by functional interfaces. However, they are hiddent from the library consumer so every public API that was based on value delegates now has at least two overloads: CLS-compliant version using regular delegate type and unsafe version using function pointer syntax.
- Updated dependencies
- Changed behavior of
FileBufferingWriter.GetWrittenContentAsStream
andFileBufferingWriter.GetWrittenContentAsStreamAsync
in a way which allows you to use synchronous/asynchronous I/O for writing and reading separately - Introduced extension methods for BufferWriterSlim<char> type for encoding of primitive data types
- Fixed nullability attributes
- Added advanced encoding/decoding methods to IAsyncBinaryWriter and IAsyncBinaryReader interfaces
- Removed obsolete members and classes
- Simplified signature of
AppendAsync
methods exposed by IAuditTrail<TEntry> interface - Improved performances of extension methods declared in PipeExtensions class
- Updated dependencies
- Fixed nullability attributes
- Fixed issue 23
- Fixed code generation of finally blocks inside of asynchronous lambda expressions
- Updated dependencies
- Improved performance of reflective calls
- DynamicInvoker delegate allows to pass arguments for dynamic invocation as Span<object> instead of
object[]
- Fixed nullability attributes
- Modified ability to await on CancellationToken and WaitHandle. ValueTask is the primary return type of the appropriate methods
- Fixed nullability attributes
- Updated dependencies
- Removed obsolete members and classes
- Fixed nullability attributes
- Added
PinnedArray<T>
as a wrapper of pinned arrays from .NET 5 - Updated dependencies
- Improved performance of persistent WAL
- Added support of active-standby configuration of Raft cluster. Standby node cannot become a leader but can be used for reads
- Introduced framework for writing interpreters of log entries stored in persistent write-ahead log
- Added support of JSON-serializable log entries (available for .NET 5 only)
- Fixed bug causing long shutdown of Raft node which is using TCP transport
- Added support of PreVote extension for Raft preventing term inflation
DotNext.AspNetCore.Cluster 3.0.0
- Added
UsePersistenceEngine
extension method for correct registration of custom persistence engine derived from PersistentState class - Added support of HTTP/3 (available for .NET 5 only)
- Significantly optimized performance and traffic volume of AppendEntries Raft RPC call. Now replication performance is comparable to TCP/UDP transports
- Added DNS support. Now cluster member address can be specified using its name instead of IP address
DotNext.Augmentation
IL weaver add-on for MSBuild is no longer supported.
DotNext.Metaprogramming 2.12.2
- Fixed 46
DotNext.Metaprogramming 2.12.1
- Fixed invalid detection of the collection item type inside of CollectionAccessExpression
- Fixed issue 24
DotNext.AspNetCore.Cluster 2.12.1
- Fixed issue 24
- Added consuming enumerator for IProducerConsumerCollection<T>
- Introduced
ServiceProviderFactory
class and its factory methods for producing Service Providers - Significant performance improvements of
StringExtensions.Reverse
method - Introduced a new class
SparseBufferWriter<T>
in addition to existing buffer writes which acts as a growable buffer without memory reallocations - Updated dependencies
- Introduced
TextBufferReader
class inherited from TextReader that can be used to read the text from ReadOnlySequence<char> or ReadOnlyMemory<char> - Added
SequenceBuilder<T>
type for building ReadOnlySequence<T> instances from the chunk of memory blocks - Added
GetWrittenContentAsStream
andGetWrittenContentAsStreamAsync
methods to FileBufferingWriter class - Updated dependencies
DotNext.Metaprogramming 2.12.0
- Added support of
await using
statement - Added support of
await foreach
statement - Updated dependencies
- More performance optimizations in code generation mechanism responsible for the method or constructor calls
- Added ability to reflect abstract and interface methods
- Added support of volatile access to the field via reflection
- Added support of
Count
andCanCount
properties inherited from ChannelReader<T> by persistent channel reader - Added support of diagnostics counters for persistent channel
- Fixed resuming of suspended callers in AsyncTrigger class
- Updated dependencies
- Fixed ignoring of array offset in
ReadFrom
andWriteTo
methods of Pointer<T> type - Added
ToArray
method to Pointer<T> type - Added indexer property to IUnmanagedArray<T> interface
- Updated dependencies
- Updated dependencies shipped with .NET Core 3.1.10
DotNext.AspNetCore.Cluster 2.12.0
- Updated dependencies shipped with .NET Core 3.1.10
- More performance optimizations in code generation mechanism responsible for construction dynamic method or constructor calls
DotNext.Metaprogramming 2.11.1
- Fixed issue 19
Reflector.Unreflect
now can correctly represents void method or property setter as DynamicInvoker delegate- Unreflected members via DynamicInvoker delegate correctly handles boxed value types
- Improved performance of DynamicInvoker for by-ref argument of value type
- Added
Span<T>.CopyTo
andReadOnlySpan<T>.CopyTo
extension methods to support cases when the source span can be larger than the destination - Added
Span.AsSpan
andSpan.AsReadOnlySpan
for value tuples - Deprecated EnumerableTuple data type
- Minor performance improvements
- Updated dependencies
DotNext.Metaprogramming 2.11.0
- Overloaded
CodeGenerator.AsyncLambda
supports Pascal-style return (issue 13) - Fixed suppression of exceptions raised by generated async lambda (issue 14)
- Fixed invalid behavior of async lambda body rewriter (issue 17)
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Added
requestTimeout
configuration property for TCP/UDP transports - Stabilized shutdown of Raft server for TCP/UDP transports
- Added SSL support for TCP transport
- Updated dependencies shipped with .NET Core 3.1.9
DotNext.AspNetCore.Cluster 2.11.0
- Added
requestTimeout
andrpcTimeout
configuration properties for precise control over timeouts used for communication between Raft nodes (issue 12) - Updated dependencies shipped with .NET Core 3.1.9
- Fixed correctness of
Clear(bool)
method overridden byPooledArrayBufferWriter<T>
andPooledBufferWriter<T>
classes - Added
RemoveLast
andRemoveFirst
methods toPooledArrayBufferWriter<T>
class Optional<T>
type distinguishes null and undefined value- DotNext.Sequence class is now deprecated and replaced with DotNext.Collections.Generic.Sequence class. It's binary compatible but source incompatible change
- Added new API for writing resource string readers. It utilizes Caller Info feature in C# to resolve resource entry name using accessor method or property
- Introduced BufferWriterSlim<T> type as lightweight and stackalloc-friendly version of PooledBufferWriter<T> type
- Introduced SpanReader<T> and SpanWriter<T> types that can be used for sequential access to the elements in the memory span
- Removed unused resource strings
- Updated dependencies
DotNext.Metaprogramming 2.10.1
- Added extension methods of ExpressionBuilder class for constructing expressions of type Optional<T>, Result<T> or Nullable<T>
- Fixed bug with expression building using dynamic keyword
- UniversalExpression is superseded by ExpressionBuilder.AsDynamic extension method
- Removed unused resource strings
- Updated dependencies
- Removed unused resource strings
- Updated dependencies
- AsyncExchanger<T> class now has a method for fast synchronous exchange
- AsyncTimer implements IAsyncDisposable for graceful shutdown
- Removed unused resource strings
- Updated dependencies
- Pointer<T> value type now implements IPinnable interface
- Added interop between Pointer<T> and System.Reflection.Pointer
- Removed unused resource strings
- Updated dependencies
- Removed unused resource strings
- Updated dependencies shipped with .NET Core 3.1.8
DotNext.AspNetCore.Cluster 2.10.1
- Removed unused resource strings
- Updated dependencies shipped with .NET Core 3.1.8
- Improved performance of Enum Member API
- Fixed compiler warnings
- Updated dependencies
- Fixed compiler warnings
- Updated dependencies
- Fixed compiler warnings
- Updated dependencies
- Fixed compiler warnings
- Updated dependencies
- Fixed compiler warnings
- Updated dependencies
- Fixed unstable behavior of Raft TCP transport on Windows. See issue #10 for more info.
- Updated dependencies
DotNext.AspNetCore.Cluster 2.6.6
- Updated dependencies
- Added support of custom attributes to Enum Member API
- Added
Continuation.ContinueWithTimeout<T>
extension method that allows to produce the task from the given task with attached timeout and, optionally, token
- Fixed graceful shutdown for async locks if they are not in locked state
- Added AsyncExchanger<T> synchronization primitive that allows to organize pipelines
- AsyncTrigger now has additional
SignalAndWaitAsync
overloads
- Added
Sequence.ToAsyncEnumerable()
extension method that allows to convert arbitrary IEnumerable<T> to IAsyncEnumerable<T> - Added extension methods to
Sequence
class for working with [async streams]IAsyncEnumerable<T>
- Fixed behavior of
GetObjectDataAsync
method in StreamTransferObject. Now it respects the value ofIsReusable
property.
- Added
MemoryTemplate<T>
value type that represents pre-compiled template with placeholders used for fast creation ofMemory<T>
and string objects
- Added
BufferWriter.WriteLine
overloaded extension method that allows to specifyReadOnlySpan<char>
as an input argument
- Text writer constructed with
TextWriterSource.AsTextWriter
extension method can be converted to string containing all written characters
- Optimized
UnmanagedMemoryPool<T>.GetAllocator
method
UnmanagedMemoryPool<T>.GetAllocator
public static method is added for compatibility with MemoryAllocator<T> delegate
This release is mainly focused on DotNext.IO
library to add new API unifying programming experience across I/O pipelines, streams, sequences and buffer writers.
- Introduced extension methods in Span class for concatenation of memory spans
- Removed allocation of Stream in the extension methods of StreamSource class when passed ReadOnlySequence<byte> is empty
- StreamSource has additional methods to create streams from various things
- PooledArrayBufferWriter<T> and PooledBufferWriter<T> support reuse of the internal buffer using overloaded
Clear(bool)
method
- BufferWriter now contains extension methods that allow to use any object implementing IBufferWriter<char> as pooled string builder
- IAsyncBinaryReader, IAsyncBinaryWriter, PipeExtensions, StreamExtensions, SequenceBinaryReader types now containing methods for encoding/decoding primitive types, DateTime, DateTimeOffset, Guid to/from string representation contained in underlying stream, pipe or sequence in the binary form
- Fixed pooled memory leaks in SequenceBinaryReader
- TextWriter over IBufferWriter<char> interface using extension method in TextWriterSource class
- Enabled consistent build which is recommended for SourceLink
- Optimized construction of getter/setter for the reflected field
- Enabled consistent build which is recommended for SourceLink
- Enabled consistent build which is recommended for SourceLink
- Enabled consistent build which is recommended for SourceLink
- Enabled consistent build which is recommended for SourceLink
DotNext.AspNetCore.Cluster 2.6.1
- Reduced memory allocation caused by replication of log entries
- Enabled consistent build which is recommended for SourceLink
- More ways to create
MemoryOwner<T>
- Removed copying of synchronization context when creating continuation for
Future
object - Introduced APM helper methods in
AsyncDelegate
class
- Improved performance of
FileBufferingWriter
FileBufferingWriter
now contains correctly implementedBeginWrite
andEndWrite
methodsFileBufferingWriter
ables to return written content as ReadOnlySequence<byte>- Introduced
BufferWriter
class with extension methods for IBufferWriter<byte> aimed to encoding strings, primitive and blittable types - Support of
ulong
,uint
andushort
data types available for encoding/decoding inSequenceBinaryReader
andPipeExtensions
classes - Ability to access memory-mapped file content via ReadOnlySequence<byte>
- Introduced null-coalescing assignment expression
- Updated dependencies
- Introduced null-coalescing assignment expression
- Updated dependencies
- Fixed race-condition caused by
AsyncTrigger.Signal
method AsyncLock
now implements IAsyncDisposable interfaceAsyncExclusiveLock
,AsyncReaderWriterLock
andAsyncSharedLock
now have support of graceful shutdown implemented via IAsyncDisposable interface
- Optimized performance of methods in
MemoryMappedFileExtensions
class - Updated dependencies
- Fixed behavior of
PersistentState.DisposeAsync
so it suppress finalization correctly
DotNext.AspNetCore.Cluster 2.6.0
- Respect shutdown timeout inherited from parent host in Hosted Mode
- Updated dependencies
DotNext.Augmentation.Fody 2.1.0
- Removed usage of obsolete methods from
Fody
- Updated
Fody
version
- Improved performance of
PooledBufferWriter
MemoryAllocator<T>
now allows to allocate at least requested number of elements
- Ability to represent stream as IBufferWriter<T>
FileBufferingWriter
class is one more growable buffer backed by file in case of very large buffer size
- Fixed dynamic construction of tuples using
ValueTupleBuilder
class (PR #8)
- Reduced memory allocation caused by continuations in
Future
class - Improved performance of some methods in
MemoryRental<T>
andDelegateHelpers
classes - Reduced amount of memory re-allocations in
PooledBufferWriter<T>
andPooledArrayBufferWriter<T>
classes
ArrayRental<T>
can automatically determine array cleanup policyMemoryRental<T>
is improved for stackalloc/pooling pattern- Fixed bug in
Clear
method ofPooledBufferWriter
class
This release is mostly aimed to improving code quality of all .NEXT libraries with help of StyleCop analyzer.
DotNext.IO.StreamSource
class allows to convertReadOnlyMemory<byte>
orReadOnlySequence<byte>
to streamDotNext.IO.StreamSource
class allows to obtain writable stream forIBufferWriter<byte>
- Support of
BeginRead
andEndRead
methods inStreamSegment
class - Update to the latest
System.IO.Pipelines
library
- Fixed several compiler warnings
- Fixed several compiler warnings
- Fixed several compiler warnings
- Update to the latest
System.Threading.Channels
library
- Ability to convert
Pointer<T>
toIMemoryOwner<T>
- Added calls to
ConfigureAwait
in multiple places
DotNext.AspNetCore.Cluster 2.4.0
- Added calls to
ConfigureAwait
in multiple places - Fixed node status tracking when TCP or UDP transport in use
DotNext.AspNetCore.Cluster 2.3.2
- Section with local node configuration can be defined explicitly
DotNext.AspNetCore.Cluster 2.3.1
- Alternative methods for configuring local node
- Performance improvements of
BitwiseComparer
andIntrinsics
classes - Introduced new MemoryOwner<T> value type that unifies working with memory and array pools
- Path MTU discovery
- Pooled buffer writes: PooledBufferWriter<T> and PooledArrayBufferWriter<T>
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed bugs that lead to unexpected EndOfStreamException in some methods of
StreamExtensions
class - Introduced new methods in
StreamExtensions
class for reading data of exact size
- Improved performance of existing asynchronous locks
- Added AsyncTrigger synchronization primitive
- Updated dependencies
- TCP transport for Raft
- UDP transport for Raft
- Fixed bug in PersistentState class that leads to incorrect usage of rented memory and unexpected result during replication between nodes
- Methods for handling Raft messages inside of RaftCluster<TMember> class now support cancellation via token
DotNext.AspNetCore.Cluster 2.3.0
- Updated dependencies
- Fixed cancellation of asynchronous operations
- Ability to slice lists using range syntax and new
ListSegment
data type - Various extension methods for broader adoption of range/index feature from C# 8
- Support of range and index expressions from C# 8
- Access to memory-mapped file via
System.Memory<T>
data type
- Updated dependencies
- Updated dependencies
- Lighweight API for fast reflection is added. See overloaded
Unreflect
methods inReflector
class.
- Updated dependencies
DotNext.AspNetCore.Cluster 2.2.0
- Upgrade to latest ASP.NET Core
DotNext.Augmentation.Fody 2.0.1
- Removed obsolete calls
- Reduced memory footprint of
DotNext.Span
static constructor DotNext.UserDataStorage
behavior is now customizable viaUserDataStorage.IContainer
interface- Introduced
Intrinsics.GetReadonlyRef
method allows to reinterpret managed pointer to array element DelegateHelpers.Bind
now supports both closed and open delegates
Major release of version 2.0 is completely finished and contains polished existing and new API. All libraries in .NEXT family are upgraded. Migration guide for 1.x users is here. Please consider that this version is not fully backward compatible with 1.x.
Major version is here for the following reasons:
- .NET Core 3.1 LTS is finally released
- .NET Standard 2.1 contains a lot of new API required for optimizations. The most expected API is asynchronous methods in Stream class. These enhancements are necessary for evolution of .NEXT library. For instance, new DotNext.IO library could not be released without new .NET API.
- ASP.NET Core 2.2 is no longer supported by Microsoft. Therefore, DotNext.AspNetCore.Cluster library of version 1.x relies on unmaintainable platform. Now it is based on ASP.NET Core 3.1 which has long-term support.
What is done in this release:
- Quality-focused changes
- Removed trivial "one-liners" in DotNext library
- Reduced and unified API to work with unmanaged memory in DotNext.Unsafe library
- DotNext.AspNetCore.Cluster migrated to ASP.NET Core 3.1 LTS
- Increased test coverage and fixed bugs
- Additional optimizations of performance in Write-Ahead Log
- Fixed issue #4
- Introduced API for client interaction support described in Chapter 6 of Raft dissertation
- Migration to C# 8 and nullable reference types
- New features
- Introduced DotNext.IO library with unified asynchronous API surface for .NET streams and I/O pipelines. This API provides high-level methods for encoding and decoding of data such as strings and blittable types. In other words, if you want to have BinaryReader or BinaryWriter for pipelines then welcome!
- Ability to obtain result of task asynchronously when its result type is not known at compile-time
- Fast hexadecimal string conversion to
Span<byte>
and vice versa
Raft users are strongly advised to migrate to this new version.
- Ability to reconstruct internal state using
PersistentState.ReplayAsync
method
- Fixed invalid behavior of
StreamSegment.Position
property
- Removed redundant validation of log entry index in
PersistentState
- Fixed invalid usage of
GC.RemoveMemoryPressure
inReallocate
methods
UserDataStorage
no longer stores null values in its internal dictionary- Updated dependencies
- Migration to SourceLink 1.0.0
- Updated dependencies
- Migration to SourceLink 1.0.0
- Updated dependencies
- Migration to SourceLink 1.0.0
- Updated dependencies
- Migration to SourceLink 1.0.0
- Updated dependencies
- Fixed invalid calculation of byte length in
Pointer.Clear
method
- Updated dependencies
DotNext.AspNetCore.Cluster 1.2.9
- Updated dependencies
DotNext.AspNetCore.Cluster 1.2.8
- Improved performance of one-way no-ack messages that can be passed using
ISubscriber.SendSignalAsync
method
BitwiseComparer
now available as singleton instance
- Improved performance of copying log entry content when
PersistentState
is used as persistent audit trail
DotNext.AspNetCore.Cluster 1.2.7
- Improved performance of message exchange between cluster members
- Fixed typos in XML documentation
- Updated InlineIL.Fody dependency
- Fixed
MissingManifestResourceException
caused byAsyncLock
value type on .NET Core 3.x
- Updated InlineIL.Fody dependency
- Fixed NRE when
RaftCluster.StopAsync
called multiple times
DotNext.AspNetCore.Cluster 1.2.6
- Migration to patched
RaftCluster
class
- Fixed NRE when
Dispose
method of PersistentChannel class called multiple times
DotNext.AspNetCore.Cluster 1.2.5
- Fixed bug when log entry may have invalid content when retrieved from persistent audit trail. Usually this problem can be observed in case of concurrent read/write and caused by invalid synchronization of multiple file streams.
- PersistentChannel is added as an extension of channel concept from System.Threading.Channels. It allows to use disk memory instead of RAM for storing messages passed from producer to consumer. Read more here
- AsyncCounter allows to simplify asynchronous coordination in producer/consumer scenario
- Updated dependencies
- Fixed NRE
- Internal cache is optimized to avoid storage of null values
- Updated dependencies
- Updated dependencies
- Fixed unnecessary boxing of generic log entry value
DotNext.AspNetCore.Cluster 1.2.4
- Updated dependencies
DotNext.Augmentation.Fody 1.2.4
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Fixed potential NRE
- Fixed reflection of value type constructors
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
DotNext.AspNetCore.Cluster 1.2.3
- Updated dependencies
DotNext.Augmentation.Fody 1.2.3
- Updated dependencies
- Fixed bitwise equality
- Fixed
Intrinsics.IsDefault
method
- Fixed type modifier of
Current
property declared in CopyOnWriteList<T>.Enumerator
- Fixed memory leaks caused by methods in StreamExtensions class
- MemoryRental type is introduced to replace memory allocation with memory rental in some scenarios
- ArrayRental type is extended
- Value Delegates now are protected from dangling pointer issue caused by dynamic assembly loading
- Reduced amount of memory utilized by random string generation methods
- Strict package versioning rules are added to avoid accidental upgrade to major version
- Improved performance of AtomicEnum methods
- Improved performance of Atomic<T> using optimistic read locks
- Fixed unnecessary boxing in atomic operations
Intrinsics.HasFlag
static generic method is added as boxing-free and fast alternative to Enum.HasFlag method
- Updated version of
DotNext
dependency to fix potential memory leaks - Strict package versioning rules are added to avoid accidental upgrade to major version
- Updated version of
DotNext
dependency to fix potential memory leaks - Strict package versioning rules are added to avoid accidental upgrade to major version
- Updated version of
DotNext
dependency to fix potential memory leaks - Strict package versioning rules are added to avoid accidental upgrade to major version
- AsyncReaderWriterLock now supports optimistic reads
- UnmanagedMemoryPool is added
- Strict package versioning rules are added to avoid accidental upgrade to major version
- Updated version of
DotNext
dependency to fix potential memory leaks - Strict package versioning rules are added to avoid accidental upgrade to major version
- Fixed incorrect computation of partition in
PersistentState.DropAsync
method
DotNext.AspNetCore.Cluster 1.2.0
- HTTP/2 support
- Performance optimizations caused by changes in
ArrayRental
type - Strict package versioning rules are added to avoid accidental upgrade to major version
DotNext.Augmentation.Fody 1.2.0
- Improved support of
ValueRefAction
andValueRefFunc
value delegates
- Reduced number of inline IL code
- Updated version of FxCop analyzer
- ReaderWriterSpinLock type is introduced
- Improved performance of UserDataStorage
- Updated version of FxCop analyzer
- Improved performance of internal caches
- Updated version of FxCop analyzer
RefAnyValExpression
is added
- Updated version of FxCop analyzer
- Updated version of FxCop analyzer
- Minor performance optimizations of persistent WAL
- Updated version of FxCop analyzer
DotNext.AspNetCore.Cluster 1.1.0
- Updated version of FxCop analyzer
- Minor performance optimizations
- Minor performance optimizations
- Minor performance optimizations
- Introduced AsyncSharedLock as combination of reader/write lock and semaphore
- Minor performance optimizations
- Minor performance optimizations
- Minor performance optimizations
DotNext.AspNetCore.Cluster 1.0.1
- Minor performance optimizations
DotNext.Augmentation.Fody 1.0.1
- Code refactoring
This is the major release of all parts of .NEXT library. Now the version is 1.0.0 and backward compatibility is guaranteed across all 1.x releases. The main motivation of this release is to produce stable API because .NEXT library active using in production code, especially Raft implementation.
.NEXT 1.x is based on .NET Standard 2.0 to keep compatibility with .NET Framework.
- Optimized methods of Memory class
- Extension methods for I/O are introduced. Now you don't need to instantiate BinaryReader or BinaryWriter for high-level parsing of stream content. Encoding and decoding of strings are fully supported. Moreover, these methods are asynchronous in contrast to methods of
BinaryReader
andBinaryWriter
.
- API is stabilized
- API is stabilized
- AsyncManualResetEvent has auto-reset optional behavior which allows to repeatedly unblock many waiters
- MemoryMappedFileExtensions allows to work with virtual memory associated with memory-mapped file using unsafe pointer or Span<T> to achieve the best performance.
- Audit trail programming model is redesigned
- Persistent and high-performance Write Ahead Log (WAL) is introduced. Read more here
- Log compaction is supported
DotNext.AspNetCore.Cluster 1.0.0
- Redirection to leader now uses
307 Temporary Redirect
instead of302 Moved Temporarily
by default - Compatibility with persistent WAL is provided
DotNext.Augmentation.Fody 1.0.0
- Behavior of augmented compilation is stabilized
DotNext.AspNetCore.Cluster 0.5.7
- Custom redirection logic can be asynchronous
- Fixed compatibility of redirection to leader with MVC
DotNext.AspNetCore.Cluster 0.5.5
- Automatic redirection to leader now works correctly with reverse proxies
- Custom redirection logic is introduced
- Timestamp type is introduced as allocation-free alternative to Stopwatch
- Memory class now have methods for reading and writing null-terminated UTF-16 string from/to unmanaged or pinned managed memory
- Updated InlineIL dependency to 1.3.1
- AsyncTimer is completely rewritten in backward-incompatible way. Wait handle are no longer used.
DotNext.Unsafe 0.14.0
DotNext.Reflection 0.14.0
DotNext.Metaprogramming 0.14.0
- Small code fixes
- Updated
DotNext
dependency to 0.14.0 - Updated
Fody
dependency to 6.0.0 - Updated augmented compilation to 0.14.0
DotNext.Net.Cluster 0.5.0
DotNext.AspNetCore.Cluster 0.5.0
- Measurement of runtime metrics are introduced and exposed through MetricsCollector and HttpMetricsCollector classes
DotNext.Augmentation.Fody 0.14.0
- Updated
Fody
dependency to 6.0.0
DotNext.AspNetCore.Cluster 0.4.0
DotNext.Net.Cluster 0.4.0
- Heartbeat timeout can be tuned through configuration
- Optimized Raft state machine
DotNext.AspNetCore.Cluster 0.3.5
- Docker support
DotNext.AspNetCore.Cluster 0.3.3
DotNext.Net.Cluster 0.3.3
- Reduced number of logs produced by cluster node
DotNext.AspNetCore.Cluster 0.3.2
- Fixed endpoint redirection to leader node
DotNext.AspNetCore.Cluster 0.3.1
- Fixed detection of local IP address
- Improved IPv6 support
- Fixed bug with equality comparison of null arrays inside of EqualityComparerBuilder
- Improved debugging experience:
- SourceLink is enabled
- Debug symbols now embedded into assembly file
- NuGet Symbols Package is no longer used
- Internals of several classes now based on Value Delegates to reduce memory allocations
- Improved debugging experience:
- SourceLink is enabled
- Debug symbols now embedded into assembly file
- NuGet Symbols Package is no longer used
DotNext.Unsafe 0.13.0
DotNext.Reflection 0.13.0
DotNext.Metaprogramming 0.13.0
DotNext.Net.Cluster 0.3.0
DotNext.AspNetCore.Cluster 0.3.0
- Improved debugging experience:
- SourceLink is enabled
- Debug symbols now embedded into assembly file
- NuGet Symbols Package is no longer used
- Value (struct) Delegates are introduced as allocation-free alternative to classic delegates
- Atomic<T> is added to provide atomic memory access operations for arbitrary value types
- Arithmetic, bitwise and comparison operations for IntPtr and UIntPtr
- Improved performance of methods declared in EnumConverter
- Improved performance of atomic operations
- Improved performance of bitwise equality and bitwise comparison methods for value types
- Improved performance of IsDefault method which allows to check whether the arbitrary value of type
T
isdefault(T)
- GetUnderlyingType() method is added to obtain underlying type of Result<T>
- TypedReference can be converted into managed pointer (type T&, or ref T) using Memory class
This release introduces a new feature called Value Delegates which are allocation-free alternative to regular .NET delegates. Value Delegate is a value type which holds a pointer to the managed method and can be invoked using Invoke
method in the same way as regular .NET delegate. Read more here.
ValueType<T>
is no longer exist and most of its methods moved into BitwiseComparer class.
- Ability to obtain managed pointer (type T&, or
ref T
) to static or instance field from FieldInfo using Reflector class
- AsyncLazy<T> is introduced as asynchronous alternative to Lazy<T> class
DotNext.Metaprogramming 0.12.0
- Null-safe navigation expression is introduced
- UnmanagedFunction and UnmanagedFunction<R> classes are introduced to call unmanaged functions by pointer
DotNext.Net.Cluster 0.2.0 DotNext.AspNetCore.Cluster 0.2.0
- Raft client is now capable to ensure that changes are committed by leader node using WriteConcern