Overview

Apache Ignite 2.0 incorporate tremendous changes that make it different from Apache Ignite 1.x releases. Apache Ignite 2.0 is incompatible with previous versions and, most likely, application code has to be altered if someone plans to migrate to 2.0. Below you will find the main public API changes introduced in version 2.0.

Page Memory Architecture

Apache Ignite 2.0 is based on the new page memory architecture. Data is always stored offheap, with ability to optionally cache small portion in Java heap. See documentation for more information [1].

Configuration

IgniteConfiguration

gridName - deprecated, use igniteInstanceName

failureDetectionTimeout - now this property affects only server nodes, use IgniteConfiguration.clientFailureDetectionTimeout for client nodes

marshallerCacheThreadPoolSize - removed due to changes in marshaller metadata handling

marshallerCacheKeepAliveTime - removed due to changes in marshaller metadata handling

clockSyncSamples - removed because CLOCK mode is no longer supported for ATOMIC cache

clockSyncFrequency - removed because CLOCK mode is no longer supported for ATOMIC cache

swapSpaceSpi - removed due to new Ignite page memory architecture [1]

CacheConfiguration

The following properties have been changed/removed:

atomicWriteOrderMode - removed because CLOCK mode is no longer supported for ATOMIC cache

name - null name is not allowed any more

typeMetadata - removed, use queryEntities property

The following properties have been removed due to new Ignite page memory architecture [1]:

evictSynchronized

evictSynchronizedKeyBufferSize

evictSynchronizedConcurrencyLevel

evictSynchronizedTimeout

evictMaxOverflowRatio

memoryMode

offHeapMaxMemory

snapshotableIndex

sqlOnheapRowCacheSize

startSize

swapEnabled

Previously existed eviction mechanisms based on EvictionPolicy is now supported only for optional near and Java heap caching of the data stored in the offheap page memory. To enable the eviction for the page memory, use DataPageEvictionMode enumeration. See documentation for more details [2].

CollectionConfiguration

memoryMode property has been removed due to new Ignite page memory architecture [1]

OptimizedMarshaller

Implementation has been removed from public API and is not expected to be used directly anymore.

SwapSpaceSpi

SPI has been removed due to new Ignite page memory architecture [1]. The swapping tier can only be used if a swapping file is set via MemoryPolicyConfiguration.swapFilePath property.

BinaryIdentityResolver

Interface has been removed. Now key hash code and equality is calculated based on content of serialized object.

EventType

Several event types have been removed due to new Ignite page memory architecture:

EVT_CACHE_OBJECT_SWAPPED

EVT_CACHE_OBJECT_UNSWAPPED

EVT_SWAP_SPACE_DATA_READ

EVT_SWAP_SPACE_DATA_STORED

EVT_SWAP_SPACE_DATA_REMOVED

EVT_SWAP_SPACE_CLEARED

EVT_SWAP_SPACE_DATA_EVICTED

EVT_CACHE_OBJECT_TO_OFFHEAP

EVT_CACHE_OBJECT_FROM_OFFHEAP

IgniteCluster

mapKeysToNodes - removed, use Affinity.mapKeysToNodes

mapKeyToNode - removed, use Affinity.mapKeyToNode

IgniteFuture

Several methods were removed with no replacement:

startTime

duration

Cache API

IgniteCache

randomEntry - removed

localPromote - removed due to new Ignite page memory architecture [1]

CacheEntry

updateTime method was removed

CacheMetrics

The following methods were removed as part of a migration to page memory architecture [1]. New MemoryMetrics interface has been introduced in order to monitor memory usage in runtime [3].

getOverflowSize

getOffHeapMaxSize

getSwapGets

getSwapPuts

getSwapRemovals

getSwapHits

getSwapMisses

getSwapEntriesCount

getSwapSize

getSwapHitPercentage

getSwapMissPercentage

CacheMemoryMode

Enumeration has been removed due to new Ignite page memory architecture [1]. Offheap is used as the main storage tier with an ability to enable Java heap caching via CacheConfiguration.onheapCacheEnabled property.

CacheAtomicWriteOrderMode

Enumeration has been removed because CLOCK mode is no longer supported for ATOMIC cache.

CachePeekMode

SWAP value has been removed due to new Ignite page memory architecture [1]. The swapping tier can only be used if a swapping file is set via MemoryPolicyConfiguration.swapFilePath property.

@AffinityKeyMapped

No longer allowed on methods.

FairAffinityFunction

Implementation has been removed due to well-known problems with co-location between caches on different versions of cluster topology. Use RendezvousAffinityFunction.

AffinityNodeHashResolver

Interface has been removed. Use IgniteConfiguration.consistentId property.

RandomEvictionPolicy

Implementation has been removed with no replacement.

SQL API

@QuerySqlField and @QueryTextField

No longer allowed on methods.

_key and _val columns in SqlFieldsQuery

Before Apache Ignite 2.0 SqlFieldsQuery in the form "SELECT * FROM ..." returned special _key and _val columns representing actual cache entry key and value respectively. These columns are not returned anymore unless specified explicitly.

CacheTypeMetadata and CacheTypeFieldMetadata

Classes have been removed. Use QueryEntity class and CacheConfiguration.queryEntities property.

Miscellaneous

Thread pools

Ignite process different types of requests in special thread pools to provide clear separation of concerns and avoid starvation. Several new thread pools were added in Apache Ignite 2.0:

Service Grid calls are now processed in dedicated thread pool (see IgniteConfiguration.serviceThreadPoolSize property)

Schema import utility

Utility has been removed. Please use Web Console [7].

Integrations

Spring Framework

Spring Framework dependency has been upgraded to 4.3.7.RELEASE version.

Hibernate

Apache Ignite 2.0 integrates with Hibernate 5.0. The previous integration with a legacy Hibernate version of 4.2 can be used by importing ignite-hibernate_4.2 maven artifact or taking a respective JAR file from distribution. See documentation for more details [5]

Redis

Default Redis cache name was changed from null to default. See documentation for more details [6]

Ignite.NET

CompiledQuery2

Class was removed. Please use CompiledQuery.

CacheEvent

LockId property has been removed.

BinaryConfiguration

DefaultNameMapper - renamed to NameMapper

DefaultIdMapper - renamed to IdMapper

DefaultKeepDeserialized - renamed to KeepDeserialized

ILifecycleBean

Dynamic Type Registration, Serializable Types

BinaryConfiguration is no longer required, any type can be used in Cache and Compute right away. All objects are written in Ignite binary format, including types implementing interface. See documentation for more information [8].

Binary Name Mapping

Ignite.NET 1.9 and earlier uses simple name mapping only, which means Object.GetType().Name is used to map type name to type id. Ignite.NET 2.0 uses full name mapping by default, which includes namespace, generics and array dimensions. This change may affect multi-platform Ignite applications where Java and .NET types are mapped to each other. See documentation for more information [9].

IgniteError

IgniteError now should be passed by reference and not by pointer everywhere.

BinaryWriter and BinaryRawWriter

BinaryWriter::WriteObject and BinaryRawWriter::WriteObject now take constant references instead of value. This probably won't require any changes from you.

BinaryType

BinaryType have been heavily refactored:

All methods should now be static now.

There is no more default implementation of BinaryType methods, meaning you are now going to have compilation errors instead of runtime errors if you have not implemented some essential method for your binary type. If you don't want to implement some method and you are sure that you will not be needing it then you should explicitly provide implementation of such method which asserts or throws exception upon call.