GridGain Enterprise Edition 8.1.1 - Release Notes

Distributed Persistent Store

Persistent store is a distributed ACID and SQL-compliant disk store that transparently integrates with Ignite as an optional disk layer (SSD, Flash, 3D XPoint). Having the store enabled, you no longer need to keep all the data in memory or warm RAM up after the whole cluster restart. The persistent store will keep the superset of data and all the SQL indexes on disk making Ignite fully operational from disk.

Relying on this new feature and on advanced SQL capabilities which existed before, Ignite can serve as a distributed transactional SQL database, both in memory and on disk, while continuing to support all the existing use cases, including the in-memory data grid.

Data Definition Language

Data Definition Language support was just announced around a month ago with the ability to create and drop SQL indexes in runtime and now you manage your caches and SQL schema with commands like CREATE or DROP table. In general, it means that you can connect to GridGain using JDBC or ODBC driver and fully configure the cluster using those well-know DDL statements. There is no more need to deal with Spring XML, Java or .NET specific configurations options for your cluster.

Machine Learning

Machine Learning Grid becomes more powerful with an addition of distributed versions of such widely used algorithms us logistic regressions, linear regression and k-mean clustering. Furthermore, the foundation of the component which is distributed algebra has been significantly optimized and boosted to get everything from the hardware available cluster wide.


Java part of GridGain supports peer-class loading feature for a while. In short, with this feature enabled you don't have to manually deploy your Java or Scala code on each node in the cluster and re-deploy it each time it changes. The required classes will be preloaded or removed whenever is needed.

Starting with GridGain 8.1.1 this feature is no longer a privilege of Java users. Now .NET developers can benefit from the same - a .NET assembly can be automatically preloaded to an already running .NET cluster node if an implementation of a distributed computation task is missing locally. The unloading is handled for you as well.


Compute Grid support is expanded to C++ level. Now nothing can prevents you from designing and developing compute tasks using C++ language and send the tasks for the execution to a GridGain cluster - Ignite.C++ will be able to serialize, deserialize and run the computations for you.

