GridGain Developers Hub

GridGain 9.1.24 Release Notes

Overview

GridGain 9.1.24 adds leaseholder balancing and improves .NET cluster API. It also extends SQL system views, improves SQL planning and transaction handling, and fixes a number of issues across the SQL engine, thin clients, and continuous queries.

Major Changes

JitPack Repository No Longer Required

GridGain no longer depends on artifacts published on JitPack. The dependency that previously required the jitpack.io repository (see the 9.1.21 release notes) is now served from the GridGain Maven repository.

It is recommended to remove jitpack.io dependency from your pom.xml to keep your configuration clean. If not updated, GridGain will automatically switch to the new source, and leave an unnecessary dependency in configuration.

New Features

Idempotent Cluster Initialization

The cluster init CLI command now accepts two optional flags that make it safe to re-run from scripts and automation. Use --if-needed to skip initialization and exit with code 0 when the cluster is already initialized instead of failing. Add --if-nodes=<N> (which requires --if-needed) to also defer initialization until at least N nodes are visible in the physical topology.

The example below shows how you can initialise a cluster only once and only if 3 or more nodes are visible in the topology:

cluster init --name=myCluster --license=/path/to/license --if-needed --if-nodes=3

See CLI tool documentation for more information.

Data Streamer and Continuous Query Cooperation

When using the data streamer, you can now control how same-key updates within a single batch are surfaced to continuous queries. The new DataStreamerOptions.sameKeyUpdateMode option takes a DataStreamerSameKeyUpdateMode value: SQUASH (default) conflates multiple updates to the same key within a batch into a single continuous query event for better performance, while PRESERVE splits the batch so that each update produces a separate continuous query event.

var options = DataStreamerOptions.builder()
    .sameKeyUpdateMode(DataStreamerSameKeyUpdateMode.PRESERVE)
    .build();

See same-key update mode and continuous query events for more information.

Schema-Qualified Objects in SQL GRANT/REVOKE

SQL GRANT/REVOKE PRIVILEGES …​ ON <object> now accepts a schema-qualified object name. A schema-qualified name such as PUBLIC.MY_TABLE grants the privilege on that single object, while a bare name such as PUBLIC still targets the whole schema. This lets you scope object-level privileges - for example, CREATE_INDEX on a specific table - directly from SQL.

GRANT PRIVILEGES CREATE_INDEX ON PUBLIC.MY_TABLE TO role1;

See GRANT for details.

.NET Compute Executor Runtime Configuration

You can use the new ignite.compute.dotnet node configuration section to tune the .NET runtime of the compute executor (sidecar) process. You can toggle Server GC and limit the executor’s memory with an absolute or percentage-based limit.

The example below shows new configuration options:

ignite.compute.dotnet {
    serverGc = true               // enable .NET Server GC (default: true)
    gcHeapHardLimit = "512m"      // absolute GC heap hard limit; "" means no limit (default)
    gcHeapHardLimitPercent = 0    // GC heap hard limit as a percent of physical memory, 1-100; 0 means no limit (default)
}

See .NET Compute Executor for more information.

.NET Client: Cluster API

The .NET client now provides the IIgnite.Cluster API, which exposes the cluster topology. Use Cluster.GetNodesAsync() to retrieve all nodes in the logical topology, and Cluster.LocalNode to get the hosting node from inside a compute job or data streamer receiver (it returns null on the client side). The previous IIgnite.GetClusterNodesAsync() method is now deprecated in favor of Cluster.GetNodesAsync().

// From the client: list all nodes in the cluster.
IList<IClusterNode> nodes = await client.Cluster.GetNodesAsync();

// Inside a compute job: the node that runs the job.
IClusterNode? local = context.Ignite.Cluster.LocalNode;

See Cluster API for more information.

Balancing Leaseholders From CLI

You can now manually rebalance primary replica leaseholders across cluster nodes. The new distribution balance-leases CLI command forces the placement driver to redistribute leaseholders evenly - one leaseholder per replication group.

See CLI tool documentation for more information.

Improvements and Fixed Issues

Issue ID Category Description

GG-49406

Builds and Deliveries

Removed jitpack from the build dependencies.

GG-49341

Cluster Storage Engine

Fixed a node crash loop that could occur when a node restarted during snapshot creation and a partition was left with an invalid storage index.

GG-49319

General

Fixed a low-watermark leak that stalled MVCC garbage collection when an SQL cursor was left open on a read-only transaction.

GG-49316

Platforms & Clients

C++ client: fixed a number of potential deadlocks.

GG-49234

General

Added leaseholder balancing and a corresponding CLI command.

GG-49174

Cluster SQL Engine

GridGain now always uses an index scan instead of a table scan when search boundaries are specified.

GG-49158

Cluster SQL Engine

Improved index cost calculation for IN predicates in SQL queries.

