- Updates NuGet package dependencies to address NuGet version conflicts for System.Memory and System.Threading.Tasks.Extensions when targeting the traditional .NET 4.x Framework.
- Adds support for hosting PMI, PostEvent, and single-object invocation handlers in Invocation Grid worker processes.
- Fixes ArgumentNullException that was thrown from
ServiceEventsmethods when registering for events on a cache that was built using a numeric ID instead of a cache name.
- Fixes issue where passing a null UpdatePolicy argument to a cache update method would cause the object's timeout to be reset to the cache's default. A null UpdatePolicy now causes the object's timeout to remain unchanged.
- Adds support for ScaleOut GeoServer® Pro replication.
- Further performance improvements to the library's internal connection pool on the traditional .NET Framework: New lock management in the network layer improves client performance when 200+ ASP.NET worker threads perform simultaneous cache operations.
- Removes internal usage of Microsoft.Extensions.Logging.Abstractions.NullScope, which is not present in newer versions of Microsoft.Extensions.Logging.Abstractions.
- Expands upon 3.1.1 to address additional interaction between deep copies and the in-process client cache. Specifically, deep copies that are retrieved from a round-trip to the ScaleOut service (as opposed to deep copies from a local network cache hit) are no longer added to the in-process client cache during read operations.
- References to deep copies are no longer added to the in-process client cache during read operations.
- The in-process client cache can now be configured to use multiple internal
partitions to improve throughput under heavy multithreaded load.
clientCachePartitionssetting in Configuring Cache Policies and CacheBuilder.SetClientCache for details.
- Adds support for Parallel Method Invocation (PMI) operations against objects stored in the ScaleOut service. See About Parallel Method Invocation for details.
- Adds in-process client cache eviction strategies based on memory usage. See Eviction for a list of available eviction strategies.
- Adds ability to define a custom in-process client cache implementation. See Implementing a Custom Client Cache for an example.
- Adds new OverrideCoherencyIntervalDeepCopy option to allow the coherency interval to be overridden for individual reads that perform deep copies.
- Adds new
keystringCacheSizeconfig setting) to tune/reduce string key retrieval overhead in PMI invocation handler operations.
- Adds GetCacheInfo(CancellationToken) method to retrieve details about all caches in the ScaleOut service.
- Adds new CacheBuilder(UInt32, GridConnection) constructor that allows a cache to be built using just the internal numeric ID used by the ScaleOut service.
- SossIndexAttribute has been moved into a separate NuGet package (Scaleout.Client.Attributes) that has no dependencies.
- Removed and replaced obsolete cache extension methods from QueryableExtensions for running PMI Invoke() operations using a LINQ expression.
- Fixes degraded performance of internal connection pool on .NET Framework when many threads (tens/hundreds) are waiting for a connection to the ScaleOut service.
- Improves performance of internal connection pool under mixed sync/async load on .NET Framework.
- Increases connection string's
maxPoolSizelimit from 64 to 128.
- Adds ability to override the cache's default coherency policy interval for individual read operations: supply a ReadOptions struct to the read call, setting ClientCacheUsage to OverrideCoherencyInterval and the CoherencyInterval property to the desired duration.
- Internal infrastructure changes to support the ScaleOut Digital Twin Streaming Service™.
Internal development and testing release. (Not released publicly.)
- Fixed networking issue when running as a .NET Core 3.x Azure App Service. Connecting to ScaleOut hosts through the Azure VNet Integration feature could cause a SocketException to be thrown that states, "An attempt was made to access a socket in a way forbidden by its access permissions."
- Fixed incorrect ArgumentNullException that could be thrown from synchronous Cache.Read operations when backing store read-through operations are enabled via CacheBuilder.RaiseServiceEventForReadThrough().
- Added support for issuing and handling server-side Single Object Invoke operations. See Invoking a Method on an Object and Handling Single Object Invocations.
- Improved connection retry logic when all ScaleOut services abruptly become unavailable. While attempting to locate an active host, the client library now includes all hosts from the connection string's original bootstrap list instead of just using hosts it had previously connected to.
Official 2.0 release. No changes since the 2.0 beta other than removal of the NuGet package's "prerelease" status.
- Added synchronous versions of most API calls.
- Added support for processing ScaleOut StreamServer events. See Posting Events and Handling Posted Event Streams.
- Redesigned ServiceEvents registration methods to be synchronous--they no
longer need to be awaited. The original async methods have been deprecated, and
the new event registration methods are overloaded to accept both synchronous
- Fix to address a report of a System.ExecutionEngineException that was thrown when connecting to the ScaleOut service.
- Fix deadlocks that could occur when running in environments that use a synchronization context (WinForms, legacy ASP.NET, etc.).
- Connection strings with extraneous trailing semicolons will no longer throw an ArgumentException.
- Added new GridConnection.GetCacheNamesAsync method, allowing clients to retrieve the names of all caches in the ScaleOut service.
- Added PreemptionPriorty as a cache-wide policy, allowing control over object eviction when the ScaleOut service runs low on memory. Preemption priority can be set one of three ways:
- Increased the default client cache capacity from 100 to 1000 items. The capacity can be set explicitly using CacheBuilder.SetClientCache or through a config file (see Configuring Cache Policies).
- Improved network cache performance when the client cache is disabled.
- Fixed issue where unspecified connection string parameters defaulted to zero instead of their expected default values.
- Connection strings are no longer passed directly to a CacheBuilder constructor--they are passed to a GridConnection.Connect or ConnectAsync call instead. The returned GridConnection object is then passed to the CacheBuilder constructor. See Connecting to a ScaleOut Data Grid for an overview and updated examples.
- Added new Cache.TryReadExclusiveAsync method that fails immediately if another caller has the object locked instead of waiting until the object becomes available.
- Nuget package is now multitargeted (.NET Standard 2.0 and .NET Framework >= 4.6.2) instead of just .NET Standard.
- Fixed NullReferenceException that was thrown when network cache is enabled.
Initial beta release.
- Fixed issue in remote read-through handler where an unhandled exception in a user callback could hang callers waiting for completion.
- Various documentation improvements (new topics for backing store events, return codes on CacheResponse.Result for typical CRUD operations, fixed misc. typos).
- Removed unused and stubbed-out query methods from Cache class that had never been implemented due to redesign.
- Notification of object expiration events is now supported. See Expiration Events.
- Support for tags and queries filtered on tag values. See Querying for Tags.
- Handling async backing store events via callbacks registered through the SetLoadObjectHandlerAsync (refresh-ahead) and SetStoreObjectHandlerAsync (write-behind) methods.
- Major rework of cache configuration (based on internal and early
customer feedback--thank you!). See Configuration Overview for
- Connection information is no longer specified in a strict configuration structure. Connection strings are now used. (See Connecting to a ScaleOut Data Grid).
- A config file is no longer required. A CacheBuilder instance can be constructed with just a connection string and policies can be set on the CacheBuilder at runtime.
- To use cache policies from a .NET Core configuration file, supply the CacheBuilder constructor with in just the config section containing the configuration info for your cache. A top-level ScaleOut-specific section should no longer be passed in.
- The cache policy settings in a config file no longer have a one-to-one relationship with a named cache. Multiple caches can now use the same cache policy config section.
- For traditional .NET Framework apps that need to pull policies
from a config file, pass a
LegacyXmlConfiguration instance to the cache
builder. The LegacyXmlConfiguration constructor takes the name of
an entry under the config file's
section. See Configuring Cache Policies for details.
- To better support future object policy options, the immutable CreatePolicy class has been changed to use a builder pattern instead of a large number of optional constructor arguments for instantiation. The CreatePolicyBuilder class is now used to set policies on objects--for convenience, use GetPolicyBuilder() to get a builder instance that is pre-populated with a cache's default policies. See Dependencies for a usage example.
- Cache names are now registered with the ScaleOut service (for display in ScaleOut Object Browser and "soss.exe list_names").
- Implemented Cache.ClearAsync() to clear all objects from a cache.
- Configuration: "Name" field in Cache configuration has been renamed to "CacheName" (.NET Core's config provider for XML uses "name" as a reserved attribute to identify array element offsets, causing a conflict). Please update your config files.
- Configuration: The CacheBuider constructor now takes the
IConfigSection containing ScaleOut settings rather than its
parent. (In other words, the constructor no longer assumes that it
is given the top-level IConfigSection instance, and the ScaleOut
section doesn't have to be called "Scaleout.Client"--users now
define where the ScaleOut configuration section goes in their .NET
Core config files.) Please change your CacheBuider usage as needed:
typically, this means adding a
GetSection("Scaleout.Client")call to the IConfigSection instance that was passed into the 0.1.0-alpha version of CacheBuider.
- Support for more than 2 parent objects when defining dependencies. (Requires server version 220.127.116.118 or higher)
- Allow using DNS names in BootstrapGateways configuration.
- Added Cache.GetMetadataAsync implementation: retrieves server metadata for an object stored in the ScaleOut service.
- Fixed ShortStringKeyEncoder: key no longer needs to be exactly 32 bytes.
- Initial alpha release.