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]

FileSystemConfiguration

  • name - null name is no longer allowed
  • metaCacheName - removed, use metaCacheConfiguration
  • dataCacheName - removed, use dataCacheConfiguration
  • streamBufferSize - renamed to bufferSize
  • maxSpace - removed, maximum memory is now controlled through MemoryPolicy [1]
  • initializeDefaultPathModes - removed
  • trashPurgeTimeout - removed
  • fragmentizerLocWritesRatio - removed 
  • dualModePutExecutorService - removed
  • dualModePutExecutorServiceShutdown - removed
  • dualModeMaxPendingPutsSize - removed

TcpDiscoverySpi

Heartbeat-related properties have been removed. Now heartbeat frequency is controlled through IgniteConfiguration.metricsUpdateFrequency property.

  • maxMissedHeartbeats
  • maxMissedClientHeartbeats
  • heartbeatFrequency

TcpCommunicationSpi

Several deprecated properties have been removed:

  • connectionBufferSize
  • connectionBufferFlushFrequency
  • minimumBufferedMessageCount

TcpDiscoveryS3IpFinder

  • awsCredentials - renamed to awsCredentialsProvider

General API

Asynchronous operations

IgniteAsyncSupport interface is now deprecated and will be removed in future Apache Ignite releases. Use methods with Async suffix instead. See documentation for more information [4].

Old style:

IgniteCache<K, V> asyncCache = cache.withAsync();
 
asyncCache.getAsync(key);
 
IgniteFuture<V> future = asyncCache.future();

New style:

IgniteFuture<V> future = сache.getAsync(key);

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)

  • Data Streamer calls are now processed in dedicated thread pool (see IgniteConfiguration.dataStreamerThreadPoolSize property)
  • SQL, Scan and SPI queries are now processed in dedicated thread pool (see IgniteConfiguration.queryThreadPoolSize 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

Renamed to ILifecycleHandler. {{IgniteConfiguration.LifecycleBeans}} property renamed to IgniteConfiguration.LifecycleHandlers.

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].

Ignite C++

Enum names

  • CachePeekMode: IGNITE_PEEK_MODE_* -> CachePeekMode::* (e.g. IGNITE_PEEK_MODE_PRIMARY -> CachePeekMode::PRIMARY)
  • TransactionConcurrency: IGNITE_TX_CONCURRENCY_* -> TransactionConcurrency::* (e.g. IGNITE_TX_CONCURRENCY_OPTIMISTIC -> TransactionConcurrency::OPTIMISTIC)
  • TransactionIsolation: IGNITE_TX_ISOLATION_* -> TransactionIsolation::* (e.g. IGNITE_TX_ISOLATION_READ_COMMITTED -> TransactionIsolation::REPEATABLE_READ)
  • TransactionState: IGNITE_TX_STATE_* -> TransactionState::* (e.g. IGNITE_TX_STATE_ACTIVE -> TransactionState::ACTIVE)
  • CollectionType: IGNITE_COLLECTION_* -> CollectionType::* (e.g. IGNITE_COLLECTION_ARRAY_LIST -> CollectionType::ARRAY_LIST)
  • MapType: IGNITE_MAP_* -> MapType::* (e.g. IGNITE_MAP_HASH_MAP -> MapType::HASH_MAP)

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.
  • GetHashCode and GetIdentityResolver methods are not used any more.
  • BinaryType::Write now takes object argument by constant reference and not by value: void Write(BinaryWriter&, T) -> static void Write(BinaryWriter&, const T&)
  • BinaryType::Read now returns object by argument reference and not as return value (method does not return any value any more): T Read(BinaryReader&) -> static void Read(BinaryReader&, T&)
  • BinaryType::GetTypeName now return name by argument reference and not as return value: std::string GetTypeName() -> static void GetTypeName(std::string&)
  • BinaryType::GetNull now return null value by argument reference and not as return value: T GetNull() -> static void GetNull(T&)

QueryArgument

QueryArgument and QueryArgumentBase classes are not public any more. This should not affect any users as these classes were not meant for use by users from the beginning.

 

[1] https://apacheignite.readme.io/docs/page-memory

[2] https://apacheignite.readme.io/docs/evictions

[3] https://apacheignite.readme.io/docs/memory-metrics

[4] https://apacheignite.readme.io/docs/async-support

[5] https://apacheignite-mix.readme.io/docs/hibernate-l2-cache

[6] https://apacheignite.readme.io/docs/redis

[7] https://apacheignite-tools.readme.io/docs/automatic-rdbms-integration

[8] https://apacheignite-net.readme.io/docs/serialization

[9] https://apacheignite-net.readme.io/docs/platform-interoperability

 

  • No labels