GG-49153

Platforms & Clients

Fixed a NullPointerException in the .NET compute executor in non-standard deployments (fat JAR). Added the ignite.compute.dotnet.executorPath configuration property.

GG-49134

CLI Tool

Removed the "Restart the node to apply changes" message when updating node configuration via the CLI.

GG-49126

Builds and Deliveries

Updated netty-codec-http from version 4.2.12 to version 4.2.13.

GG-49039

Cluster Security

SQL GRANT/REVOKE PRIVILEGES now accepts schema-qualified object names.

GG-49033

Cluster Storage Engine

Fixed a bug that could break an index after a partition was rebalanced to another node.

GG-48933

Cluster SQL Engine

The SQL_QUERIES system view now includes information about query retries.

GG-48880

General

Added a new error code (IGN-TX-21) reported when the scope of user operations in a transaction is too large.

GG-48782

Platforms & Clients

Fixed the thin client causality token getting stuck in the past in certain scenarios, causing stale reads.

GG-48696

Cluster SQL Engine

Fixed a memory leak in QueryCancel when a query is retried multiple times.

GG-48691

Distributed Computing

Added a compute executor configuration section to adjust .NET runtime settings, such as the GC heap limit.

GG-48690

Platforms & Clients

.NET: added the IIgnite.Cluster API with LocalNode and GetNodesAsync(); deprecated IIgnite.GetClusterNodesAsync().

GG-48663

Platforms & Clients

C++ client: fixed a possible crash on client shutdown.

GG-48627

Cluster SQL Engine

Fixed the VIEW_NAME column value in the SYSTEM_VIEW_COLUMNS system view.

GG-48604

Platforms & Clients

.NET: fixed pooled buffer cleanup.

GG-48588

Cluster SQL Engine

Added the collation attribute to EXPLAIN output for the Exchange node.

GG-48549

Platforms & Clients

Added SQLRecoverableException for SQL operations.

GG-48469

General

A transaction failure reason is no longer lost on rollback due to timeout; finishReason and code are now added to cleanup messages.

GG-48459

Cluster Continuous Queries

Continuous Query: fixed event loss on node join.

GG-48346

Platforms & Clients

Corrected JDBC metadata flag values to reflect the actual behavior of the connector.

GG-48304

General

Client transaction load no longer hangs under high contention in SQL scenarios.

GG-48201

Cluster Metrics & Monitoring

Added direct buffer metrics.

GG-47788

General

Fixed a memory leak in Raft.

GG-47737

Cluster SQL Engine

Added the DEFAULT_VALUE column to the TABLE_COLUMNS system view.

GG-47636

Platforms & Clients

C++ client: fixed continuous query duplicate events when the enable_empty_batches option is enabled.

GG-46610

CLI Tool

Added the --if-needed and --if-nodes=<N> flags for cluster initialization.

GG-46148

Platforms & Clients

Added DataStreamerOptions.sameKeyUpdateMode with SQUASH (default, existing behavior) and PRESERVE modes.

Upgrade Information

You can upgrade to current GridGain version from previous releases. Below is a list of versions that are compatible with the current version. Compatibility with other versions is not guaranteed. If you are on a version that is not listed, contact GridGain for information on upgrade options.

9.1.8, 9.1.9, 9.1.10, 9.1.11, 9.1.12, 9.1.13, 9.1.14, 9.1.15, 9.1.16, 9.1.17, 9.1.18, 9.1.19, 9.1.20, 9.1.21, 9.1.22, 9.1.23

When updating from older versions, we recommend updating to version 9.1.8 first, before performing an update to current version.

Known Limitations

Rolling Upgrade Over 9.1.10

When performing a rolling upgrade from GridGain 9.1.9 or earlier, it is necessary to first upgrade to 9.1.10 before upgrading to 9.1.11 or a later version. This is caused by improvements in rolling upgrade procedure that make skipping 9.1.10 with a rolling upgrade impossible.

The upgrade to 9.1.10 must be performed for the whole cluster and committed before the next upgrade can be started.

You do not need to perform this intermediary upgrade when upgrading with downtime, as it only affects the rolling upgrade procedure.

Data Restoration After Data Rebalance

Currently, data rebalance may cause partition distribution to change and cause issues with snapshots and data recovery. In particular:

  • It is currently not possible to restore a LOCAL snapshot if data rebalance happened after snapshot creation. This will be addressed in one of the upcoming releases.

  • It is currently not possible to perform point-in-time recovery if data rebalance happened after table creation. This will be addressed in one of the upcoming releases.

SQL Performance in Complex Scenarios

There are known issues with the performance of SQL read-write transactions in complex read-write scenarios. These issues will be addressed in upcoming releases.

We Value Your Feedback

Your comments and suggestions are always welcome. You can reach us here: http://support.gridgain.com/.