Changelog
4.5.9
Fixed
- Fixes PlatformNotSupportedException exception that was thrown since version 4.5.0 on Linux systems when handling posted events.
4.5.8
Added
- Internal infrastructure updates for the latest release of the ScaleOut Digital Twin Streaming Service™.
Fixed
- ProtocolViolationException errors now cause the associated network connection to be closed in order to prevent problems with subsequent cache operations.
4.5.6
Added
- Support for connecting to ScaleOut deployments running on Google Cloud. See Connecting to ScaleOut in Google Cloud.
- Compatibility support for accessing legacy ASP.NET Framework session state objects stored in the StateServer service. See Accessing ASP.NET Framework Sessions from ASP.NET Core
- Internal infrastructure updates for the latest release of the ScaleOut Digital Twin Streaming Service™.
4.5.4
Fixed
- Reintroduces connection management behavior that was unintentionally changed in version 4.1.10: Local clients are again allowed to open more connections to the local ScaleOut server instance than the limit set in the connection string.
4.5.3
Added
- Internal infrastructure updates for the latest release of the ScaleOut Digital Twin Streaming Service™.
Fixed
- Fix NullReferenceException that could be thrown during processing of a ScaleOut Digital Twin Streaming Service™ message when a message exceeds 64KB.
4.5.0
Changed
- Add/update operations now perform automatic retries when the
ScaleOut service reports that it is low on memory or that it is
otherwise not ready to perform the operation (due to heavy load or
environmental delays). The duration of the retry period is
controlled by the new
notReadyTimeoutSecs
connection string value. - Reduced garbage collection overhead during PostEvent/SMI event processing.
Fixed
- Fix potential hang in Invocation Grid workers when event handlers initiate their own PMI/SMI/PostEvent operations.
4.4.5
Fixed
- Fix potential event delivery hang when an SMI/PMI/PostEvent operation is sent to an invocation grid that has not registered to handle service events for the specified object's cache.
- Improved consistency of Digital Twin simulations during ScaleOut server membership changes.
4.4.1
Fixed
- Fix to deployment of ScaleOut Digital Twin Streaming Service models that participate in simulations.
4.4.0
Added
- Adds new InvocationGridManager overloads that accept an InvocationGridOptions object. (Supports ScaleOut Digital Twin Streaming Service models that participate in simulations).
4.3.0
Added
- Support for connecting to ScaleOut deployments running on AWS EC2. See Connecting to ScaleOut in AWS EC2.
- Internal infrastructure support for the ScaleOut Digital Twin Streaming Service™.
Fixed
- Cache.ReleaseExclusiveLock and Cache.ReleaseExclusiveLockAsync now throw and ArgumentException instead of hanging if an empty lock token is provided.
4.2.11
Fixed
- Fixes InvalidOperationException that could be thrown when deploying or signaling an Invocation Grid that is running on multiple ScaleOut hosts.
4.2.10
Fixed
- Fixes exception that was thrown when large parameter objects (larger than 64 KB) were used in Invoke, Single Object Invoke, and PostEvent operations.
4.2.9
Added
- Adds support to improve debugging experience for Invocation Grid Worker processes.
4.2.7
Fixed
- Updates Scaleout.Collections NuGet dependency to latest release (1.0.4) to get latest stability fixes.
- Fixes internal bookkeeping of event registrations when one client application handles events from multiple ScaleOut stores.
- Fixes ProtocolViolationException that could be thrown from cache Add/Update operations when GeoServer Notify is configured on a cache but the remote ScaleOut servers are not available.
- Fixes NoActiveRemoteStoreException that could be thrown from cache read operations when GeoServer Notify is configured on a cache and all the ScaleOut servers in the local cluster are restarted.
- Fixes issue where the CacheResponse.Value property could throw a NotSupportedException after reading a GeoServer proxy object whose value is stale.
- The library no longer throws a ProtocolViolationException when an application tries to use GeoServer Pull when the local store name is not set in the ScaleOut service's configuration. A LocalStoreNameConfigurationException is thrown instead.
- The library no longer throws a ProtocolViolationException when an application tries to use GeoServer Pull and the local store name is used as a remote GeoServer store. An ArgumentException is thrown instead.
Added
- Adds new Invoke, PostEvent, and SingleObjectInvoke overloads to the Cache class that allow a target Invocation Grid to be specified using the service's internal numeric identifier. These overloads are intended for use in rare scenarios when the service's internal numeric Invocation Grid identifier is known but its string name is not--their primary intent is to support internal product infrastructure.
- Adds new InvocationGridManager.StartPreinstalledIG method for launching Invocation Grids that are pre-installed on the ScaleOut service's host machines.
4.1.11
Fixed
- 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.
4.1.10
Added
- Adds support for hosting PMI, PostEvent, and single-object invocation handlers in Invocation Grid worker processes.
Fixed
- Fixes ArgumentNullException that was thrown from
ServiceEvents
methods when registering for events on a cache that was built using a numeric ID instead of a cache name.
4.0.2
Fixed
- 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.
4.0.1
- Adds support for ScaleOut GeoServer® Pro replication.
3.1.4
Fixed
- 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.
3.1.3
Fixed
- Removes internal usage of Microsoft.Extensions.Logging.Abstractions.NullScope, which is not present in newer versions of Microsoft.Extensions.Logging.Abstractions.
3.1.2
Fixed
- 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.
3.1.1
Fixed
- References to deep copies are no longer added to the in-process client cache during read operations.
3.1.0
Added
- The in-process client cache can now be configured to use multiple internal
partitions to improve throughput under heavy multithreaded load.
See the
clientCachePartitions
setting in Configuring Cache Policies and CacheBuilder.SetClientCache for details.
3.0.0
Added
- 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
CacheBuilder.SetKeystringCacheSize
method (and
keystringCacheSize
config 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.
Changed
- 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.
2.2.2
Fixed
- 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.
2.2.1
Changed
- Increases connection string's
maxPoolSize
limit from 64 to 128.
2.2.0
Added
- 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.
2.1.4
Added
- Internal infrastructure changes to support the ScaleOut Digital Twin Streaming Service™.
2.1.3-alpha
Internal development and testing release. (Not released publicly.)
2.1.2
Fixed
- 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."
2.1.1
Fixed
- Fixed incorrect ArgumentNullException that could be thrown from synchronous Cache.Read operations when backing store read-through operations are enabled via CacheBuilder.RaiseServiceEventForReadThrough().
2.1.0
Added
- Added support for issuing and handling server-side Single Object Invoke operations. See Invoking a Method on an Object and Handling Single Object Invocations.
Fixed
- 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.
2.0.1
Official 2.0 release. No changes since the 2.0 beta other than removal of the NuGet package's "prerelease" status.
2.0.0-beta
Added
- Added synchronous versions of most API calls.
- Added support for processing ScaleOut StreamServer events. See Posting Events and Handling Posted Event Streams.
Changed
- 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
and
async
callbacks.
1.1.6
Fixed
- 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.
1.1.0
Added
- 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:
- Through a config file (see Configuring Cache Policies).
- Through the CacheBuilder class using CacheBuilder.SetPreemptionPriority.
- On an object-by-object basis using the CreatePolicyBuilder.PreemptionPriority property.
Changed
- 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.
1.0.1
Changed
- Fixed issue where unspecified connection string parameters defaulted to zero instead of their expected default values.
1.0.0
Changed
- 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.
0.5.1-beta
Changed
- 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.
0.5.0-beta
Initial beta release.
Changed
- 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.
0.4.0-alpha
Added
- 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.
Breaking Changes
- Major rework of cache configuration (based on internal and early
customer feedback--thank you!). See Configuration Overview for
details. Specifically:
- 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.
0.3.0-alpha
Added
- 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.
0.2.0-alpha
Breaking Changes
- 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.
Added
- Support for more than 2 parent objects when defining dependencies. (Requires server version 5.7.3.328 or higher)
- Allow using DNS names in BootstrapGateways configuration.
- Added Cache.GetMetadataAsync implementation: retrieves server metadata for an object stored in the ScaleOut service.
Changed
- Fixed ShortStringKeyEncoder: key no longer needs to be exactly 32 bytes.
0.1.0-alpha
- Initial alpha release.