Apache Ignite Release Notes
===========================


Apache Ignite In-Memory Computing Platform 2.9.1
-----------------------------------------------------------

Ignite Core:
* Added support to graceful shutdown for ZookeeperDiscoverySpi
* Added System view for binary metadata
* Added System view for metastorage items
* Added RebalancingPartitionsTotal metrics
* Improved checkpoint concurrent behaviour
* Fixed critical system error when unregister a JMX bean
* Fixed IgniteCache#isClosed() returns false on server node even if the cache had been closed before
* Fixed inability to eagerly remove expired cache entries
* Fixed partial index rebuild issue in case indexed cache contains different datatypes
* Fixed local metastorage system view error if unmarshallable values present
* Fixed deadlock between grid-timeout-worker and a thread opening a communication connection
* Fixed deadlock in IgniteServiceProcessor
* Fixed issue when rebalance future might hang in no final state though all partitions are owned
* Fixed issue when scan query fails with an assertion error: Unexpected row key
* Fixed issue with archiving and enabled wal compaction setting on server restart
* Fixed NPE during Cassandra Store initialization with PRIMITIVE strategy
* Fixed synchronization problems when different classloaders are used for deployment of same class
* Fixed exception on SQL caches when client reconnect
* Fixed deadlock on multiple cache delete
* Fixed NPE in IgniteServiceProcessor when destroying a cache
* Fixed issue when DurableBackgroundTask can abandon incomplete task
* Fixed issue related to cache interceptor deserialization on client nodes
* Fixed issue when control.sh doesn't start if JMX port was set
* Fixed issue when ZookeeperDiscoverySpiMBeanImpl#getCoordinator can return invalid node as coordinator
* Fixed issue when valid blocking section in GridNioWorker and GridNioClientWorker leads to false positive blocking thread detection
* Fixed several logging issues
* Fixed issue when exchange worker, waiting for new task from queue, considered as blocked
* Fixed incorrect topology snapshot logger output about coordinator change
* Fixed slowdown during node initialization
* Fixed incorrect usage of Class.isAssignableFrom in SystemViewLocal and SystemViewMBean classes
* Fixed several concurrent metrics issues
* Fixed issue related to incorrect work of predicates (< and >) in where clause with compound primary key
* Removed unnecessary dependency to curator-client from and improved ZookeeperDiscoverySpi
* Removed unnecessary failure trace in IgnitionEx

Java thin-client:
* Fixed issue when thin client connect/disconnect during topology update may lead to partition divergence in ignite-sys-cache
* Fixed issue when thin client silently closes channel after inactivity
* Fixed unsupported protocol version exception when getting cache configuration from Java thin client

JDBC:
* Fixed thin driver reports incorrect property names
* Updated JDBC metadata to match actual capabilities

Ignite .NET:
* Improved slow Enum serialization
* Fixed issue when deserializing IBinaryObject containing an IBinaryObject field fails
* Fixed issue TransactionImpl finalizer can crash the process
* Fixed child processes become zombies when persistence is used with direct-io on Linux

Ignite C++:
* Added Windows support to CMake build system
* Fixed issue when odbc-example loses values if run with 1 additional node


Apache Ignite In-Memory Computing Platform 2.9
-----------------------------------------------------------

