GridGain 8.7.28 Release Notes
New Features
- .NET Thin Client Transactions
-
GridGain.NET Thin Client can now perform multiple cache operations atomically with the Transaction API.
Explicit GridGain transactionvar cfg = new IgniteClientConfiguration { ... }; IIgniteClient client = Ignition.StartClient(config); ICacheClient<int, int> cache = client.GetOrCreateCache<int, int>("foo"); using (var tx = client.GetTransactions().TxStart( TransactionConcurrency.Optimistic, TransactionIsolation.Serializable)) { if (cache.TryGet(1, out var val)) cache[1] = val + 10; else cache[1] = 20; tx.Commit(); }
Ambient TransactionScopevar cfg = new IgniteClientConfiguration { ... }; IIgniteClient client = Ignition.StartClient(config); ICacheClient<int, int> cache = client.GetOrCreateCache<int, int>("foo"); using (var tx = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions {IsolationLevel = IsolationLevel.Serializable})) { if (cache.TryGet(1, out var val)) cache[1] = val + 10; else cache[1] = 20; tx.Complete(); }
See documentation for more details on GridGain transactions.
- Java Thin Client Async API
-
GridGain Thin Client now provides async counterparts for most of the APIs. Async methods return
IgniteClientFuture<T>
interface, which extendsFuture<T>
andCompletionStage<T>
.Chain multiple asynchronous operations withCompletionStage
IgniteClient client = Ignition.startClient(...); client.<Integer, String>createCacheAsync("some-cache") .thenCompose(cache -> cache.getAsync(1)) .thenAccept(cacheVal -> System.out.println("Cache value: " + cacheVal));
Blocking waitIgniteClient client = Ignition.startClient(...); IgniteClientFuture<Collection<String>> future = client.cacheNamesAsync(); Collection<String> cacheNames = future.get();
- Use SFTP to store snapshots
-
Snapshots API has been expanded to support SFTP as remote centralized storage for snapshot drives. This is helpful when mounting the remote storage as a network drive is not possible.
Supported operations:
copy
,move
,check
,list
,restore
,recoveryTo
.Enabling access to SFTP server with SSL keys via XML configuration<property name="pluginConfigurations"> <bean class="org.gridgain.grid.configuration.GridGainConfiguration"> <property name="snapshotConfiguration"> <bean class="org.gridgain.grid.configuration.SnapshotConfiguration"> <property name="sftpConfiguration"> <!-- Enabling SFTP storage with SSL keys access. --> <bean class="org.gridgain.grid.persistentstore.snapshot.file.SftpConfiguration"> <!-- JKS path. --> <property name="keyPath" value="path" /> <!-- JKS passphrase(optional). --> <property name="passphrase" value="password" /> </bean> </property> </bean> </property> </bean> </property>
Enabling access to SFTP server with SSL keys via java configurationnew IgniteConfiguration() .setPluginConfigurations( new GridGainConfiguration() .setSnapshotConfiguration( new SnapshotConfiguration() .setSftpConfiguration( new SftpConfiguration() .setKeyPath("storage/key.jks") .setPassphrase("secret"))));
Unified java API for snapshot operationsSnapshotPath sftpDestWithKey = SnapshotPath.sftp() .uri(new URI("sftp://login@address:port/relativePath")) .keyAlias("keyAlias")// Alias to get sftp key from JKS .build(); SnapshotPath sftpDestWithLoginPassword = SnapshotPath.sftp() .uri(new URI("sftp://login:password@address:port/relativePath")) .build(); SnapshotPath fsDest = SnapshotPath.file() .path(new File(path)) .build(); Ignite ignite; GridGain gridgain = ignite.plugin(GridGain.PLUGIN_NAME); GridSnapshot snapshotFacade = gridgain.snapshot(); // Copy example snapshotFacade.copy( new CopySnapshotParams() .snapshotId(snapshotId) .destinationPath(sftpDestWithKey) .chainMode(SnapshotChainMode.SINGLE) .singleFileCopy(true) ).get(); // Move example snapshotFacade.move( new MoveSnapshotParams() .snapshotId(snapshotId) .destinationPath(sftpDestWithKey) .chainMode(SnapshotChainMode.SINGLE) .singleFileCopy(true) ).get(); // Check example snapshotFacade.check( new CheckSnapshotParams() .snapshotId(arg.getSnapshotId()) .optionalSearchPaths(Arrays.asList(sftpDestWithKey, sftpDestWithLoginPassword, fsDest)) .forceRestore(arg.isForce()) .cacheNames(arg.getCacheNames()) .skipCrc(arg.isSkipCrc()) .message(arg.getMessage()) ).get(); // Check example snapshotFacade.check( new CheckSnapshotParams() .snapshotId(arg.getSnapshotId()) .optionalSearchPaths(Arrays.asList(sftpDestWithKey, sftpDestWithLoginPassword, fsDest)) .forceRestore(arg.isForce()) .cacheNames(arg.getCacheNames()) .skipCrc(arg.isSkipCrc()) .message(arg.getMessage()) ).get(); // List example snapshotFacade.list( new ListSnapshotParams() .optionalSearchPaths(Arrays.asList(sftpDestWithKey, sftpDestWithLoginPassword, fsDest)) ).get(); // Restore example snapshotFacade.restore( new RestoreSnapshotParams() .snapshotId(snapshotId) .optionalSearchPaths(Arrays.asList(sftpDestWithKey, sftpDestWithLoginPassword, fsDest)) ).get(); // Enterprise Edition GridSnapshotEx pitrSnapshotFacade = (GridSnapshotEx)snapshotFacade; // Recovery to example pitrSnapshotFacade.recoveryTo( new RecoveryParams() .time(p.time) .message("recovery done") .optionalSearchPaths(Arrays.asList(sftpDestWithKey, sftpDestWithLoginPassword, fsDest)) ).get();
Snapshot-util API# Key alias may be provided in additional parameter. # In this case all sftp destinations will try to use this key alias. snapshot-utility.sh move -id=123456 -dest=sftp://login@address:port/relativePath -key_alias=keyAlias snapshot-utility.sh copy -id=123456 -dest=sftp://login:password@address:port/relativePath snapshot-utility.sh list -src=sftp://login@address:port/relativePath -key_alias=keyAlias snapshot-utility.sh restore -src=sftp://login@address:port/relativePath -key_alias=keyAlias
Improvements and Fixed Issues
Community Edition Changes
GG-30933 |
GridGain Integrations |
Upgraded Spring Core 4.3.25 to 4.3.29, Spring Core 5.0.17 to 5.0.19, Spring Data 1.13.14 to 1.13.23 |
GG-30929 |
GridGain Integrations |
netty is upgraded from 4.1.42 in ignite-cassandra and 4.1.51 in ignite-zookeeper to 4.1.52 |
GG-30927 |
Cluster Storage Engine |
Fixed memory leak introduced in 8.7.25 manifesting itself when caches with unique names are created and then destroyed |
GG-30917 |
Cluster Continuous Queries |
Fixed an issue where Continuous Query deployment, after client node reconnection with the new node id, could lead to remote nodes failure when peer class loading is enabled, and remote nodes don’t have a remote filter in the classpath. |
GG-30878 |
Platforms & Thin Clients |
Java Thin Client: Added asynchronous methods to Cache API, Compute API and |
GG-30868 |
Platforms & Thin Clients |
Added Transaction API to .NET thin client |
GG-30851 |
Platforms & Thin Clients |
Improved server performance for a case when there are a lot of thin client connections |
GG-30818 |
Cluster Control Script |
New command '--property' is added to manage distributed properties by command line interface |
GG-30816 |
Control Center Agent |
Fixed a bug in the Control Center Agent when it does not try to reconnect to the Control Center if there is no answer on heartbeat. |
GG-30754 |
Platforms & Thin Clients |
Fixed "Unsupported protocol version" exception when getting cache configuration from Java thin client. |
Enterprise Edition Changes
GG-30817 |
Cluster Data Replication |
Introduced a property |
Ultimate Edition Changes
GG-30841 |
Cluster Snapshot Utility |
Improved error output of the |
GG-30814 |
Cluster Data Snapshots and Recovery |
Added ability to use remote SFTP server to store snapshots. Java API for snapshots was updated. |
Installation and Upgrade Information
See the Rolling Upgrades page for information about how to perform automated upgrades and for details about version compatibility.
Below is a list of versions that are compatible with the current version. You can rolling-upgrade from any of those. Compatibility with other versions is not guaranteed. If you are on a version that is not listed, contact GridGain for the information on upgrade options.
8.5.3
, 8.5.5
, 8.5.6
, 8.5.7
, 8.5.8
, 8.5.8-p6
, 8.5.9
,
8.5.10
, 8.5.11
, 8.5.12
, 8.5.13
, 8.5.14
, 8.5.15
, 8.5.16
, 8.5.17
, 8.5.18
, 8.5.19
, 8.5.20
, 8.5.22
,
8.5.23
, 8.5.24
, 8.7.2
, 8.7.2-p12
, 8.7.2-p13
, 8.7.3
, 8.7.4
, 8.7.5
, 8.7.6
, 8.7.7
, 8.7.8
, 8.7.9
,
8.7.10
, 8.7.11
, 8.7.12
, 8.7.13
, 8.7.14
, 8.7.15
, 8.7.16
, 8.7.17
, 8.7.18
, 8.7.19
, 8.7.19-p1
, 8.7.20
,
8.7.21
, 8.7.22
, 8.7.23
, 8.7.24
, 8.7.25
, 8.7.26
, 8.7.27
Known Limitations
Jetty configuration incompatibility in GridGain 8.7.21 and later
If you are upgrading from version 8.7.20 or earlier, you must take into account an incompatibility related to Jetty configuration, which was introduced in GridGain 8.7.21.
Your setup may be affected if:
-
You’re using the
ignite-rest-http
module (e.g. to connect to GridGain Web Console) -
You have a custom Jetty configuration that enables SSL for REST
-
Your Jetty configuration uses the
org.eclipse.jetty.util.ssl.SslContextFactory
class -
The keystore specified in the Jetty configuration contains both the CA certificate and the private certificate
In this case, after starting the new version, you’ll see an error similar to:
java.lang.IllegalStateException: KeyStores with multiple certificates are not supported on the base class
org.eclipse.jetty.util.ssl.SslContextFactory. (Use org.eclipse.jetty.util.ssl.SslContextFactory$Server
or org.eclipse.jetty.util.ssl.SslContextFactory$Client instead)
To workaround this issue, you need to alter the Jetty configuration to use org.eclipse.jetty.util.ssl.SslContextFactory$Server
or org.eclipse.jetty.util.ssl.SslContextFactory$Client
.
For a configuration example, see Client Certificate Authentication.
Default rebalanceThreadPoolSize
in GridGain 8.7.26 and later
In GridGain 8.7.26, the default value of the property IgniteConfiguration.rebalanceThreadPoolSize
has changed from 1
to min(4, number of CPU / 4)
.
It may cause a compatibility issue under the following conditions:
-
A Rolling Upgrade is being performed
-
The upgrade is performed from a version 8.5.7 or earlier for 8.5.x, or 8.7.3 or earlier for 8.7.x
-
The server nodes have at least 8 CPU cores
-
The nodes configuration don’t have the property
IgniteConfiguration.rebalanceThreadPoolSize
set (i.e. the default value is used)
In this case, you’ll see an error similar to
сlass org.apache.ignite.IgniteException: Rebalance configuration mismatch (fix configuration or set -DIGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK=true system property).
Different values of such parameter may lead to rebalance process instability and hanging. [rmtNodeId=5fc58fb7-209d-489a-8034-0127a81abed6, locRebalanceThreadPoolSize = 4, rmtRebalanceThreadPoolSize = 1]
To workaround this issue, you need to change the configuration of the server nodes to set rebalanceThreadPoolSize=1
so that it matches
the old default. Example:
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="rebalanceThreadPoolSize" value="1"/>
<!-- The rest of the configuration goes here -->
</bean>
We Value Your Feedback
Your comments and suggestions are always welcome. You can reach us here: https://gridgain.freshdesk.com/support/login or docs@gridgain.com
Please visit the documentation for more information.
© 2025 GridGain Systems, Inc. All Rights Reserved. Privacy Policy | Legal Notices. GridGain® is a registered trademark of GridGain Systems, Inc.
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.