Features and Improvements

  • [IGNITE-5267] Persistent storage migration [#IGNITE-5267]
  • [IGNITE-5077] Support service security permissions [#IGNITE-5077]
  • [IGNITE-4651] Support CREATE TABLE and DROP TABLE commands [#IGNITE-4651]
  • [IGNITE-5458] Add CacheKeyConfiguration to CacheConfiguration [#IGNITE-5458]
  • [IGNITE-5459] Deprecate IgniteConfiguration.marshaller property [#IGNITE-5459]
  • [IGNITE-5431] Better exception message when SQL cache flag doesn't match [#IGNITE-5431]
  • [IGNITE-5430] Mask cache name for CREATE TABLE operation [#IGNITE-5430]
  • [IGNITE-5420] Table key type name and value type must be unique [#IGNITE-5420]
  • [IGNITE-5414] Web Console: Model import should use unique indexes if no PK found [#IGNITE-5414]
  • [IGNITE-5397] JDBC thin driver: clear server cursor automatically when last result piece is transmitted [#IGNITE-5397]
  • [IGNITE-5392] Joining node must accept cluster status (active/inactive) [#IGNITE-5392]
  • [IGNITE-5391] CREATE INDEX and DROP INDEX operations should be allowed back on non-sql caches [#IGNITE-5391]
  • [IGNITE-5386] Inactive mode must be forced on starting up grid with persistence is enabled [#IGNITE-5386]
  • [IGNITE-5375] New PersistentStoreMetrics, MemoryMetrics interface improvements [#IGNITE-5375]
  • [IGNITE-5334] Return old schema escape behavior [#IGNITE-5334]
  • [IGNITE-5328] Support cache atomicity mode for CREATE TABLE [#IGNITE-5328]
  • [IGNITE-5327] Create predefined cache templates for CREATE TABLE command [#IGNITE-5327]
  • [IGNITE-5307] Add "schema" property to SqlFieldsQuery [#IGNITE-5307]
  • [IGNITE-5306] Make sure that SQL context is persisted along with cache configuration [#IGNITE-5306]
  • [IGNITE-5284] Split IgniteH2Indexing into multiple classes if possible [#IGNITE-5284]
  • [IGNITE-5282] Pass "keepBinary" flag to SQL processor from the outside [#IGNITE-5282]
  • [IGNITE-5281] Change "space" notion to "cacheName" [#IGNITE-5281]
  • [IGNITE-5276] JDBC: Add handler byte to protocol [#IGNITE-5276]
  • [IGNITE-5274] DLL: use schema for CREATE TABLE and DROP TABLE operations in GridQueryProcessor [#IGNITE-5274]
  • [IGNITE-5275] Create SQL listener configuration based on OdbcConfiguration [#IGNITE-5275]
  • [IGNITE-5272] Try get rid of custom discovery message for client cache start [#IGNITE-5272]
  • [IGNITE-5264] DDL operations must operate on per-schema basis [#IGNITE-5264]
  • [IGNITE-5263] ODBC: use schema notion instead of cache name [#IGNITE-5263]
  • [IGNITE-5255] JDBC Driver: support DML [#IGNITE-5255]
  • [IGNITE-5242] Disallow DROP TABLE on statically configured caches [#IGNITE-5242]
  • [IGNITE-5243] Disallow CREATE INDEX and DROP INDEX on non-sql caches [#IGNITE-5243]
  • [IGNITE-5239] Web Console: Add an option to show full stack trace on Queries screen [#IGNITE-5239]
  • [IGNITE-5235] JDBC Driver: implement prepared statement [#IGNITE-5235]
  • [IGNITE-5236] Thin JDBC Driver: implement Connection.isValid through PING message [#IGNITE-5236]
  • [IGNITE-5237] JDBC thin driver: support client info [#IGNITE-5237]
  • [IGNITE-5188] Support AFFINITY KEY keyword for CREATE TABLE command [#IGNITE-5188]
  • [IGNITE-5176] JDBC Driver: implement query execution for thin jdbc driver based on common odbc/jdbc protocol [#IGNITE-5176]
  • [IGNITE-5169] ODBC: Rework handshake to allow different handlers [#IGNITE-5169]
  • [IGNITE-5164] Rename common ODBC/JDBC classes [#IGNITE-5164]
  • [IGNITE-5163] JDBC Driver: implement handshake for thin jdbc driver based on common odbc/jdbc protocol [#IGNITE-5163]
  • [IGNITE-5162] Get rid of version-depended ODBC server code [#IGNITE-5162]
  • [IGNITE-5124] MemoryMetrics API Improvements [#IGNITE-5124]
  • [IGNITE-5054] Support SQL schema sharing between different caches [#IGNITE-5054]
  • [IGNITE-5052] Implement CREATE/DROP TABLE parsing and execution [#IGNITE-5052]
  • [IGNITE-5053] Add missing features to H2 parser for CREATE/DROP TABLE [#IGNITE-5053]
  • [IGNITE-5051] DDL: Make sure schema survives cluster restart if persistence is enabled [#IGNITE-5051]
  • [IGNITE-5029] Ignite ML next steps [#IGNITE-5029]
  • [IGNITE-5009] Backport IGNITE-4932 optimization in 2.x release [#IGNITE-5009]
  • [IGNITE-4988] Web Console: Cleanup and refactor VisorXxx tasks and DTO for ignite-2.0 [#IGNITE-4988]
  • [IGNITE-4951] Discontinue AffintiyKeyMapper interface [#IGNITE-4951]
  • [IGNITE-4922] JDBC Driver: renew thin client based solution [#IGNITE-4922]
  • [IGNITE-4893] Release Ignite JDBC driver(s) under a single JAR [#IGNITE-4893]
  • [IGNITE-4766] Relax worker thread wakeup logic in StipedExecutor [#IGNITE-4766]
  • [IGNITE-4509] SQL: query with condition on affinity columns and without joins and subqueries should go to affinity node only [#IGNITE-4509]
  • [IGNITE-4477] Fix IgniteFuture.listen() and IgniteFuture.chain() semantics [#IGNITE-4477]
  • [IGNITE-4182] Improve error output when query parsing failed [#IGNITE-4182]
  • [IGNITE-2210] Cannot query annotated methods when BinaryMarshaller is set [#IGNITE-2210]
  • [IGNITE-5364] Remove contention on DataStructure creation or removing [#IGNITE-5364]
  • [IGNITE-5324] Move volatile data structures into a separate cache [#IGNITE-5324]
  • [IGNITE-5322] Improve WAL record/iterator structure [#IGNITE-5322]
  • [IGNITE-5079] Improve debug logging for binary metadata exchange [#IGNITE-5079]


  • [IGNITE-5526] Dynamic cache stop/start from non-affinity coordinator node hangs with AssertionError [#IGNITE-5526]
  • [IGNITE-5525] C++ ODBC example fails [#IGNITE-5525]
  • [IGNITE-5524] Incorrect deserialization of IgniteComputeImpl when executor name is null [#IGNITE-5524]
  • [IGNITE-5523] GridCachePreloader.onInitialExchangeComplete() is not called in certain cases [#IGNITE-5523]
  • [IGNITE-5519] AssertionError in GridDhtPartitionTopologyImpl.nodes0 [#IGNITE-5519]
  • [IGNITE-5517] Failures in IgniteActiveOnStartNodeJoinValidationSelfTest [#IGNITE-5517]
  • [IGNITE-5516] NPE in GridDhtPartitionTopologyImpl.localNode [#IGNITE-5516]
  • [IGNITE-5514] IgnitePdsCacheRebalancingAbstractTest hangs [#IGNITE-5514]
  • [IGNITE-5513] WalRecoveryTxLogicalRecordsTest is broken, probably due to "inactive" cluster state [#IGNITE-5513]
  • [IGNITE-5511] AssertionError: Handler for class already registered [#IGNITE-5511]
  • [IGNITE-5503] Affinity information for cache is not cleared after cache destroy [#IGNITE-5503]
  • [IGNITE-5501] IgniteCachePartitionMapUpdateTest hangs [#IGNITE-5501]
  • [IGNITE-5493] Assertion in GridDhtPartitionMap.writeExternal [#IGNITE-5493]
  • [IGNITE-5492] Local cache metrics is broken [#IGNITE-5492]
  • [IGNITE-5486] ExampleNodeStartup fails with NPe [#IGNITE-5486]
  • [IGNITE-5485] CacheHibernateStoreExample fails with NPE [#IGNITE-5485]
  • [IGNITE-5484] DataStructuresCacheKey and DataStructureInfoKey should have GridCacheInternal marker [#IGNITE-5484]
  • [IGNITE-5447] Web Console: Deployment ID may be not unique for cache [#IGNITE-5447]
  • [IGNITE-5434] Yardstick sql benchmarks broken on Ignite-5267 branch [#IGNITE-5434]
  • [IGNITE-5402] Errors related to multi-version support [#IGNITE-5402]
  • [IGNITE-5335] Wrong value read by SQL query for field containing negative decimal [#IGNITE-5335]
  • [IGNITE-5301] JVM crashes on H2TreeIndex destroy [#IGNITE-5301]
  • [IGNITE-5291] SQL: plans cache does not clear on cache stop [#IGNITE-5291]
  • [IGNITE-5287] SQL: CacheConfiguration.sqlEscapeAll must affect only predefined objects [#IGNITE-5287]
  • [IGNITE-5245] MIN function returns NULL if a numeric column of class has NULL values [#IGNITE-5245]
  • [IGNITE-5203] JDBC driver should support BLOB fields [#IGNITE-5203]
  • [IGNITE-5193] Hadoop: Ignite node fails to start if some , but not all HADOOP_XXX_HOME variables are set [#IGNITE-5193]
  • [IGNITE-5116] Handle cache destroy in DmlStatementsProcessor [#IGNITE-5116]
  • [IGNITE-5044] JVM crash [#IGNITE-5044]
  • [IGNITE-4763] doSetRollbackOnly method to be implemented in SpringTransactionManager [#IGNITE-4763]
  • [IGNITE-4724] AVG function always returns double type instead of the argument type [#IGNITE-4724]
  • [IGNITE-3840] Continue investigation: High memory utilization when OFFHEAP_TIERED mode and expiry policy are enabled [#IGNITE-3840]
  • [IGNITE-2104] Marshalling fails with Binary marshaller if class hierarchy contains duplicate field names [#IGNITE-2104]
  • [IGNITE-1925] Test HadoopSkipListSelfTest.testLevel flakily fails [#IGNITE-1925]
  • [IGNITE-1403] forOldest() cluster group returns predicate that is not updated when topology changes [#IGNITE-1403]

.NET: Features and Improvements

.NET: Fixed

  • [IGNITE-5393] .NET: NuGet suite fails on TC [#IGNITE-5393]
  • [IGNITE-5358] .NET: Nullable enum field in binary object causes type cast exception [#IGNITE-5358]
  • [IGNITE-5356] .NET: Peer deployment does not load runtime dependencies [#IGNITE-5356]
  • [IGNITE-5354] .NET: ConfigSectionName can not be overridden from command line [#IGNITE-5354]
  • [IGNITE-5338] .NET: TestMultipleAssembliesIndirectDependencyMultiLevel fails on TC [#IGNITE-5338]
  • [IGNITE-5213] .NET: Reflective serializer fails on custom dictionaries [#IGNITE-5213]
  • [IGNITE-5207] .NET: Non-Int32 enums can't be serialized [#IGNITE-5207]
  • [IGNITE-5194] .NET: TryGetIgnite does not work with AutoGenerateIgniteInstanceName [#IGNITE-5194]
  • [IGNITE-5172] .NET: Dynamic type registration uses assembly-qualified type name [#IGNITE-5172]

C++: Features and Improvements

  • [IGNITE-5160] CPP: Continuous Queries example has to demonstrate the filter usage [#IGNITE-5160]
  • [IGNITE-5154] CPP: Add remote filter to continuous queries C++ example [#IGNITE-5154]
  • [IGNITE-4597] CPP: Add mechanism to reset arguments for sql queries [#IGNITE-4597]
  • [IGNITE-3355] CPP: Implement Compute::Call() for Ignite C++ [#IGNITE-3355]
  • [IGNITE-3574] CPP: Implement compute API [#IGNITE-3574]
  • [IGNITE-1439] CPP: Implement futures [#IGNITE-1439]

C++: Fixed