Ignite Core:
* Added the feature of cluster snapshots for persistence caches
* Added tracing of transactions, discovery, exchange, and communication components
* Added new cluster-wide state: read-only. In this state caches available for cache read operations. Cache operations with data modification (update, remove, clear, create, destroy and etc.) don't allowed
* Added TDE master key rotation feature
* Added functionality to run user-defined code inside a sandbox
* Added Cluster ID and tag properties to identify the cluster
* Added support for one-way thick-client to server connections
* Added the ability to not open server sockets (for incoming connections) by thick client
* Added management API to cancel user-provided tasks and queries
* Added partition states system view and free-lists system view
* Added txKeyCollisions cache metric
* Added OffHeapEntriesCount, OffHeapBackupEntriesCount, OffHeapPrimaryEntriesCount, HeapEntriesCount, CacheSize to cache metrics
* Added query pool starvation monitoring
* Added the ability to put non-primitive data types via HTTP-REST
* Added the ability to use CACHE_CREATE and CACHE_DESTROY permissions on per-cache level
* Added the ability to restrict access to the internal package of Ignite
* Added nodes caching in cluster groups
* Added warning of deadlock when an unordered collection is passed to putAll-style bulk cache operation
* Added the ability to set user attributes for thin clients connections
* Added a new public API for the cluster state change (activation/deactivation and etc.)
* Added EVT_BASELINE_..., EVT_CLUSTER_STATE_CHANGE_STARTED, EVT_PAGE_REPLACEMENT_STARTED events
* Added the ability to hide sensitive data in logs, exceptions, and utilities output (IGNITE_TO_STRING_INCLUDE_SENSITIVE system property)
* Added the ability to change long-running operation timeout in run-time
* Added dedicated thread pool for creating and rebuilding indexes
* Added possibility to pass client SSL certificate to security plugin (for clients: JDBC thin, thin-client, grid-client, REST)
* Added Apache Ignite Slim binary distribution with essential modules only
* Added the ability to set fetch size for JDBC cache store
* Added "features" to thin client protocol
* Added support for node discovery using AWS ALB
* Updated Bouncy Castle dependency for AWS module to 1.60 version
* Fixed security context propagation for remote filters and listeners (for ContinuousQueries, IgniteMessaging, IgniteEvents)
* Fixed ConcurrentModificationException when DEBUG logging continuous queries
* Fixed critical errors handling by thin-client server-side threads
* Fixed memory leaks in continuous query handlers
* Fixed data streamer pool MXBean (from ThreadPoolMXBean to StripedExecutorMXBean)
* Fixed memory leaks in MVCC processor
* Fixed deadlock on concurrent removeAll() on the same cache
* Fixed sensitive user data leak in a diagnostic exchange log message
* Fixed checkpoint block for all duration of index deletion
* Fixed WAL flush issue in LOG-ONLY/FSYNC modes and null flush pointer
* Fixed limiter for a dump of long-running transactions
* Fixed thread group for Ignite threads (do not use dedicated thread group anymore)
* Fixed exception during creating string representation of the binary object
* Fixed potential partition map exchange hanging on Zookeeper discovery clusters
* Fixed NPE in checkpoint thread
* Fixed fail of optimistic serializable transactions when read-through is enabled
* Fixed node startup after upgrade in case of using Local cache with persistence enabled
* Fixed awaiting for service deployment in the event-driven service processor
* Fixed incorrect collecting cache configuration on the coordinator
* Fixed node failure when DistributedProcess unable to send a single message to the coordinator
* Fixed binary metadata folder, now it's moved to PDS storage folder
* Fixed EVT_CACHE_STOPPED event local listener issue
* Fixed processing of failure detection timeout in TcpDiscoverySpi. If a node fails to send a message or ping, now it drops the current connection strictly within this timeout and begins establishing a new connection much faster
* Fixed WAL FSYNC mode problem with a disabled archiver
* Fixed the ability to set number of WAL segments to less than 2
* Fixed race condition in the state processor.
* Fixed deadlock between topology update and CQ registration
* Fixed potential NullPointerException on cache operations after client reconnect
* Fixed class loading exception when package name starts from 'class'
* Fixed ClassCastException in cache group metrics on client nodes
* Fixed registration of capturingClass in marshaller making lambdas fragile on code update.
* Fixed NPE, when IgniteLock removed before it's used
* Fixed processing of connection recovery timeout in TcpDiscoverySpi. If a node loses connection, now it strictly obtains a new connection to the ring of gets segmented within this timeout.
* Fixed p2p deployment of scan queries transformer class
* Fixed exception on initialization in push metrics exporters
* Fixed AssertionError on getting cache size from the MBean on the inactive cluster
* Fixed JVM option in .sh/.bat scripts to support CPU load metric on java 11 and higher
* Fixed broken redis mget command
* Improved transaction recovery mechanism on topology change
* Improved checkpoint logic to write checkpoint buffer pages first to avoid throttling
* Improved node recovery time by executing partition state restore phase in parallel
* Improved node start-up and periodic metrics logging.
* Improved rebalancing scheduling (SYNC caches rebalance first)
* Improved node host resolving (don't try to resolve hostnames when localHost is set as IP)
* Improved data loss handling
* A lot of stability and performance fixes
* Replaced ignite.sh invocation with the direct JVM call for Docker deployment
* Discontinued IGFS and Hadoop Accelerator components

SQL:
* Added the ability to create tables for existing caches
* Added metrics: sql.parser.cache.hits - count of hits for queries cache, sql.parser.cache.misses - count of misses for queries cache
* Added metrics to count the number of successful and failed SQL queries
* Added validation of the uniqueness of a field's name annotated with @QuerySqlEntity. Previously cache could be started without errors, but the key's field would not be queryable
* Added an option to validate field types against SQL schema on key-value insert
* Added separate SQL configuration
* Fixed SQL schema name validation (prohibit empty schema names)
* Fixed duplicate definition of a column by "create table"
* Fixed SQL wildcard to java regex translation
* Fixed custom GROUP_CONCAT separator support
* Fixed data race when getting index rebuild status
* Fixed incorrect "not null" constraint check on key field
* Fixed an issue when a node stops if an index is created on a field with invalid data type
* Fixed QuerySqlField annotation's "name" property validation
* Fixed improper index usage, fields enumeration not used with pk index creation
* Fixed an issue when the primary key was created with invalid fields order
* Improved row count statistic calculation (index scan replaced with cache.localSize)
* Improved indexing of JavaObject. Only hash bytes are stored now, which reduces the size of the index and reduces the time for objects comparison.

Ignite .Net:
* Added IgniteLock
* Added ICache.EnableStatistics, ICluster.EnableStatistics
* Added native platform cache
* Added the ability to use platform cache to execute local ScanQuery with partition
* Added the ability to call .NET services from Java
* Added the ability to get metadata for FieldsQueryCursor
* Added partition-based AffinityCall and AffinityRun overloads, fixed existing AffinityCall and AffinityRun to reserve partition
* Added the ability to use SqlFieldsQuery as ContinuousQuery.InitialQuery
* Fixed query cursor thread safety
* Fixed issue with starting Ignite under Mono on Linux
* Fixed searching of service method with user type array parameter
* Fixed OutOfMemory exception when calling grid service from .NET with user type array parameter
* Fixed TransactionScope behavior with read-only cache operations
* Fixed stale local node info after client reconnect

Ignite C++:
* Added CMake build support
* Fixed compilation error for boost versions greater than 1.70
* Removed autotools build support

JDBC:
* Added connections failover support
* Added support for 'connectionTimeout' and 'queryTimout' properties
* Added SSL CipherSuites support
* Added support for individual reconnect in case of best effort affinity mode
* Added the ability to control affinity cache size
* Added support of custom user's java object
* Fixed an issue where a metadata request through a JDBC Connection could fail if metadata is requested for cache without explicit query entity configured

Java thin-client:
* Added cluster API support
* Added cluster group API support
* Added compute support
* Added Ignite services support
* Fixed size overhead after unmarshalling Collections/Arrays of objects
* Fixed binary type schema registration for nested objects when CompactFooter is enabled
* Fixed transactions withLabel issue
* Fixed binary type issue when more than one schema for one type is used

.Net thin client:
* Added cluster API support
* Added cluster group API support
* Added compute support
* Added automatic server node discovery

Python thin-client:
* Added the ability to specify keyfile password
* Fixed wrong fields order in queries when fields count > 10

Control utility:
* Added commands to manage cluster binary metadata to control.sh command-line utility
* Added commands to view and change Cluster Id and Tag
* Added "--force" flag for "deactivate" and "set-state" commands
* Added "--check-crc" flag for "validate_indexes" command
* Added "--verbose " option to print stack trace errors
* Added "--check-sizes" option for "validate_indexes" to check whether index and cache size are equal
* Added "--cache check_index_inline_sizes" command to check that indexes inline size the same on all cluster nodes
* Fixed double password requests for keystore and truststore
* Fixed corrupted indexes detection
* Fixed GridClient instances leakage after various errors
* Fixed return code swallowing by control.sh bash script

Spring Data integration:
* Added multiple Ignite instances on same JVM support (@RepositoryConfig)
* Added query tuning parameters in @Query annotation support
* Added projections support
* Added Page and Stream responses support
* Added SQL Fields Query resultset transformation into the domain entity support
* Added named parameters (:myParam) in SQL queries support (declared using @Param("myParam"))
* Added advanced parameter binding and SpEL expressions in SQL queries support
* Added SpEL expressions in Text queries (TextQuery) support
* Fixed incorrect processing of non-comparable keys in spring-data for repository methods: findAllById(ids) and deleteAllById(ids).
* Fixed cursors leakage in RunningQueryManager when executing queries via spring-data repositories.

ML:
* Added more distances between two Vectors

Web Console:
* Moved to separate repository


Apache Ignite In-Memory Computing Platform 2.8.1
-----------------------------------------------------------

Security:
* Fixed vulnerability of using H2 admin rights for user SQL connections

Ignite Core:
* Added cluster achieving fully rebalanced (PME-free ready) state metric
* Added compute job system view
* Added support long keys in DistributedMetaStorage
* Added transaction operations metrics
* Fixed ClassCastException in Thin Client
* Fixed IllegalArgumentException on activation of LogExporterSpi
* Fixed JDBC thin client SELECT hanging under 2.8.0
* Fixed Java thin client: Wrong typeId generation for system types
* Fixed MERGE INTO query failing on Ignite client node
* Fixed MetricRegistryMBean and OpenCensusExporterSpi memory leak
* Fixed MetricRegistryMBean nit showing histogram values when histogram name contains underscore
* Fixed MetricRegistryMBean thread safety
* Fixed NullPointerException while initializing Cassandra Store
* Fixed NullPointerException thrown by ExchangeLatchManager during cache creation
* Fixed SQL: H2Connection leaking on INSERT
* Fixed SQL: KILL QUERY command hanging on query when query cursor is held by user or leak
* Fixed SQL: Potential race on MapResult close
* Fixed SQL: Query reduce can failing with NPE on retry
* Fixed SQL: Local queries cursors must be closed or full read to unlock the GridH2Table
* Fixed TcpCommunicationSpi metrics implementation
* Fixed Thin client thread not stopping
* Fixed affinity cache for version of last server event being wiped from history
* Fixed all binary types being registered twice
* Fixed empty cluster failing if wal segment size small
* Fixed cache stopping on supplier during rebalance causing NPE and supplying failure
* Fixed not being able to set serialized enum to a BinaryObject's field
* Fixed cluster failing to find the node by consistent ID
* Fixed cluster restart leading to cluster activation error
* Fixed continuously generating thread dumps in failure processor slowing down the whole system
* Fixed destroy of big cache which is not only cache in cache group causing IgniteOOME
* Fixed dynamic SQL index recreation after cache clear resulting in AssertionError or JVM crash
* Fixed contention on ConcurrentHashMap.size()
* Fixed consistency issues for atomic and mixed tx-atomic cache groups
* Fixed getting SecurityContext from GridSecurityProcessor
* Fixed h2Tree going into illegal state when non-indexed columns are dropped
* Fixed historical (WAL) rebalance starting on cleared partition if some baseline node leaves the cluster and then rejoins
* Fixed igniteQueue.removeAll throwing NPE
* Fixed ignitevisorcmd not connecting to cluster
* Fixed inconsistency between cache data and indexes when cache operation is interrupted
* Fixed incorrect rewriting of wal record type in marshalled mode during iteration
* Fixed intermittent [Failed to notify direct custom event listener] exception on node shutdown
* Fixed dynamically setting used cache for Spring Data
* Fixed logging exceptions inside IgniteSecurityProcessor#withContext(java.util.UUID)
* Fixed long exchange on deactivation process
* Fixed memory leak on unstable topology caused by partition reservation
* Fixed metric exporter implementation issue leading to NullPointerException from gauge which invokes communication
* Fixed node failing after get operation when entries from the cache expired concurrently
* Fixed node failing after putting incorrect key class for indexed type to transactional cache
* Fixed node leaving causing NullPointerException during IO message processing if security is enabled
* Fixed node stopping on type mismatch error between index type and type of value from searched row
* Fixed non-comparable keys for eviction policy causing failure handle and node shutdown
* Fixed pages leak suspicion in PDS
* Fixed partition desync if a partition is evicted then owned again and historically rebalanced
* Fixed possible extra page release when throttling and checkpoint thread store it concurrently
* Fixed possible tx desync during recovery on near node left
* Fixed partitions owned by other nodes switching their state to MOVING due to counter difference on node join
* Fixed Spring Data query annotations not working if statement keywords are in lower case
* Fixed remote thin client operations not being authorized correctly
* Fixed scan query shutting down the node in some cases
* Fixed scan query/iterator on a replicated cache getting wrong results
* Fixed searching checkpoint record in WAL not working with segment compaction
* Fixed some of rentingFutures in GridDhtPartitionTopologyImpl accumulating a huge number of eviction callbacks
* Fixed cache#putAllAsync method not collecting statistics
* Fixed thin JDBC streaming failing with BatchUpdateException if function is used
* Fixed page difference output throttling in PageMemoryTracker
* Fixed transaction hanging after too many open files NIO exception
* Fixed update of partition states becoming stuck when rebalance completed during exchange
* Fixed zookeeper discovery not working due to missed dependency

Ignite .Net:
* Fixed services failing to call method with DateTime or Guid argument
* Fixed NullReferenceException when serializing fields of the same type in different order


Apache Ignite In-Memory Database and Caching Platform 2.8
---------------------------------------------------------

Ignite Experimental API:
* Added monitoring API - an exporter of Ignite metrics to external recipients
* Extended IgniteCache API with withReadRepair to perform backup nodes consistency check on each cache get attempt
* Marked MVCC feature (added by 2.7.0 RELEASE)


Ignite Monitoring:
* Added support of exposing objects as system views (SQL, JMX exporters supported "out of the box")
* Added support of storing and updating metrics (JMX, SQL, Log, OpenCensus exporters supported "out of the box")
* Added SQL query system view
* Added client connections (JDBC, ODBC, Thin) system view
* Added cluster nodes system view
* Added columns system view
* Added continuous query system view
* Added free-lists system view
* Added indexes system view
* Added metrics for PME timings
* Added metrics for transaction duration
* Added metrics to measure cache API performance
* Added metrics to show index building in progress
* Added scan query system view
* Added schemas system view
* Added striped thread pool queue system view
* Added support of metrics configuration via JMX
* Added tables system view
* Added total time threads parked if checkpoint throttling occurred
* Added transactions system view
* Moved CacheGroupMetrics to the new framework
* Moved ClusterMetricsMxBean to the new framework
* Moved Communication metrics to the new framework
* Moved GridJobMetricsProcessor to the new framework
* Moved GridLocalMetrics to the new framework
* Moved IgniteMXBean to the new framework
* Moved QueryMetrics to the new framework
* Moved TransactionMetricsMxBean to the new framework


Ignite Core:
* Added @IgniteExperimental annotation to notify users about early access API available
* Added IGNITE_CONSISTENT_ID system property
* Added IGNITE_DISCOVERY_DISABLE_CACHE_METRICS_UPDATE system property
* Added IGNITE_YARN_QUEUE property to override YARN queue name
* Added JMX ability to exclude node from topology
* Added JMX metrics for partition map exchange timings
* Added SSL support for ZookeeperSpi
* Added Spark SQL Table Schema Specification
* Added WAL page snapshot records compression
* Added ability to override all caches 'rebalanceThrottle' option via JVM node option
* Added ability to set default parallelism of rebuild indexes in configuration
* Added ability to track system/user time held in the transaction
* Added binary mode (withKeepBinary) to Data Structures Queue
* Added a withReadRepair for IgniteCache to perform backup nodes consistency check on each cache get attempt
* Added cache validation logic on primary node instead of near node
* Added cluster activation/deactivation events
* Added configuration for explicit plugins providing (via spring configuration)
* Added disk page compression support
* Added extra logging for client-server connections in TcpDiscoverySpi implementations
* Added information about possible long GC pause to checkpoint started message
* Added initial support of Spark 2.4 (new internal changes since Spark 2.3)
* Added parallel write&evict same key in CacheWriteBehindStore
* Added possibility to have different rebalance thread pool size for nodes in the cluster
* Added support TcpCommunicationSpi of TLSv1.3
* Added support TcpDiscoveryS3IpFinder client-side encryption
* Added support UriDeploymentSpi for JAR files
* Added support array as key for the cache
* Added support discovery messages for service deployment
* Added support for baseline auto-adjustment
* Added support for Kubernetes discovery for non-ready pods
* Added support for spring data update/delete operations
* Added support logical recovery phase outside of PME
* Added support best effort affinity for thin clients (partition awareness)
* Added support node discovery through AWS ELB
* Added transaction label to transaction cache events (e.g. EVT_TX_STARTED, EVT_TX_COMMITTED)
* Added transactions support to thin clients
* Added 'limit' as a parameter for TextQuery constructor and builder
* Added ignite-spring-data_2.2 module to be used with Spring Framework 5.2.x and Spring Data 2.2.x
* Added integration with hibernate 5.3
* Added support for non-blocking PME on node left
* Added support for IgniteSpark skipStore option for internal dataStreamer (IgniteRdd and Ignite DataFrame)
* Avoid synchronous initialization of storage managers during PME
* Fixed B+Tree corruption caused by byte array values
* Fixed ComputeJob cancel method executes with the wrong SecurityContext
* Fixed IGNITE_ENABLE_FORCIBLE_NODE_KILL system property behaviour
* Fixed IO race during read\write cache configurations
* Fixed Ignite Queue hanging after several read/write operations
* Fixed IgniteCache replace method does not work in a binary mode without classes
* Fixed P2P for remote filter and filter factory
* Fixed RobinHoodBackwardShiftHashMap on big-endian architectures
* Fixed ScanQuery doesn't take lost partitions into account
* Fixed Spark DataFrame will get the wrong schema if a user executes add/drop column DDL
* Fixed TTL manager may not clear entries from the underlying CacheDataStore
* Fixed TcpDiscovery lock on SSLSocket close
* Fixed WebSessionFilter does not work with jetty 9.4 anymore
* Fixed a new exchange coordinator skips client fast reply for a previous exchange
* Fixed activate\deactivate hanging
* Fixed affinity calculation and fetching on client nodes
* Fixed binary metadata is not registered during the start of the cache
* Fixed blinking baseline node sometimes unable to connect to a cluster
* Fixed cache start while the cache is restarting with the same name
* Fixed checkpoint temp files don't removed on a node start
* Fixed client does not survive after several cluster restarts for ZookeeperDiscoverySpi
* Fixed cluster hanging on cache invoke with binary objects creation
* Fixed compatibility issue with JDBC drivers of older versions
* Fixed continuous query handlers are not called on backups when a one-phase commit is used
* Fixed data corruption when an exception occurred during tx commit without node stopping
* Fixed data loss during starting of the nodes with empty persistence data storage
* Fixed deadlock between restore partition states and checkpoint begin phase
* Fixed deadlock on client node in case of network problems or long GC pauses
* Fixed detection of corrupted index storage on a file system
* Fixed dynamic columns and indexes can be lost after the cluster restart
* Fixed exchange hanging while new node restoring state from disk and starting caches
* Fixed exchange on node left hanging when a cluster is in the transition state
* Fixed index usage is not applicable for mixed IN and EQUALS queries
* Fixed node hanging on join to topology
* Fixed node hanging with TcpDiscoveryS3IpFinder while stopping
* Fixed p2p incorrectly loaded classes of remote query filter
* Fixed partition hanging in MOVING state after node joined and rebalanced
* Fixed partition may restore wrong MOVING state during crash recovery
* Fixed possible exceptions during simultaneous cache group stop and partition eviction
* Fixed race between rollback exception and timeout exception on changing transaction state
* Fixed segmenting node can cause ring topology broke
* Fixed stopping caches concurrently with node join may lead to a crash of the node
* Fixed transaction commit exception about missing binary schema on large clusters
* Fixed transaction prepare-commit ordering in one-phase commit scenario
* Fixed transactions that potentially may cause hanging in COMMITING state and partitions desync
* Fixed validation of joining nodes for Zookeeper
* Fixed when collocated IgniteSet close is not working on non-affinity node
* Forbidding joining persistence node to an in-memory cluster
* IGNITE_DISABLE_WAL_DURING_REBALANCING turned on by default
* Improved CRC32 calculation algorithms for internal usages
* Improved LRT diagnostic messages
* Improved PME speed during full partition map generation (parallel execution)
* Improved PME speed during full partition map updating (parallel execution)
* Improved PME speed for starting multiple caches on joining node
* Improved large clusters discovery meta exchange (by add compression on Discovery data bag)
* Improved logging for the index rebuild procedure
* Improved read of hot variables in WAL
* Improved speed of WAL segment archiving
* Improved speed of checkpoint finalization on binary memory recovery
* Optimize GC pressure on rebalance procedure
* Optimize HistoryAffinityAssignment heap usage
* Performance improvements for affinity initialization for started cache groups
* Removed IGNITE_SERVICES_COMPATIBILITY_MODE system property
* Removed Java 7 and AI 1.x leftovers from IgniteSystemProperties & IgniteProductVersion
* Replaced IGNITE_BINARY_META_UPDATE_TIMEOUT with IGNITE_WAIT_SCHEMA_UPDATE
* Massive performance and stability improvements


SQL:
* Added Decimal precision and scale constraint
* Added KILL QUERY command
* Added a table row count statistics for the local queries
* Added a view with the list of existing SCHEMAS
* Added a view with the list of existing tables
* Added ability to specify query parallelism in CREATE TABLE's WITH "" clause
* Added automatic pages history dump on CorruptedTreeException
* Added cluster-wide unique identifier for running queries
* Added counter left partition for index rebuild to cache group metrics
* Added default query timeout
* Added drop _VER field support
* Added extract partition info from BETWEEN and range conditions for integer types
* Added extract partition info from JOINs
* Added lazy execution for the local queries
* Added query history statistics API
* Added support for data page scan on ScanQuery, SqlQuery and SqlFieldsQuery
* Added support of allocating memory for a data region when the first cache assigned to this region is created
* Added support of autoclose iterator for query cursor when all data has been read
* Added support of trivial IN-operation for partition extraction
* Added tracking all running queries on initial query node
* Added validation for PK index does not use wrapped object
* Added warning about long query execution printed by timeout (instead of on query finished)
* Disabled implicit distributed joins when queryParallelizm > 1
* Do not store default precision and scale in the QueryEntity for CHAR/VARCHAR and DECIMAL types
* Fixed DDL operations don't work on not started caches on non-affinity nodes
* Fixed IF NOT EXISTS in CREATE TABLE doesn't work
* Fixed SQL event is not fired when a query is reduced to local form
* Fixed SQL query when the value has SQL field which name equals to affinity key name
* Fixed cache destroy operation which has created via SQL
* Fixed creating table with DateTime for PK on a server node
* Fixed error parsing INLINE_SIZE if CREATE INDEX is one of the multiple statements
* Fixed exception after change column type (drop, add)
* Fixed partition pruning is integrated with DML
* Fixed security checks are skipped on some SELECT paths
* Fixed subjectId is lost for SqlFieldsQuery event on the local node
* Fixed when same SQL requests with multiple statements produce a different result
* Fixed when unable to find row by an index created on partial baseline topology
* Forbid mixing _key and key columns in the DML queries
* Move rebalance configuration properties to the IgniteConfiguration level
* Optimize query execution if it targets only one or none partitions
* Reduce excessive int boxing when accessing cache by ID
* Remove scan index for merge table
* Renamed IGNITE schema to SYS


MVCC:
* Added continuous query failover for mvcc-caches
* Added deadlock detector
* Added late affinity assignment support
* Added mvcc-compatible cache peek operation for key-value API
* Fixed JVM crash when node stopped with errors
* Fixed SQL API methods should throw proper TransactionExceptions in case of tx failure
* Fixed client operation hangs if all data nodes left the cluster
* Fixed client reconnect became unstable after mvcc coordinator reassign
* Fixed concurrent cache stop can cause vacuum failure
* Fixed failure to perform non-MVCC SQL from transactions
* Fixed implicit mvcc transaction could use completed one instead of starting new
* Fixed incorrect data region metrics
* Fixed incorrect exception is thrown if no data nodes found for a partition
* Fixed missing EntryProcessor resource injection
* Fixed mvcc history can be missed during remove operation
* Fixed mvcc-cache rebalance procedure leads to data loss
* Fixed query trackers are not released
* Fixed query with specified explicit partitions
* Fixed race on invokeAll operations
* Fixed read transactions remap when coordinator fails
* Fixed removeAll on unstable topology
* Fixed transaction asynchronous rollback
* Fixed update operation hanging on backup on unstable topology
* Fixed vacuums do not clean up all outdated versions


JDBC:
* Added cache expiry policies
* Added support JDBC thin driver: connection timeout
* Added support data page scan for JDBC
* Added support of handling multiple async requests in parallel
* Added support query cancel
* Added support query timeout
* Fixed JDBC getPrimaryKeys returns wrong value for COLUMN_NAME
* Fixed JDBC thin driver metadata misses caches with queryEntities and names containing underscores
* Fixed STREAMING mode fails on streamer reopen on not ordered mode
* Fixed memory leak caused by executing a JDBC prepared statement
* Fixed sqline command !tables works incorrectly for a client node
* Fixed suspended optimistic transaction automatically resumes to last thread after a timeout
* Now driver starts with a random server to connect
* Updated handshake protocol so that the node returns its UUID


ODBC:
* Fixed SQLColumns does not work for tables with escape sequences in name
* Fixed backward compatibility between 2.5 and 2.7


Web Agent:
* Added support for the cluster-ID
* Added support of two way SSL authentication in Web Console agent
* Fixed flag --disable-demo doesn't work
* Fixed hostname verifier must be disabled if "-Dtrust.all=true".
* Improve information message in case REST command failed on cluster
* Improve logging when cluster topology changed


Web Console:
* Added TypeScript support
* Added ability to cancel queries
* Added ability to configure disk page compression properties
* Added check for supported MongoDb version before WC start
* Added email confirmation
* Added management events (EVT_MANAGEMENT_TASK_STARTED)
* Added missed configurations for some of the properties from IgniteConfiguration
* Added option to disable self-registration on Web Console
* Added possibility to configure distributed MVCC
* Added support for "date", "time" and "date-and-time" on InputDialog
* Added support for "type=number" on InputDialog
* Added support for new countries Taiwan, Hong Kong, Singapore
* Fixed can't select cluster memory eviction mode
* Fixed long-running SQL queries could be randomly cancelled from WC
* Fixed memory leak in chart component
* Fixed priority for field validations
* Fixed validation in Firefox
* Update styles of top menu items
* Update to RxJS 6


Node.js:
* Fixed Node.js thin client UUID marshalling


Ignite .NET:
* Added Thin Client Partition Awareness
* Added Thin Client Expiry Policy
* Added Thin Client Cluster API
* Added .NET Core 3.x support
* Added Ignite.NET Dockerfile
* Added Runnable .NET Core assembly
* Added ICache.GetLongSize
* Added IClusterNode.Version
* Added ICompute.WithExecutor
* Added IIgnite.GetVersion
* Added IBinaryObjectBuilder.SetField(name, val, type) overload
* Added Partition Preload API (PreloadPartition, PreloadPartitionAsync)
* Fixed JVM thread leak
* Fixed serialization performance for ISerializable


Ignite C++:
* Added BinaryType methods implementations (GetTypeId, GetFieldId)
* Fixed compilation ODBC and thin client with OpenSSL 1.1
* Fixed compilation on ubuntu 18.04
* Implement atomic part of Cache API for C++ thin client (ReplaceIfEquals, RemoveIfEquals etc.)
* Improve Best Effort Affinity for C++ thin client
* Remove strong dependency on Boost 1.58.0


REST:
* Added "caches" param for "top" command
* Added baseline topology commands to REST API
* Added memory policy metrics via REST
* Fixed IGNITE_REST_SECURITY_TOKEN_TIMEOUT parameter is set in deciseconds instead of seconds


Visor:
* Added ability to set nodeId for VisorIdleVerifyDumpTask executed from ./control.sh --host HOST --cache idle_verify
* Added dynamic turn on/off cache statistics for Visor
* Added guard for cache restarting in progress for Visor tasks.
* Fixed rebalance status in Visor stays on 99.99%.


Control utility:
* Added ability to check CRC sums of stored pages
* Added ability to exclude cache from an output file
* Added ability to show more information about cache configuration
* Added ability to use simultaneous cache filtering options with control.sh --cache idle_verify
* Added command to deal with garbage in partitions which left after cache destroy in shared cache groups
* Added information about coordinator in control.sh output
* Added showing information about lost on idle_verify
* Added support SSL to work with baseline configuration (CommandHandler)
* Added support of changing baseline auto-adjust parameters via console.sh
* Added support request an SSL Keystore password and SSL truststore password
* Display time to baseline auto-adjust event in console.sh
* Fixed connection to cluster error in control.sh while using --cache
* Fixed control.sh --baseline remove outputs wrong error message when trying to remove a node from baseline
* Fixed control.sh not working on a multinode cluster setup
* Fixed idle_verify utility doesn't show both update counter and hash conflicts
* Fixed incorrect error message after three tries on an unsuccessful authorization
* Log all action performed thought control.sh


ML:
* Added Gaussian Mixture Model (GMM) trainer with fixed components
* Added ML logger and env variables in Spark ML Parser
* Added NamedVectors to replace HashMap in Model
* Added OneVsRest Trainer to handling cases with multiple class labels in a dataset
* Added Pipeline support to Cross-Validation process
* Added integration between Ignite SQL and Ignite ML
* Added new Hyper-parameter tuning via Genetic Algorithm
* Added parser for parquet file with the instance of DecisionTreeClassificationModel from Spark ML
* Added parser for parquet file with the instance of DecisionTreeRegressor from Spark ML
* Added parser for parquet file with the instance of GBTRegressionModel from Spark ML
* Added parser for parquet file with the instance of GradientBoostedTreesModel from Spark ML
* Added parser for parquet file with the instance of KMeansModel from Spark ML
* Added parser for parquet file with the instance of LinearRegressionModel from Spark ML
* Added parser for parquet file with the instance of LinearSVCModel from Spark ML
* Added parser for parquet file with the instance of RandomForestClassificationModel from Spark ML
* Added parser for parquet file with the instance of RandomForestRegressionModel from Spark ML
* Added support for using H2O MOJO models for inference and prediction on Ignite data
* Added support new feature-label extraction API (Vectorizers) to Preprocessor trainers
* Added various Naive Bayes classifiers
* Added vector projection
* Advanced support of categorical features (LabelEncoding, Strings in vectorizers)
* Fixed the problem with ML Labmdas which are not working in binary builds
* Implementation of a distributed estimator
* Import models from XGBoost
* Improve model loading from the directory instead a full path to file with model
* Improve the PeerClassloading for ml related lambdas
* Improvements of IgniteModelStorage for IgniteModel and SQL functionality
* Initial phase of integration with Spark ML (parsing of Spark ML models from ml package)
* Merge InfModel and Model
* Merge XGBoost and Ignite ML trees together
* Provide metrics to evaluate the quality of the model
* Provide the recommendation engine to build the recommendation system over the Ignite cache and via SQL operators
* Replace all label/feature extractors on new vectorizers
* Stacking for training and inference
* Unify API for ensemble training algorithms.


Dependency updates:
* Added dependency spring-data-2.2
* Added dependency hibernate-5.3
* Added dependency spark-2.4
* Added dependency spring-5.2
* Updated Jetbrains Annotations to 16.0.3
* Updated Kafka to 2.0.1
* Updated RocketMQ to 4.4.0
* Updated Commons Beanutils to 1.9.4
* Updated Jackson to 2.9.10
* Updated Jetty to 9.4.25
* Updated Spring to 4.3.26
* Updated spring-5.0 to 5.0.16
* Updated spring-data-2.0 to 2.0.13
* Moved Flink to ignite-extension


Apache Ignite In-Memory Database and Caching Platform 2.7.6
-----------------------------------------------------------

Ignite:
* Changed default persistence directory location when IGNITE_HOME is not set, native persistence files will not be stored in the temp directory anymore
* Fixed a bug that caused a SELECT query with an equality predicate on a part of the primary compound key to return a single row even if the query matched multiple rows
* Fixed an issue that could cause data corruption during checkpointing
* Fixed an issue where a row size was calculated incorrectly for shared cache groups, which caused a tree corruption
* Reduced java heap footprint by optimizing GridDhtPartitionsFullMessage maps in exchange history
* Fixed an issue where an outdated node with a destroyed cache caused the cluster to hang
* Fixed a bug that made it impossible to change the inline_size property of an existing index after it was dropped and recreated with a different value
* Fixed an issue causing silent control.sh script fail when JAVA_HOME is not set
* Fixed an issue causing sporadic node failure when persistence is enabled and WAL mmap is disabled
* Fixed an issue causing potential PDS corruption when a node is killed during checkpoint mark phase

Ignite .NET:
* Native persistence now works with a custom affinity function
* Fixed missing CacheEntryEventType.Removed event

Apache Ignite In-Memory Database and Caching Platform 2.7.5
-----------------------------------------------------------

Ignite:
* Added Java 11 support
* Fixed infinite looping during SSL handshake, affecting Java 11/Windows
* Fixed storage corruption case after incorrectly rotated page
* Erroneous WAL record after incorrectly rotated page processed automatically
* Addressed ignite.sh failure on Mac OS and Linux, affecting Java 11
* Launch scripts and some Ignite initialization steps were fixed for Java 12
* Fixed indexes corruption on node stop under load
* Fixed case of node crash during node deactivation
* Error message with advice about required JVM parameters printed when Java 9+ is used
* Introduced SYSTEM_CRITICAL_OPERATION_TIMEOUT failure type

Apache Ignite In-Memory Database and Caching Platform 2.7
---------------------------------------------------------

Ignite:
* Added experimental support for multi-version concurrency control with snapshot isolation
  - available for both cache API and SQL
  - use CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT to enable it
  - not production ready, data consistency is not guaranteed in case of node failures
* Implemented Transparent Data Encryption based on JKS certificates
* Implemented Node.JS Thin Client
* Implemented Python Thin Client
* Implemented PHP Thin Client
* Ignite start scripts now support Java 9 and higher
* Added ability to set WAL history size in bytes
* Added SslContextFactory.protocols and SslContextFactory.cipherSuites properties to control which SSL encryption algorithms can be used
* Added JCache 1.1 compliance
* Added IgniteCompute.withNoResultCache method with semantics similar to ComputeTaskNoResultCache annotation
* Spring Data 2.0 is now supported in the separate module 'ignite-spring-data_2.0'
* Added monitoring of critical system workers
* Added ability to provide custom implementations of ExceptionListener for JmsStreamer
* Ignite KafkaStreamer was upgraded to use new KafkaConsmer configuration
* S3 IP Finder now supports subfolder usage instead of bucket root
* Improved dynamic cache start speed
* Improved checkpoint performance by decreasing mark duration.
* Added ability to manage compression level for compressed WAL archives.
* Added metrics for Entry Processor invocations.
* Added JMX metrics: ClusterMetricsMXBean.getTotalBaselineNodes and ClusterMetricsMXBean.getActiveBaselineNodes
* Node uptime metric now includes days count
* Exposed info about thin client connections through JMX
* Introduced new system property IGNITE_REUSE_MEMORY_ON_DEACTIVATE to enable reuse of allocated memory on node deactivation (disabled by default)
* Optimistic transaction now will be properly rolled back if waiting too long for a new topology on remap
* ScanQuery with setLocal flag now checks if the partition is actually present on local node
* Improved cluster behaviour when a left node does not cause partition affinity assignment changes
* Interrupting user thread during partition initialization will no longer cause node to stop
* Fixed problem when partition lost event was not triggered if multiple nodes left cluster
* Fixed massive node drop from the cluster on temporary network issues
* Fixed service redeployment on cluster reactivation
* Fixed client node stability under ZooKeeper discovery
* Massive performance and stability improvements

Ignite .Net:
* Add .NET Core 2.1 support
* Added thin client connection failover

Ignite C++:
* Implemented Thin Client with base cache operations
* Implemented smart affinity routing for Thin Client to send requests directly to nodes containing data when possible
* Added Clang compiler support

SQL:
* Added experimental support for fully ACID transactional SQL with the snapshot isolation:
  - use CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT to enable it
  - a transaction can be started through native API (IgniteTransactions), thin JDBC driver or ODBC driver
  - not production ready, data consistency is not guaranteed in case of node failures
* Added a set of system views located in "IGNITE" schema to view cluster information (NODES, NODE_ATTRIBUTES, NODE_METRICS, BASELINE_NODES)
* Added ability to create predefined SQL schemas
* Added GROUP_CONCAT function support
* Added string length constraint
* Custom Java objects are now inlined into primary and secondary indexes what may significantly improve performance when AFFINITY_KEY is used
* Added timeout to fail query execution in case it cannot be mapped to topology
* Restricted number of cores allocated for CREATE INDEX by default to 4 to avoid contention on index tree Fixed transaction hanging during runtime error on commit.
* Fixed possible memory leak when result set size is multiple of the page size
* Fixed situation when data may be returned from cache partitions in LOST state even when PartitionLossPolicy doesn't permit it
* Fixed "Caches have distinct sets of data nodes" during SQL JOIN query execution between REPLICATED and PARTITIONED caches
* Fixed wrong result for SQL queries when item size exceeds the page size
* Fixed error during SQL query from client node with the local flag set to "true"
* Fixed handling UUID as a column type

JDBC:
* Implemented DataSource interface for the thin driver

ODBC:
* Added streaming mode support
* Fixed crash in Linux when there are more than 1023 open file descriptors
* Fixed bug that prevented cursors on a server from being closed
* Fixed segmentation fault when reusing a closed connection

Web Console:
* Added new metrics: WAL and Data size on disk
* Added support for "collocated" query mode on Query screen
* Added support for Java 9+ for Web Agent.
* Added ability to show/hide password field value
* Implemented execution of selected part of SQL query
* Implemented explain of the selected part of SQL query
* Implemented connection to a secured cluster
* Implemented responsive full-screen layout
* Split "Sign In" page to three separate pages
* UI updated to modern look and feel
* Improved backend stability
* Fixed fail when working with web sockets

REST:
* Added option IGNITE_REST_GETALL_AS_ARRAY for array format in "getAll" call

Visor:
* Added output of node "Consistent ID"
* Visor now collects information about cache groups instead of separate caches to reduce memory consumption
* Improved help for "start" command
* Fixed output of cache metrics

Control utility:
* Added information about transaction start time
* Added command to collect information about a distribution of partitions
* Added command to reset lost partitions
* Added support for empty label (control.sh --tx label null)
* Added atomicity mode to utility output.
* Added orphaned local and remote transactions and ability to rollback them
* Added "--dump" flag to dump current partition state to file.
* Renamed command argument '--force' to '--yes'
* Removed "initOrder" and "loc keys" from an info
* Fixed control utility hanging when connected to a joining node with PME

ML:
* Added TensorFlow integration
* Added Estimator API support to TensorFlow cluster on top of Apache Ignite
* Added ANN algorithm based on ACD concept
* Added Random Forest algorithm
* Added OneHotEncoder for categorical features
* Added model estimation
* Added K-fold cross-validation for ML models
* Added splitter for splitting the dataset into test and train subsets
* Added ability of filtering data during datasets creation
* Added encoding categorical features with One-of-K Encoder
* Added MinMax scaler preprocessor
* Added gradient boosting for trees
* Added indexing for decision trees
* Added GDB convergence by error support
* Added ability to build pipeline of data preprocessing and model training
* Added ability to start and maintain TensorFlow cluster on top of Apache Ignite
* Added support of Multi-Class for Logistic Regression
* Implemented distributed binary logistic regression

Dependency updates:
* Apache Camel updated to 2.22.0
* Apache Commons Beanutils updated to 1.9.3
* Apache Hadoop Yarn updated to 2.7.7
* Apache Kafka updated to 1.1.0
* Apache Lucene updated to 7.4.0
* Apache Mesos updated to 1.5.0
* Apache Tomcat updated to 9.0.10
* Apache Zookeeper updated to 3.4.13
* Guava updated to 25.1-jre
* Jackson Databind updated to 2.9.6
* Jackson 1 usages replaced with Jackson 2
* JCraft updated to 0.1.54
* H2 version updated to 1.4.197
* Log4j 2.x updated to 2.11.0
* Netty updated to 4.1.27.Final
* RocketMQ updated to 4.3.0
* Scala 2.10.x was updated to 2.10.7
* Scala 2.11.x updated to 2.11.12

Apache Ignite In-Memory Database and Caching Platform 2.6
---------------------------------------------------------
Ignite:
* Fixed incorrect calculation of client affinity assignment with baseline.
* Fixed incorrect calculation of switch segment record in WAL.
* Fixed JVM crush during in-progress eviction and cache group stop.

REST:
* Fixed serialization of BinaryObjects to JSON.

Apache Ignite In-Memory Database and Caching Platform 2.5
---------------------------------------------------------
Ignite:
* Implemented Zookeeper discovery SPI.
* Added Java thin client.
* Added continuous queries with transformers.
* Implemented general approach for critical failures handling.
* Added the new method IgniteMXBean.getCurrentCoordinatorFormatted() which displays formatted information about current coordiantor.
* Added partition update counters verification on partition map exchange.
* Added ability to disable WAL during initial data rebalancing.
* Added additional data storage metrics
* Added additional transactional metrics.
* Added DEB package and improved RPM package.
* Added information about fields serialization/deserialization errors in BinaryMarshaller.
* Added configurable automatic rollback timeout for pending transactions preventing partition map exchange to complete.
* Added preventing infinite iterations of corrupted B+Tree. New IGNITE_BPLUS_TREE_LOCK_RETRIES property was added, default value is Integer.MAX_VALUE.
* Implemented handling of broken segment in WAL compaction.
* Fixed affinity to always choose primary node from one of the owners when persistence is enabled.
* Partition eviction now does not block exchange.
* Fixed the issue that prevented rebalancing on a new baseline node join.
* Fixed potential deadlock during preloading.
* Fixed exception handling in IsolatedUpdater of DataStreamer.
* Fixed the issue when ComputeTaskFuture.get() threw a trimmed exception chain: now full exception chain is propagated to the caller; the exception thrown from IgniteCompute methods may now differ from the previous behavior.
* Fixed null value being passed to entry processor when such entry actually exists.
* Fixed problem when cluster could not survive after IgniteOutOfMemoryException.
* Fixed NullPointerException on batch atomic cache operations with cache store.
* Fixed bug with ScanQuery transformer which applies to the first result page only.
* Fixed hanging of node stopping in case when node is invalidated and persistence is enabled.
* BinaryMetadata exchange is triggered only if there are actual changes in BinaryMetadata.
* Fixed contention while executing parallel atomic single get operations.
* Fixed cache metadata corruption during concurrent checkpoint and cache destroy.
* Implemented additional synchronization for correct partition counters update on partition map exchange.
* Optimized checkpoint lock acquisition for demander thread.
* Destroyed caches with enabled persistence now will not survive grid restart.
* Nodes with incompatible SQL metadata will not be able to join grid. This fixes known case for index corruption.
* Fixed fillFactor memory metric value.
* Fixed bug with checkpoint buffer overflow with enabled throttling.
* Fixed crash recovery problem when index tree could reference to removed data pages.
* Fixed error during cluster initialization with partially acceptable WAL archive.
* Fixed issue with local partitions size changing inside checkpoint write lock.
* Fixed LOG_ONLY and BACKGROUND modes to be power-crash resistant.
* Fixed incorrect finishing of implicit transactions on unstable topology.
* Fixed incorrect mapping of smallint Cassandra type.
* Introduced log markers support to IgniteLogger and standard DEV_ONLY marker.
* Changed Log4J and Log4J2 adapters to update active logger configuration when configuration source file is modified.
* Fixed sqlline.sh script to use Java from JAVA_HOME.
* Improved Docker image build.
* Default and recommended JVM options are updated.

Ignite .Net:
* Added SSL configuration for node-to-node links.
* Added dynamic service proxies.
* Propagated query metrics to ICache.GetQueryMetrics() and ICache.ResetQueryMetrics().
* DML update via LINQ.
* Fixed hang caused by mishandled exception during custom cache store deserialization.
* Fixed GroupBy and Where issues in LINQ.
* .Net thin client SSL support.

Ignite C++:
* Fixed bug with LocalSize cache method.

SQL:
* Implemented COPY command for fast data load.
* Added support of authorization for CREATE TABLE and DROP TABLE commands.
* Improved deadlock handling in DML.
* Added IGNITE_SQL_FORCE_LAZY_RESULT_SET option to force all SQL queries on node using lazy result set.
* Fixed SQL query hang if cluster contains nodes not in baseline.

JDBC:
* Added SSL support.
* Added authentication.
* Added streaming mode to thin driver.
* Semicolon now can be used as delimiter for properties in URL string.
* Changed default socket buffer size to 64Kb in thin driver.
* Added FQDN to thin client in order to support multiple IPs for connection establishment.

ODBC:
* Added SSL support.
* Implemented username/password authentication.
* Added support of multiple addresses in connection string.
* Added support for SQL_ATTR_LOGIN_TIMEOUT.

Web Console:
* Added support for persistence in demo mode.
* Configuration screen is reworked to new modern design with improved usability.
* Implemented support for comma-separated list of node URIs.
* Fixed Docker file generation.
* Fixed code generation for large numbers in configuration params.
* Fixed demo for non-collocated joins.
* Fixed enum values decoding for SQL queries.
* Upgraded build to use Webpack 4.

REST:
* Added AUTHENTICATE command.
* Added support for new authentication API.
* Implemented possibility to get values from cache inserted via API or SQL.
* Enhanced GET_OR_CREATE_CACHE command with optional "templateName", "backups", "cacheGroup", "dataRegion" and "writeSynchronizationMode" options.
* Added support of Java built-in types (boolean, int, long, ..., UUID) for put/get operations.

Visor:
* Added "cache -slp" and "cache -rlp" commands to show and reset lost partitions for specified cache.
* Added scan queries of near cache support.

Control utility:
* Added utilities to control.sh script to display cache info.
* Added new tools (control.sh --tx, TransactionsMXBean) to view active transactions and ability to kill them .
* Added confirmation on dangerous operations.
* Fixed NullPointerException in case of empty base line and not active cluster.
* Fixed timeout on changing baseline in control.sh

ML:
* Implemented framework for genetic algorithms over Apache Ignite caches.
* Implemented LSQR-based linear regression.
* Implemented Linear SVM for binary classification.
* Implemented distributed version of SVM (support vector machine) algoritm.

Apache Ignite In-Memory Database and Caching Platform 2.4
---------------------------------------------------------
Ignite:
* Introduced Baseline Affinity Topology
* Ability to disable WAL for cache in runtime through IgniteCluster API or ALTER TABLE command
* Added ability to convert WAL to human-readable form
* Ability to enable/disable JDBC, ODBC and thin client endpoints
* Project moved to Java 8
* Java 7 is no longer supported
* Apache Ignite can be run on Java 9
* Introduced Apache Ignite packaging with RPM
* Spark Data Frames support
* Added integration with Spring 3.x
* Added handler to stop node when IO error is encountered
* EvictionPolicyFactory support added to CacheConfiguration
* Added JMX metrics for memory regions
* Added detailed memory consumption on start and OOM reporting
* Added custom thread pools monitoring
* Support Ignite MR in Kerberized environment without IGFS
* S3 IP finder: support server side encryption and bucket endpoint configuration
* Multiple fixes and performance optimizations

Ignite.NET:
* Thin Client initial release
* .NET Core / Linux / macOS support
* Mono platform support
* Removed C++ JNI layer

SQL:
* Added DEFAULT support to CREATE TABLE command
* Added ALTER TABLE DROP COLUMN support
* Added INLINE_SIZE option to CREATE INDEX command
* Added PARALLEL option to CREATE INDEX command
* Added optional on-heap row cache
* INSERT command now can be executed without explicit column names (INSERT INTO table VALUES ...)
* Allowed multiple caches to share the same schema
* Added support for Java 8 Date and Time API
* Added "notNull" property to QuerySqlField annotation
* Improved COUNT(*) performance
* Fixed a problem causing an exception in certain nodes do not have primary partitions for REPLICATED cache
* Fixed per-thread H2 connection leak.
* Fixed partition exchange hang due to SQL query running inside a transaction.

JDBC Driver:
* Optimized batched operations processing

ODBC Driver:
* Added support of multiple statements execution with one call
* Added support of SQL_ATTR_CONNECTION_TIMEOUT
* Added support of SQL_ATTR_QUERY_TIMEOUT
* Optimized batched operations processing
* Proper handling of ungraceful TCP disconnects (keep-alive connection)
* Fixed error preventing close of executed DML statement
* Fixed table names returned by SQLTables for DDL-created tables

Machine Learning:
* Implemented Fuzzy c-means algorithm
* Implemented gradient descent for OLS Linear Regression
* Implemented K nearest neighbor algorithm
* Introduced API for datasets
* Introduced API for ML model and trainers
* Introduced common mechanism for group training of models
* Added distributed version of multilayer perceptron
* Added local version of multilayer perceptron
* Added basic import/export functionality for ml models
* Added decision tree algorithm
* Performance optimizations for distributed operations

Web Console:
* Implemented component for cluster selection and activation
* Implemented support for multiple statements on Queries screen
* Implemented progress indication for 'execute', 'scan' and 'export' actions on Queries screen
* Added support for ClientConnectorConfiguration
* Added several SQL examples on Queries screen
* Added "Connected clusters" component in header
* Added support for custom SMTP server configuration
* Added detection of CSV separator based on browser locale
* Added "Copy to clipboard" action on Queries screen
* Added duration and node ID in results header and 'Show query' modal
* Improved support for binary JDBC types on import from RDBMS
* Fixed Web Console under IE11
* Fixed configuration generation for imported model in case of Oracle NUMBER(5) data type
* Fixed output of big numbers in SQL query results

Visor:
* Added "-quiet" flag for batch mode
* Added ability to start cache rebalance
* Added output of data region metrics to "node" command
* Added dialog to put/get/remove values to/from cache for simple key types
* Show valid message for caches when cluster is inactive
* Fixed 'cache -a' in case of node filter
* Fixed reading last command line in batch mode
* Updated eviction policy factory in configs

Apache Ignite In-Memory Database and Caching Platform 2.3
---------------------------------------------------------
Ignite:
* Ability to enable persistence per data region.
* Default page size is changed to 4KB.
* Ability to enable and disable rebalancing per-node.
* Added methods for batch services deployment.
* Introduced cache start/stop order on cluster activation.
* EstimatedRebalancingFinishTime and RebalancingStartTime metrics are exposed through MXBean interface.
* Ability to (de)activate cluster via http-rest API.
* Added Ignite update notifier.
* Updated Lucene dependency to version 5.5.2.
* Added an option to disable MBeans.
* Added sorted and multithreaded checkpoint modes.
* Added calculation of fill factor memory metric in persistent mode.
* Added estimated time for rebalance start and completion to cache metrics.
* Added API to add binary metadata locally.
* Added write throttling during an ongoing checkpoint to avoid zero performance drops.
* Ability to convert WAL to human-redable form.
* Ability to handle CacheObject from DataRecord in standalone WAL iterator.
* Support for uninterruptable writes using AsyncFileIOFactory; enabled with -DIGNITE_USE_ASYNC_FILE_IO_FACTORY=true.
* Enhanced persistent store path resolving to not rely on automatically generated consistent ID.
* Pre-configure local event listeners with IgniteConfiguration.LocalEventListeners.
* Massive performance and stability improvements.

Ignite.NET:
* LINQ: Local collections joins support.
* LINQ: Regex support.

Ignite CPP:
* Added Compute::Broadcast method.
* Added Ignite::SetActive method.

SQL:
* Added sqlline utility to the build.
* CREATE TABLE: Added NOT NULL support.
* CREATE TABLE: Ability to specify cache, key type and value type names.
* CREATE TABLE: Added "WRAP_KEY" and "WRAP_VALUE" options to CREATE TABLE command.
* CREATE TABLE: Added DATA_REGION option.
* CREATE TABLE: Added WRITE_SYNCHRONIZATION_MODE option.
* ALTER TABLE: ADD COLUMN support.
* Added lazy query execution mode (SqlFieldsQuery.setLazy).
* Added QuerySqlField.inlineSize property.
* Added FieldsQueryCursor interface to get fields metadata for SqlFieldsQuery.
* Added QueryEntity(Class keyClass, Class valueClass) constructor.
* Improved LocalDate, LocalTime and LocalDateTime support for Java 8.
* Optimized memory consumption during query execution.
* Fixed BigInteger data type handling.

JDBC Driver:
* Batch update support.
* SQLSTATE error codes support.
* Added "enforceJoinOrder" flag to connection string.
* Added "skipReducerOnUpdate" flag.
* Thin driver: Allowed execution of multiple SQL statements in one command.
* Thin driver: Added metadata support.
* Thin driver: Added type conversions in accordance with specification.
* Thin driver: Added schema to connection string.
* Thin driver: Added Statement.closeOnCompletion() support.
* Appended UUID to thick driver's Ignite instance name to avoid collision with user-created instances.
* Fixed a bug in PreparedStatement not clearing query parameters after execution.

ODBC Driver:
* SQLSTATE error codes support.
* Support for BINARY and VARBINARY types.
* DML statement batching.
* SQL_ATTR_CONNECTION_DEAD connection attribute.
* SQLGetInfo for info types.
* Added "skipReducerOnUpdate" flag.
* SQLRowCount now returns number of affected rows for non-batch queries.
* SQLBindParameter do not unbind parameter if the ParameterValuePtr is NULL anymore.
* Fixed error on cursor closing before all the rows from the result fetched.

Machine Learning:
* Implemented K-means clustering algorithm optimized for distributed storages.
* Introduced sparse block distributed matrix.
* Initial BLAS implementation.
* Integration with BLAS via netlib.
* Added getRow() and getCol() methods to Matrix API.

Web Console:
* Improved DDL support.
* Added PK alias generation on Models screen.
* Added generation of QueryEntity.keyFields on model import from RDBMS.
* Added sanitize user on save.
* Added charts with throughput and latency metrics for cache operations.
* Added version to footer.
* Added "Lazy ResultSet" flag on Queries screen.
* Implemented refresh rate for Monitoring screen.
* Implemented cluster nodes log viewer.

Visor:
* Ability to keep connection opened in batch mode.
* Ability to activate/deactivate cluster.
* Improved cache statistics.
* Added missing configuration properties to "config" command.
* Fixed script execution after alert throttling interval.

Apache Ignite In-Memory Database and Caching Platform 2.2
---------------------------------------------------------
Ignite:
* Checkpointing algorithm optimized
* Default max memory size changed from 80% to 20%

Ignite CPP:
* Now possible to start node with persistent store
* Ignite.setActive method added to C++ API

Apache Ignite In-Memory Database and Caching Platform 2.1
---------------------------------------------------------
Ignite:
* Persistent cache store
* Added IgniteFuture.listenAsync() and IgniteFuture.chainAsync() mehtods
* Deprecated IgniteConfiguration.marshaller
* Updated Lucene dependency to version 5.5.2
* Machine learning: implemented K-means clusterization algorithm optimized for distributed storages
* SQL: CREATE TABLE and DROP TABLE commands support
* SQL: New thin JDBC driver
* SQL: Improved performance of certain queries, when affinity node can be calculated in advance
* SQL: Fixed return type of AVG() function
* SQL: BLOB type support added to thick JDBC driver
* SQL: Improved LocalDate, LocalTime and LocalDateTime support for Java 8
* SQL: Added FieldsQueryCursor interface to get fields metadata for SqlFieldsQuery
* ODBC: Implemented DML statement batching
* Massive performance and stability improvements

Ignite.NET:
* Automatic remote assembly loading
* NuGet-based standalone node deployment
* Added conditional data removeal via LINQ DeleteAll
* Added TimestampAttribute to control DateTime serialization mode
* Added local collections joins support to LINQ.

Ignite CPP:
* Added Compute::Call and Compute::Broadcast methods

Web Console:
* Implemented support for UNIQUE indexes for key fields on import model from RDBMS
* Added option to show full stack trace on Queries screen
* Added PK alias generation on Models screen.

Apache Ignite In-Memory Database and Caching Platform 2.0
---------------------------------------------------------
Ignite:
* Introduced new page memory architecture
* Machine Learning beta: distributed algebra support for dense and sparse data sets
* Reworked and simplified API for asynchronous operations
* Custom thread pool executors for compute tasks
* Removed CLOCK mode in ATOMIC cache
* Deprecated schema-import utility in favor of Web Console
* Integration with Spring Data
* Integration with Hibernate 5
* Integration with RocketMQ
* Integration with ZeroMQ
* SQL: CREATE INDEX and DROP INDEX commands
* SQL: Ability to execute queries over specific set of partitions
* SQL: Improved REPLICATED cache support
* SQL: Updated H2 version to 1.4.195
* SQL: Improved performance of MIN/MAX aggregate functions
* ODBC: Added Time data type support
* Massive performance improvements

Ignite.NET:
* Custom plugin API
* Generic cache store
* Binary types now can be registered dynamically
* LINQ: join, "contains" and DateTime property support

Ignite CPP:
* Implemented Cache::Invoke
* Added remote filters support to continuous queries

Web Console:
* Multi-cluster support
* Possibility to configure Kubernetes IP finder
* EnforceJoinOrder option on Queries screen

Apache Ignite In-Memory Database and Caching Platform 1.9
---------------------------------------------------------
Ignite:
* Added Data streamer mode for DML
* Added Discovery SPI Implementation for Ignite Kubernetes Pods
* SQL: Query can utilize multiple threads
* SQL: Improved distributed SQL support
* Benchmarking simplified and automated
* Fixed licenses generation during build
* ignite-spark module upgraded to Spark 2.0

Ignite.NET:
* DML support
* TransactionScope API for Ignite transactions support

Ignite CPP:
* DML support
* Implemented LoadCache
* ContinuousQuery support

Apache Ignite In-Memory Database and Caching Platform 1.8
---------------------------------------------------------
Ignite:
* SQL: Added DML operations support (INSERT, UPDATE, DELETE, MERGE)
* SQL: Improved DISTINCT keyword handling in aggregates
* Hadoop: Added MapR distribution support
* Visor: Improved SQL statistics
* Added Redis protocol support
* Added transactions deadlock detection
* Many stability and fault-tolerance fixes

Ignite.NET:
* ASP.NET session state store provider
* Entity Framework second level cache
* Custom loggers support: NLog, Apache log4Net

ODBC driver:
* Added DML operations support
* Added distributed joins support
* Added DSN support
* Performance improvements

Apache Ignite In-Memory Database and Caching Platform 1.7
---------------------------------------------------------
Ignite:
* Added distributed SQL JOIN.
* Node can be assigned as primary only after preloading is finished.
* Fixed CountDownLatch re-create issue.
* ODBC: Added decimal type support.
* Visor: Fixed data nodes calculation when node filter is set for cache.
* Many stability and fault-tolerance fixes.

Ignite.NET:
* Added ASP.NET Output Cache provider.
* Added ability to use .NET configuration in Apache.Ignite.exe.
* Added ability to implement custom affinity functions.
* Fixed a bug in IBinaryObjectBuilder causing type name to be lost.

Ignite CPP:
* Marshalling performance improvements.

Apache Ignite In-Memory Database and Caching Platform 1.6
---------------------------------------------------------
Ignite .NET:
* Added LINQ Provider for cache SQL queries
* Added native configuration mechanism (C#, app.config, web.config - instead of Spring XML)
* Added NuGet distribution
* Added AtomicSequence and AtomicReference data structures
* Binaries are now AnyCPU (instead of separate x64/x86)
* Java-based services can be called the same way as .NET service are called
* Added java-based continuous query filters
* Added automatic Java detection: no need for JAVA_HOME
* Added ability to use Java-based remote filters in continuous queries.

Ignite C++:
* Added Transactions API for C++ client.
* Added Date and Timestamp types implementation for C++ client.
* Simplified Autotools build process for C++ client.

Ignite:
* Added ability to get partition 'updateCntr' with continuous query public API.
* Added asynchronous execution of ContinuousQuery's remote filter and local listener.
* Added backup partitions storing to local store default behavior.
* Added cache deadlock detection.
* Added Cache Store implementation backed by Cassandra DB.
* Added method to get versioned cache entry.
* Added ODBC driver for Ignite.
* Added support for join timeout while registering local addresses with IP finder in TcpDiscoverySpi.
* Added support for JTA transactions via synchronization callback.
* Added Web Console for Ignite.
* Fixed a bug causing object deserialization when local store is configured for cache.
* Fixed a problem with incorrect classloader picked in OSGI environment.
* Fixed a race condition when evicted offheap data was not delivered to query engine leading to query timeout.
* Fixed an issue in ContinuousQueries that caused missing of notifications.
* Fixed background cache partition map exchange not to flood network.
* Fixed BinaryContext to honor custom loader set through IgniteConfiguration.
* Fixed BinaryObjectOffHeapImpl leak to public code.
* Fixed cluster stability with 500+ clients.
* Fixed continuous queries to send filter factory instead of filter.
* Fixed continuous query deployment in case originating node has left.
* Fixed issues with continuous query.
* Fixed deadlock in services deployment when Spring is used.
* Fixed discovery and node start procedure issues that may cause slowdowns during larger topologies start (>100 nodes).
* Fixed eviction policy notification if swap or off heap is enabled and an entry is not loaded during preloading.
* Fixed excessive thread stack usage in case of high contention on cache entries.
* Fixed execution of Splunk MapReduce jobs on top of Ignite MR.
* Fixed GridClosureProcessor internal closures to be deserialized by BinaryMarshaller.
* Fixed issue with AWS dependencies.
* Fixed java proxies deserialization with optimized marshaller.
* Fixed local store behavior at cross cache transactions.
* Fixed marshalling of Java collection and maps for BinaryMarshaller.
* Fixed memory leak in IgniteH2Indexing.
* Fixed NPE during rebalancing.
* Fixed NPE in GridMergeIndex.
* Fixed OOME when OFFHEAP_TIERED mode is used.
* Fixed potential thread starvation during cache rebalancing.
* Fixed race condition on load cache on changing topology.
* Fixed race in marshalling logic that could arise when several nodes are running on the same host.
* Fixed redeployment issues happened with ScanQueries filters.
* Fixed service proxy not to make remote call for methods declared in java.lang.Object.
* Fixed several ClassNotFoundException in OSGi environment.
* Fixed SKIP_STORE flag behavior for transaction entry.
* Fixed support for classes with equal simple name for binary marshaller.
* Fixed system caches not to use user-defined TransactionConfiguration.
* Fixed the issue when CacheStore was updated even if EntryProcessor didn't update an entry.
* Fixed thread safety for TcpDiscoveryMulticastIpFinder.
* Fixed unintentional deserialization of BinaryObjects in OFFHEAP mode with peer class loading enabled.
* Fixed UTF-16 surrogate pairs marshalling.
* Fixed value copying in entry processor with OptimizedMarshaller.
* Fixed web session clustering with WebLogic.
* Hadoop: fixed a bug causing exception during MR planning when input split file doesn't exist.
* IGFS: Added configuration flag to disable default path modes under "/ignite" folder.
* IGFS: Added pluggable factory interface for Hadoop FileSystem creation.
* IGFS: Fixed file properties when running over secondary file system.
* IGFS: Fixed issues with Kerberized HDFS.
* IGFS: Massive performance and stability fixes.
* Improved marshaller behavior during cluster topology change.
* Mesos integration: added possibility to load Ignite package from file system.
* Optimized cache 'get' operations on affinity node.
* Optimized memory usage on server nodes to allow more client connections.
* Passed update notifier flag to discovery data to be sure that all cluster nodes have the same notifier status as the first node.
* Performance optimization for transactions that do not acquire locks.
* ScanQueries over local partitions performance optimisation.
* Support of package-private implementations for Ignite Services.
* Supported Ignite Compute tasks cancellation for Ignite.NET.
* Visor CMD: Added ability to attach custom scripts to alerts.
* Web sessions: minor fix to prevent NullPointerException in some special case.
* Web sessions: user session classes are no longer needed on server nodes.
* A lot of stability and fault-tolerance fixes.

Apache Ignite In-Memory Database and Caching Platform 1.5
---------------------------------------------------------
* Ignite.NET: Initial Release.
* Ignite C++: Initial Release.
* Massive performance improvements for cache operations and SQL.
* Added new binary cache object marshalling implementation.
* Added IgniteSemaphore data structure.
* Added MQTT Streamer.
* Added Twitter Streamer.
* Added Ignite Sink (integration with Apache Flume).
* Added Apache Camel Streamer.
* Added OSGi support.
* Fixed optimistic serializable transactions: implemented "deadlock-free" locking algorithm.
* Fixed failover for continuous queries.
* Fixed compilation and runtime errors under OpenJDK and IBM JDK.
* Fixed Integer.size limitation for cache.
* Fixed and improved cache types configuration.
* Fixed cache rebalancing.
* Many stability and fault-tolerance fixes.
* Added example to demonstrate the usage of EntryProcessor.

Complete list of closed issues: https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20fixVersion%20%3D%201.5%20AND%20status%20%3D%20closed

Apache Ignite In-Memory Database and Caching Platform 1.4
---------------------------------------------------------
* Added SSL support to communication and discovery.
* Added support for log4j2.
* Added versioned entry to cache API.
* Added client node based JDBC driver implementation.
* Fixed consistency issue for custom events processing within discovery.
* Fixed race in cache swap/unswap logic.
* Fixed IGNITE_HOME resolution with JBoss.
* Fixed configuration file resolution on classpath.
* Fixed MBean registration for caches.
* Fixed near cache evictions with offheap.
* Fixed SQL queries group index logic.
* Fixed memory leak in partitioned transactional cache.
* Fixed auto-retries for cache operations in recoverable cases.
* Fixed affinity routing in compute grid.
* Many stability and fault-tolerance fixes.

Apache Ignite In-Memory Database and Caching Platform 1.3
---------------------------------------------------------

* Added auto-retries for cache operations in recoverable cases.
* Added integration with Apache YARN.
* Added auto detection and dropping of slow client nodes.
* Fixed several issues with JTA integration.
* Fixed several issues with Hibernate L2 cache.
* Fixed issue with GAR files in source release.
* Stability fixes for TCP discovery SPI.
* Stability fixes for onheap and offheap SQL queries.
* Bug fixes in In-Memory Accelerator For Apache Hadoop.
* Many stability and fault-tolerance fixes.

Apache Ignite In-Memory Database and Caching Platform 1.2
---------------------------------------------------------

* Added client mode to TCP discovery SPI.
* Added memory based evictions.
* Added integration with Apache Spark.
* Added integration with Apache Mesos.
* Added IgniteCache.getAllOutTx() method.
* Added serializable cache store factories for built-in stores.
* Bug fixes in In-Memory Accelerator For Apache Hadoop.
* Many stability and fault-tolerance fixes.

Apache Ignite In-Memory Database and Caching Platform 1.1
---------------------------------------------------------

* Added Google Compute Engine TCP discovery IP finder.
* Added generic cloud TCP discovery IP finder (based on jclouds).
* Added SortedEvictionPolicy.
* Added chaining for IgniteConfiguration and CacheConfiguration setters.
* Added AffinityUuid class for easier generation of unique collocated keys.
* Added support for cache configuration templates.
* Added support for (*) star notation in cache names.
* Added "collocated" mode for SQL queries.
* Improved expiry policy handling (TTL based evictions) to avoid thrashing.
* Fixed job continuations.
* Fixed compilation and runtime with OpenJDK 7 & 8
* Fixed SQL Union support
* Fixed Word-Count streaming example to produce better results.
* Removed edtFTPj scanner from URI deployment due to licensing issues.
* Made deployment scanners for URI-based deployment pluggable.
* Many stability and fault-tolerance fixes.

Apache Ignite In-Memory Database and Caching Platform 1.0
---------------------------------------------------------

* Simplified query API.
* Added automatic aggregation, grouping, and sorting support to SQL queries.
* Added dynamic caches, i.e. ability to start and stop caches during runtime.
* Changed IgniteDataLoader to IgniteDataStreamer.
* Added automatic transformation support to streaming.
* Removed old streaming APIs in favor of new IgniteDataStreamer.
* Added many examples using Java8 lambdas and streams.
* Added new streaming examples based on new streaming and SQL querying APIs.
* Added automatic schema-import demo under examples.
* Improved javadoc documentation.
* Added ability to automatically exclude LGPL optional dependencies during build.


Apache Ignite In-Memory Database and Caching Platform 1.0 RC3
-------------------------------------------------------------

This is the first release of Apache Ignite project. The source code in large part is based
on the 7 year old GridGain In-Memory Database and Caching Platform, open source edition, v. 6.6.2, which was
donated to Apache Software Foundation in September 2014.

The main feature set of Ignite In-Memory Database and Caching Platform includes:
* Advanced Clustering
* Compute Grid
* Data Grid
* Service Grid
* IGFS - Ignite File System
* Distributed Data Structures
* Distributed Messaging
* Distributed Events
* Streaming & CEP
