You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2021/05/27 07:31:29 UTC

[ignite] branch sql-calcite updated (c814ed2 -> 348276b)

This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a change to branch sql-calcite
in repository https://gitbox.apache.org/repos/asf/ignite.git.


    from c814ed2  IGNITE-14737 Equals predicate with multiple results from subqueries must fail - Fixes #9109.
     add 873bb4f  IGNITE-13866 validate_indexes command is interrupted if connection to initiator is broken. Fixes #8593
     add fe263ae  IGNITE-13868 Added additional tests related to simultaneously created caches. Fixes #8584
     add 1619e8e  IGNITE-13896 Fix javadoc build failure - Fixes #8601.
     add 76eda8d  IGNITE-12824 .NET: Add BinaryConfiguration.TimestampConverter (#8568)
     add a0350f7  IGNITE-13900: Fix C++ Affinity tests (#8605)
     add 9123e97  IGNITE-13708 Add thin client support for Spring Transactions - Fixes #8556.
     add 5223e44  IGNITE-13910 Missing segment is not released - Fixes #8612.
     add eb77c8a  IGNITE-13908: ODBC nullability info for columns
     add 732268e  IGNITE-13507 Fix NullPointerException on tx recovery - Fixes #8547.
     add 6d02e32  IGNITE-13734 .NET: Register service return type on method invocation (#8602)
     add ff203b2  IGNITE-13856 Linear performance for DirectByteBufferStreamImplV2.writeString - Fixes #8577.
     add 64dbfcf  IGNITE-13555 Java thin: add IPv6 address support
     add 1e7f957  IGNITE-13680 Improve OS suggestions for Linux - Fixes #8503.
     add 2acae6e  IGNITE-11406 Fix NullPointerException on client start - Fixes #8604.
     add 415a532  IGNITE-13175 Fixed NullPointerException caused by a race between stopping tx cache and committing transaction. Fixes #8075
     add 10ad34b  IGNITE-13917 Fixed dumpLongRunningOperations invocation before exchange manager was fully started. Fixes #8619
     add 8484ff0  IGNITE-13806 Add the release notes for 2.9.1 (#8531)
     add b5c807d  IGNITE-13904 Don't use rows buffers by reduce index for simple (plain) query that uses one-way unsorted reducer (#8607)
     add f17a4cb  IGNITE-13456 Extends info collected during tracing of SQL queries. (#8393)
     add c2204cd  IGNITE-13897 .NET: Service can't assign correct type to passed array parameters (#8614)
     add bdb4fc9  IGNITE-13930 change pom versions to 2.11.0-SNAPSHOT (#8625)
     add c11ce8c  IGNITE-13931 .NET: Add tests for overload service methods (#8626)
     add 7fb6e07  IGNITE-13906 Fixed possible deadlock in GridEncryptionManager. Fixes #8608
     add 5514ea0  ignite docs: added a quick start section to the index page
     add 3f8f773  IGNITE-13779: defining Ignite as a distributed database for in-memory speed and high-performance computing
     add 971f318  IGNITE-13883 .NET: Simplify and optimize TryReadSystemType
     add 25da46c  IGNITE-13845 Add checkpoint metrics (#8572)
     add 1c3d0fe  IGNITE-11110 Fixed stop case with collision SPI enabled - Fixes #8581.
     add ecb345f  IGNITE-9109: SQL API for C++ thin
     add b8adbb0  IGNITE-13928 Defragmentation process handles all SQL indexes - Fixes #8622.
     add fb618ad  ignite docs: changing the titles of the quick start guides for the sake of SEO
     add e2b0b11  IGNITE-12090 .NET: Fix KeyNotFoundException on nullable sbyte query field
     add fdb5c13  IGNITE-13966 Change copyright to 2021 (#8640)
     add e16d080  IGNITE-8732 partial fix for join: REPLICATED cache LEFT JOIN with PARTITIONED cache (#8637)
     add 6f729bd  IGNITE-8732 fix style
     add 936f96c  IGNITE-13926 Fixed Javadoc for job checkpoint events. Fixes #8621
     add 358e145  ignite docs: metric, system view, system properties commands (#8630)
     add 5aeef1c  IGNITE-13964 fix freeze on cancellation local lazy queries
     add 634ac6d  IGNITE-13754 .NET: Fix LINQ provider for queries with JOIN and GROUP BY combined
     add 7ce07a6  IGNITE-13960 fix starvation in management pool caused by MetadataTask execution (#8647)
     add 7faf7be  IGNITE-13968 Add snapshot events documentation pages (#8642)
     add f134fb4  ignite docs: updated Ignite definition in the documentation and readme-like files
     add 6690dec  IGNITE-13995 Updated EncryptedCacheExample and removed deprecated methods usages. Fixes #8667
     add 0629e6f  IGNITE-13977 Code enhancement after review of encryption persistent storage. Fixes #8659
     add 7a6538c  IGNITE-13982 Add documentation for new checkpoint, cluster and cache metrics (#8652)
     add 5f7ecd5  IGNITE-13854 Add documentation for the cluster performance profiling tool (#8663)
     add 24ec908  IGNITE-13659 Add documentation for cache encryption key rotation (#8446)
     add f4bf825  IGNITE-14003 Improve heap consumption on reserving rebalance iterator. (#8671)
     add 20641ca  IGNITE-14013 Add documentation for the node validation failure event. (#8673)
     add 80eada9  IGNITE-13624 Extend tracing of communication socket write with number of sent bytes (#8396)
     add 66f7d6a  IGNITE-14015 Tracing SQL: tracing of SELECT queries causes incorrect span inheritance (#8675)
     add 65a02ca  IGNITE-13912 Fixed calculation of the number of segments to be deleted - Fixes #8650.
     add b8914bc  IGNITE-13958 .NET: Add implicit Java type registration in ExecuteJavaTask (#8635)
     add 28c738a  IGNITE-13567 Fixed incorrect value of the joiningNodeClient flag (#8350)
     add 7c3cac2  IGNITE-12950 Added check of partition sizes to GridDhtPartitionsStateValidator, even if update counters are different. Fixes #8645
     add 8253842  IGNITE-13674  Add documentation for Native Persistence Defragmentation feature (#8465)
     add 8f06256  IGNITE-13796 Update documentation and examples for the kubernetes module (#8532)
     add 079f49d  IGNITE-13979 .NET: Modernize examples
     add 1bc9ab8  IGNITE-14033 .NET: Fix MessagingTest.TestRemoteListen flakiness
     add b6c2af1  IGNITE-13385 Added documentation on cache warm-up strategy (#8689)
     add a02beb5  IGNITE-14045 .NET: Fix examples test on .NET Core 3
     add 20a74ad  IGNITE-14027 Server nodes outside of BLT should be included into BLT when auto-adjust is turned on - Fixes #8679.
     add 7eb4af3  IGNITE-14039 Add warning to runtime, javadoc and documentation on WAL enable/disable.
     add d243849  IGNITE-14030 Java thin client: Add containKeys, clearKey, clearKeys and getAndPutIfAbsent operations - Fixes #8692.
     add 727897f  IGNITE-14047 .NET: Fix NuGet download condition in build.ps1
     add 2d6dcc9  IGNITE-13957 Fix unnecessary key/val deserialization in GridQueryProcessor
     add b2b2373  IGNITE-13606 (#8690)
     add 782449d  IGNITE-13687 Improvement of human-readable format of WAL records (StandaloneWalRecordsIterator). Fix code style - Fixes #8441.
     add bfe732ef IGNITE-14061 Exclude extdata modules from deployment
     add ca04d82  IGNITE-12955 Add documentation pages for index inline size console command (#8701)
     add 1386b2d  IGNITE-13588 .NET: Fix SQL type name for generic query types
     add 4a711a7  IGNITE-14067 CREATE TABLE uses encryptionEnabled property of cache template - Fixes #8710.
     add 760f050  IGNITE-13285 (#8691)
     add a7f35ac  IGNITE-13639 .NET: Fix detached semantics for array and collection elements
     add 165d5cc  IGNITE-13763: Add connection limit
     add 9052956  IGNITE-14100 GridCachePartitionedNodeRestartTest fails due to wrong tx mapping. Fixes #8727
     add 9af1eb4  IGNITE-14703 Fixed transactions failover. Fixes #8712
     add 8ab3211  IGNITE-14064 .NET: Fix SQL table name for generic query types
     add 02043cc  IGNITE-14111 Add javadoc for AbstractDataPageIO - Fixes #8742.
     add a7c83a5  IGNITE-14093 TTL cleanup worker logic fix: it should not start on a node removed from baseline - Fixes #8721.
     add d467e31  IGNITE-14117 Fix travis build under jdk11 due to incorrect TLS version (#8741)
     add f7c14f2  IGNITE-14080 Fix hung binary-metadata-writer after wal standalone iterator is closed - Fixes #8720.
     add 5f4301e  IGNITE-13623 Fix ScalaDoc creation during release process - Fixes #8735.
     add 52a1749  IGNITE-12982 Initialization of TcpCommunicationSpi fix: no messages are sent until SPI is fully initialized. - Fixes #8717.
     add 82d2a2c  IGNITE-14020 .NET: Services exceptions interoperability between java and .NET - Fixes #8746.
     add 62cc458  IGNITE-13512 Add travis check that tests are not in suites - Fixes #8367.
     add f1cb467  IGNITE-14128 Add documentation for Java thin client async API (#8753)
     add 8df8e0b  IGNITE-14133 Document cluster API implementation for CPP (#8761)
     add 554f749  IGNITE-13981 Documentation: SQL tracing. (#8762)
     add 8489c4f  IGNITE-14069 Added release notes for 2.10 version (#8748)
     add 8607394  IGNITE-14055 Execution of timeout handshake object moved to the separated scheduled thread pool (#8698)
     add 21f992a  IGNITE-14112 Revisit usages of GridClosureProcessor.runLocalSafe and GridClosureProcessor.callLocalSafe methods - Fixes #8743.
     add a03313e  IGNITE-10073 .NET: Document how to exclude jar files from build output
     add 971b3e1  IGNITE-14103 .NET: Add thin client automatic binary configuration
     add 3304031  IGNITE-13992 Migrate Spring Transactions integration to ignite-extensions - Fixes #8666.
     add dffc22b  IGNITE-14129 Add documentation for .NET thin client service invocation (#8756)
     add 49736f2  IGNITE-13512 Fixed run mvn in batch mode to reduce log size (#8779)
     add a65645a  IGNITE-14116 .NET: Update tests with LongRunning category
     add 1af728f  IGNITE-14141 Remove unnecessary storage configuration from PageStore (#8774)
     add defc398  IGNITE-13877 Restructuring WAL work directory after enabling WAL archive. - Fixes #8681.
     add 4c412a8  IGNITE-14136 Fix flaky ServicesTest.testServiceTimeout - Fixes #8765.
     add 0b6fd9f  IGNITE-13472 Fix security context for JDBC bulkload operations (#8266)
     add a125b53  IGNITE-14139 Incorrect initialize checkpoint-runner-cpu thread pool (#8770)
     add 652f69d  IGNITE-14140 Checkpointer thread holds write lock too long (#8772)
     add 84c6841  IGNITE-14138 Fixed an issue where historical rebalance can kill supplier node. Fixes #8769
     add abd7778  IGNITE-14152 Fixed jcache-tck profile exclude tests mask (#8787)
     add 57c39a1  IGNITE-12941 .NET: Fix and document single file deployment on .NET 5
     add 5d7b59c  IGNITE-13902 Add Ignite thin client Spring bean - Fixes #8752.
     add 1fa1ee0  IGNITE-14173 .NET: Fix partition awareness auto-disable on old servers
     add d5048ba  IGNITE-14078 Fixed an issue that caused a deadlock when user cache was created in parallel with TTL worker was in progress. Fixes #8718
     add 3d2bf5f  IGNITE-14168 fix description of validate_indexes command (#8798)
     add 6e16486  IGNITE-14155 Waiting for condition added to an async event - Fixes #8791.
     add f1f476d  IGNITE-14169 .NET: Add NamespacePrefix and NamespaceToLower to BinaryBasicNameMapper (#8795)
     add c44e381  IGNITE-14171 Fix flaky IgniteSpringBeanSpringResourceInjectionTest.testSpringResourceInjectedInService - Fixes #8793.
     add a4631d6  IGNITE-14191 Add command to control.(sh|bin) to manage performance statistics (#8806)
     add bbae673  IGNITE-14153 closing for stale outcoming connections implemented - Fixes #8788.
     add 693cc44  IGNITE-13761 Clock and Segmented-LRU page replacement - Fixes #8513.
     add 489287d  IGNITE-14146 Migrate Spring Cache integration to ignite-extensions - Fixes #8781.
     add cd5e6e0  IGNITE-12508 Improve GridCacheProcessor#cacheDescriptor's time complexity - Fixes #8802.
     add 1a64ddc  IGNITE-13560 Add node attribute colocated affinity backup filter - Fixes #8668.
     add b3d760f  IGNITE-13557 Logging improvements for PDS memory restore process (#8751)
     add ae08e1c   IGNITE-5266 .NET: Add LongCount to LINQ provider
     add b36386e  IGNITE-14219 Wait for Grid process instead of Kill process (#8816)
     add 4391d57  IGNITE-14223 Remove FilePageStoreFactory internal interface (#8823)
     add eda18a4  IGNITE-14175 Correction of the metrics of received keys for rebalancing #8799
     add 92e213b  IGNITE-14166 Fix javadocs related to the metrics registry API (#8796)
     add 8a6e137  IGNITE-14241 Fix testClientQueryExecutedEventsIncludeSensitive (#8825)
     add f685ca4  IGNITE-14243 .NET: Extend ConfigurationManager dependency version range
     add dad9c8c  IGNITE-14221 Hide SQL Constants when IGNITE_TO_STRING_INCLUDE_SENSITIVE = false  (#8821)
     add 851f650  IGNITE-14206 fix compatibility inline POJO between 2.8.1 and 2.9.0 (#8811)
     add e18a970  IGNITE-14185 ynchronous checkpoints on several nodes greatly increase a latency of distributed transaction (#8803)
     add 93b7492  IGNITE-14206 fix compatibility inline POJO between 2.8.1 and 2.9.0: fix javadoc & jdk11 optimization (#8830)
     add 7700feb  IGNITE-13725 Add the snapshot check command (#8715)
     add fc4588f  IGNITE-13792 Fixed an issue that caused NullPointerException on client disconnect.
     add 2358de8  IGNITE-14261 Add documentation references to the new metrics system (#8844)
     add 0675e2a  IGNITE-14204 Fix C++ thin transactions
     add 04f832d  IGNITE-14257 Add copy constructor to ClientCacheConfiguration class - Fixes #8838.
     add 28eec4f  IGNITE-14250 .NET: Fix race condition in Events example, test example output
     add 3ca06cd  IGNITE-13385 Fixed documentation pages for cache warm-up strategy examples (#8703)
     add 235a779  IGNITE-14246 Parameter to filter certain pages from WAL when reading with WAL converter - Fixes #8834.
     add 76b22a3  IGNITE-14271 Update documentation pages for reduild indexes metrics (#8848)
     add 61f078f  IGNITE-14143 Document metric for processed keys when rebuilding indexes. (#8776)
     add 5269c15  IGNITE-14008 SQL tracing: add tag sql.query.id (#8682)
     add e99bdba  IGNITE-14231 IGNITE_ENABLE_FORCIBLE_NODE_KILL flag support in inverse connection protocol - Fixes #8826.
     add 205c052  IGNITE-14285 Fix sqlline history file location (#8859)
     add 15a7769  IGNITE-14286 Fix snapshot check command on cluster with client nodes (#8861)
     add 6560a8c  IGNITE-12508 Add missing cache remove to ClusterCachesInfo - Fixes #8845.
     add d147b4b  IGNITE-14144 Document C++ thin client transactions (#8777)
     add 4617f56  IGNITE-14284 Remove -d option from sqlline invocation. (#8864)
     add 8cc19b1  IGNITE-14293 .NET: Fix AffinityKey metadata in QueryEntity.KeyType
     add 1dd263c  IGNITE-14134 Add snapshot partition iterator for hash check (#8767)
     add 24ddf8c  IGNITE-14311 .NET: ServiceTest refactoring (#8873)
     add 4d43434  IGNITE-13689 Extended test coverage related to IGNITE-11512. Fixes #8444
     add 61bb218  IGNITE-13767: Removed PHP, Node.js and Python from main repo
     add 19cd3f8  IGNITE-14177 Fixed NULLS LAST/FIRST sorting if query parallelism is set (#8875)
     add 2347762  IGNITE-14313 .NET: Add tests for .NET -> .NET service calls (#8876)
     add 1370230  IGNITE-14079 Added test for checking partition eviction order. Fixes #8719
     add 0056126  Revert "IGNITE-14079 Added test for checking partition eviction order. Fixes #8719"
     add 8e154f0  IGNITE-14224 Extended logging on closing connection to failed client - Fixes #8824.
     add ea41746  IGNITE-8635 Add a Method to Inspect BinaryObject Size - Fixes #8868.
     add c607850  IGNITE-14320 .NET: Fix namespace handling in TypeNameParser (#8883)
     add 2b4e6ee  IGNITE-14305 Fix snapshot check command for indexes (#8874)
     add eeeb81d  IGNITE-14247 Document the snapshot check command (#8878)
     add a5a5063  IGNITE-14214 Fix merge query with no unique columns for the Oracle dialect (#8887)
     add c510805  IGNITE-14308 Convert exception to warning in case of local deployment with unexpected node id.
     add ba2e717  IGNITE-13374 Initial PME hangs because of multiple blinking nodes fixed. Fixes #8850
     add 65b7039  IGNITE-2399: Implement acquireAndExecute In IgniteSemaphore (#8820)
     add dd67d3b  IGNITE-14322 Suppress redundant WAL archive warning message in non-persistent mode - Fixes #8888.
     add 9004235  IGNITE-14130 Fixing NullPointerException for automatic archiving WAL segment (#8890)
     add 90aeb56  IGNITE-14170 New metrics for number of bytes written to WAL log and compressed in archive - Fixes #8794.
     add 1a7b7a2  IGNITE-14079 Added test for checking partition eviction order. Fixes #8893
     add 802835e  IGNITE-13951 Improved metrics description.
     add 4723bd6  IGNITE-13878 Fixed Allocated RAM metric for IM region on persistent node.
     add 034d196  IGNITE-14361 WhiteSpace after checkstyle rule (#8907)
     add 8ab281b  IGNITE-14373 Fix race between auto rollover WAL segment and deactivate of WAL (#8912)
     add d0ebc48  IGNITE-14160 Issue warning if SSL handshake is too long - Fixes #8792.
     add da8a6bb  IGNITE-14378 : Remove delay from node ping
     add 8d7a8eb  IGNITE-14377 : Enchance log of node ping failure. (#8913)
     add 7b033cf  IGNITE-14368 Data structures system views (#8911)
     add 50f7657  IGNITE-14255: Added the ability to rotate collecting performance statistics (#8840)
     add 47a9014  IGNITE-14222 Exclude evicted partitions from re-encryption - Fixes #8846.
     add b3b7416  IGNITE-14254 Graceful stop rebuilding indexes on a cluster deactivation (#8837)
     add 96ba8f0  IGNITE-14076 Improved throughput of transactional putAll (optimistic rr rc). Fixes #8885
     add 5fdb246  IGNITE-14431 Get rid of useless validation. - Fixes #8939.
     add 1761294  IGNITE-14417 Document performance-statistics-ext module (#8940)
     add 288c290  IGNITE-14347: Fix Node Failure on Receiving Data of Unknown Class via Distributed Metastorage (#8898)
     add 1ef6790  IGNITE-14397 Document spring-tx integration. (#8948)
     add ec89c85  IGNITE-14398 Document thin client support for spring-data integration. (#8941)
     add 120ba5f  IGNITE-14447 Fixed possible meta tree corruption after drop index with failed checkpoint scenario. (#8949)
     add 22439bf  IGNITE-14448 Fix hanging of node if the inverse connection is requested and paired connections are enabled (#8950)
     add 225f679  IGNITE-14394 Fixed baseline auto adjustment triggered by merged exchanges. Fixes #8934
     add da38102  IGNITE-14379 Update commons-codec dependency to 1.13.
     add 35b3528  IGNITE-13056 Move indexes from the indexing to the core module (closes #8490)
     add b014376  IGNITE-14458 Fix flaky IgniteLocalWalSizeTest. (#8958)
     add 8113ec0  IGNITE-14375 Pending messages can be erroneously send (#8943)
     add cfebe24  IGNITE-13873 Milti-cell transaction changes may be not visible (durin… (#8822)
     add 92b3f1a  IGNITE-14439 Re-fixed NPE when accessing clustername before first exchange finished - Fixes #8944.
     add a4bec2d  IGNITE-14425 Hang transactions in FINISH [COMMIT] phase when сommunication spi is blocked. Fixes #8936
     add c608a6c  IGNITE-14475: Fix C++ Query Example when run with multiple nodes
     add 55e5717  IGNITE-14451 fix corrupt PK index tree caused fields order (closes #8951)
     add 1d28b39  IGNITE-14471 JDBCv2: fix query cursors leak when node to execute queries is specified (#8966)
     add a451c9d  IGNITE-14493 Document versions of Spring integration extensions. (#8979)
     add 43123aa  IGNITE-14492 Java thin client: Refactor notification listener - Fixes #8978.
     add 6b74e4fc IGNITE-14461 Track down those who initiated a query (#8965)
     add b94aa78  IGNITE-14482 replaced ref with value in code snippet - Fixes #8974.
     add b65411e  IGNITE-14402 Java thin client: Continuous queries support - Fixes #8960.
     add 31ac65e  IGNITE-14499 Support dynamic DNS in TcpDiscoveryVmIpFinder - Fixes #8981.
     add 48e4474  IGNITE-14491: moving-sections-and-deleting-incorrect-note (#8986)
     add d7782bd  IGNITE-13381 Local cluster group should have correct node ID after reconnect - Fixes #8985.
     add 866dec4  IGNITE-14507 Un-deprecate IGNITE_BINARY_SORT_OBJECT_FIELDS - Fixes #8992.
     add 72f0671  IGNITE-14404-specify-correct-java-versions (#8993)
     add 71dbf16  IGNITE-13976 Fixed inconsistency in WAL mode state when changing WAL state on unstable topology - Fixes #8643.
     add 43a7a1a  IGNITE-14321 Fix force index rebuilding (#8962)
     add 1ce1a19  IGNITE-14428 Formalizes the names of the metrics included in the metric registry (#8937)
     add 9084b83  IGNITE-14462 Add support EmptyCatchBlock for checkstyle (#9000)
     add 3a07d4a  IGNITE-14384 No automatic page diagnostic for CorruptedTreeException, only metadata storing for further investigation - Fixes #8926.
     add 118c64e  IGNITE-14385: Add checkpoint information to the performance statistics. (#8928)
     add 3baeac8  IGNITE-13818 Add extended logging topology for node left/join a grid. Fixes #8559
     add ed876a6  IGNITE-14547 Fix NPE in control.sh if there is illegal parameter after --cache indexes_force_rebuild - Fixes #9005.
     add 9195498  IGNITE-14331 Fixed an issue when Data Streamer flushing could hang due to a connectivity problem. Fixes #8955
     add 3561e87  IGNITE-14528 Fixed race between rebalance and checkpoint which led to assertion error in GridDhtPartitionDemander$RebalanceFuture.ownPartitionsAndFinishFuture. Fixes #9003
     add 074046b  IGNITE-14523 .NET: Add string.Compare support to LINQ provider
     add 38d279a  IGNITE-12033 Move async continuations away from striped pool
     add e5d266e  IGNITE-14346 Implement Azure Blob Storage based IP Finder - Fixes #8897.
     add 01e541e  IGNITE-14324 EVT_CLIENT_NODE_DISCONNECTED is not triggered in k8s (#8980)
     add b1480f0  Fix thin continuous query mention in RELEASE_NOTES for 2.10
     add 2b6cad5  IGNITE-14505 Print information about a striped pool in local node metrics - Fixes #8988.
     add 6c402ed  IGNITE-14497 Move background task deletion at the end of next checkpoint (#8983)
     add 7498164  IGNITE-13444 Durable tasks are cancelled on grid deactivation, starting new tasks is prohibited - Fixes #8244.
     add 46e0449  IGNITE-13399 Fix access right issues in computation of system metrics - Fixes #8903.
     add 79add25  IGNITE-14565 Added additional update counter logging for detecting of AssertionError: LWM after HWM. Fixes #9011
     add 255a30c  IGNITE-14620 Fix GridCacheAsyncOperationsLimitSelfTest#testAsyncOps flakiness
     add bec58b0  IGNITE-14423 Fixed node failure caused by AssertionError: Transaction does not own lock for update. Fixes #8935
     add e3674cc  IGNITE-14527 CVE-2021-2816[3,4,5] in Jetty (#9002)
     add f97b932  IGNITE-14644 .NET: Log a warning about COMPlus_EnableAlternateStackCheck
     add 6bce7c7  IGNITE-14662 Updates dependency artifactId in spring-data extension documentation. (#9055)
     add d0da231  IGNITE-6324 Filtering uncommited tx WAL records to prevent restoring tx partially - Fixes #8987.
     add 08f75dd  IGNITE-14660 fix flaky test GridSubqueryJoinOptimizerSelfTest#testOptimizationAppliedToUnion (#9052)
     add 4ffbf5d  IGNITE-14661 validate parts of compound PK for NOT NULL constraint (#9053)
     add dc168e9  IGNITE-14610 fix BinaryBuilderReader doesn't supports reference (HANDLE) to collection (#9057)
     add 85b52a0  IGNITE-14655 .NET: Improve DataStreamer API
     add 01e3899  IGNITE-14609 Document old and new async continuation behavior
     add f77af9e  IGNITE-14525 Removing an empty page (#9059)
     add 598e97b  IGNITE-14625 DurableBackgroundTask threads management improved; fixed issue when checkpointer could preemptively delete completed task, potentially causing leaks. (#9037)
     add da77655  IGNITE-14665 Use parent version of surefire - Fixes #9062.
     add 517d586  IGNITE-14671 Fix flaky testClusterSnapshotCheckOtherCluster (#9068)
     add 661ba3f  IGNITE-14335 Merges APIs of IgniteAuthenticationProcessor and IgniteSecurity. (#8892)
     add 5f5caf4  IGNITE-14607 Regex Based Filtering For Discovery IP Addresses - Fixes #9048.
     add e32691b  IGNITE-14575 Write to DMS must throw error, if client is not in topology - Fixes #9012.
     add f26d676  IGNITE-14669 Fixed NPE when node caused query deserialization error and left - Fixes #9067.
     add 295b8441 IGNITE-14678 Removed outdated note about TLSv1.3 being unsupported - Fixes #9078.
     add 8bb0a94  IGNITE-14584 Fix exception handling during CQ remote filter deployment. (#9017)
     add 467b029  IGNITE-14688 Fix testDetectPeerDeployAwareInfiniteRecursion failure. (#9082)
     add c0868ce  IGNITE-14624 Fixed an issue that caused AssertionError when a cluster was activated immediately after deactivation. Fixes #9080
     add 6041dce  IGNITE-14582 Fixed CQ remote filter deployment to the client nodes. Fixes #9015
     add 049ca70  IGNITE-14687 Fixed capacity check in case of counter overflow - Fixes #9083.
     add 4928ca5  IGNITE-14131 IgniteCompute tasks with same name, running from one node and different ClassLoaders can lead to OOM - Fixes #9020.
     add e2fa709  IGNITE-14684 Fixed node fail due to deleting DurableBackgroundTask's at the end of a checkpoint when stopping a node (#9091)
     add 29cd623  IGNITE-14469 Additional tests for control utility command indexes_force_rebuild - Fixes #9061.
     add 6b4ed99  IGNITE-14490 Test for scenario where cache.invoke() triggers failure handler - Fixes #8976.
     add 17ca570  IGNITE-14675 Refactors IgniteAuthenticationProcessor callbacks. (#9079)
     add 3109b31  IGNITE-13805 Add cache groups snapshot restore on the same topology (#8648)
     add 6c8cfbc  IGNITE-14572 Include metastorage to snapshot (#9047)
     add 626168e  IGNITE-14729 Fix race condition in ClientImpl (#9102)
     add cad0e8f  IGNITE-14720 Remove suggestion about '-XX:+DisableExplicitGC' option - Fixes #9096.
     add b1529fb  IGNITE-14714 LineLength checkstyle rule added (#9106)
     new 348276b  Merge branch 'master' into sql-calcite

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml                                        |   16 +-
 DEVNOTES.txt                                       |   17 +
 NOTICE                                             |    2 +-
 README.md                                          |    8 +-
 README.txt                                         |    3 -
 RELEASE_NOTES.txt                                  |  287 +++
 assembly/NOTICE_HADOOP                             |    2 +-
 assembly/NOTICE_IGNITE                             |    2 +-
 assembly/dependencies-apache-ignite-slim.xml       |    1 +
 assembly/libs/README.txt                           |    1 +
 assembly/release-apache-ignite-base.xml            |   76 -
 checkstyle/checkstyle-suppressions.xml             |    2 +
 checkstyle/checkstyle.xml                          |   21 +
 doap_Ignite.rdf                                    |    4 +-
 docs/Gemfile                                       |    3 +
 docs/_config.yml                                   |    7 +-
 docs/_data/toc.yaml                                |   16 +-
 docs/_docs/clustering/discovery-in-the-cloud.adoc  |   44 +-
 .../cpp/src/broadcast_jobs_to_remote_nodes.cpp     |   44 +
 .../cpp/src/predefined_cluster_groups.cpp          |   27 +
 docs/_docs/code-snippets/dotnet/ThinClient.cs      |   19 +
 docs/_docs/code-snippets/dotnet/dotnet.csproj      |    2 +-
 docs/_docs/code-snippets/java/pom.xml              |    5 +
 .../ignite/snippets/DiscoveryInTheCloud.java       |   24 +
 .../org/apache/ignite/snippets/JavaThinClient.java |   38 +-
 .../main/java/org/apache/ignite/snippets/TDE.java  |    7 +
 .../org/apache/ignite/snippets/WarmUpStrategy.java |   83 +
 .../java/org/apache/ignite/snippets/k8s/K8s.java   |   21 +
 docs/_docs/code-snippets/k8s/service.yaml          |    8 +-
 .../k8s/stateful/node-configuration.xml            |   12 +-
 .../k8s/stateless/node-configuration.xml           |    8 +-
 docs/_docs/code-snippets/xml/tde.xml               |   15 +-
 docs/_docs/code-snippets/xml/warm-up-strategy.xml  |   71 +
 .../distributed-computing/cluster-groups.adoc      |   12 +-
 docs/_docs/events/events.adoc                      |   30 +
 .../ignite-for-spark/overview.adoc                 |    2 +-
 .../performance-statistics.adoc                    |   82 +
 .../spring/spring-data.adoc                        |   79 +-
 .../spring/spring-tx.adoc                          |  466 ++++
 docs/_docs/includes/cpp-prerequisites.adoc         |    2 +-
 docs/_docs/includes/dotnet-prerequisites.adoc      |    2 +-
 docs/_docs/includes/java9.adoc                     |    6 +-
 docs/_docs/includes/partition-awareness.adoc       |    8 -
 docs/_docs/includes/prereqs.adoc                   |    2 +-
 docs/_docs/index.adoc                              |   19 +-
 docs/_docs/installation/index.adoc                 |   21 -
 .../kubernetes/generic-configuration.adoc          |   14 +-
 .../key-value-api/basic-cache-operations.adoc      |   27 +-
 docs/_docs/memory-configuration/data-regions.adoc  |  122 +
 docs/_docs/monitoring-metrics/metrics.adoc         |   36 +
 .../monitoring-metrics/new-metrics-system.adoc     |    2 -
 docs/_docs/monitoring-metrics/new-metrics.adoc     |   48 +-
 .../monitoring-metrics/performance-statistics.adoc |   97 +
 docs/_docs/monitoring-metrics/system-views.adoc    |  153 ++
 docs/_docs/monitoring-metrics/tracing.adoc         |   65 +
 docs/_docs/net-specific/net-async.adoc             |  121 +
 .../_docs/net-specific/net-deployment-options.adoc |   51 +-
 docs/_docs/net-specific/net-troubleshooting.adoc   |   19 +
 .../native-persistence-defragmentation.adoc        |   65 +
 docs/_docs/persistence/native-persistence.adoc     |    3 +
 docs/_docs/persistence/snapshot-directory.adoc     |   39 +
 docs/_docs/persistence/snapshots.adoc              |  208 --
 docs/_docs/quick-start/cpp.adoc                    |    2 +-
 docs/_docs/quick-start/dotnet.adoc                 |    4 +-
 docs/_docs/quick-start/java.adoc                   |    4 +-
 docs/_docs/quick-start/nodejs.adoc                 |    8 +-
 docs/_docs/quick-start/php.adoc                    |   19 +-
 docs/_docs/quick-start/python.adoc                 |    4 +-
 docs/_docs/quick-start/restapi.adoc                |    2 +-
 .../security/cache-encryption-key-rotation.adoc    |  145 ++
 docs/_docs/security/master-key-rotation.adoc       |    2 +-
 docs/_docs/security/tde.adoc                       |    1 -
 docs/_docs/setup.adoc                              |   62 +
 docs/_docs/snapshots/snapshots.adoc                |  208 ++
 docs/_docs/starting-nodes.adoc                     |   23 -
 docs/_docs/thin-clients/cpp-thin-client.adoc       |   57 +
 docs/_docs/thin-clients/dotnet-thin-client.adoc    |   15 +-
 docs/_docs/thin-clients/java-thin-client.adoc      |   32 +-
 docs/_docs/thin-clients/nodejs-thin-client.adoc    |    4 +-
 docs/_docs/thin-clients/php-thin-client.adoc       |   14 +-
 docs/_docs/thin-clients/python-thin-client.adoc    |    8 +-
 docs/_docs/tools/control-script.adoc               |  296 ++-
 docs/assets/css/docs.scss                          |    4 +-
 docs/assets/css/styles.scss                        |    4 +-
 examples/pom.xml                                   |    8 +-
 .../client/ClientKubernetesPutGetExample.java      |   70 +
 .../examples/encryption/EncryptedCacheExample.java |   29 +-
 .../ml/clustering/KMeansClusterizationExample.java |    3 +-
 .../dataset/AlgorithmSpecificDatasetExample.java   |   22 +-
 .../CatboostClassificationModelParserExample.java  |    3 +-
 .../KMeansClusterizationExportImportExample.java   |    3 +-
 .../modelparser/DecisionTreeFromSparkExample.java  |    9 +-
 .../DecisionTreeRegressionFromSparkExample.java    |    9 +-
 .../spark/modelparser/GBTFromSparkExample.java     |    9 +-
 .../modelparser/GBTRegressionFromSparkExample.java |    9 +-
 .../spark/modelparser/KMeansFromSparkExample.java  |    5 +-
 .../LinearRegressionFromSparkExample.java          |    8 +-
 .../spark/modelparser/LogRegFromSparkExample.java  |    9 +-
 .../modelparser/RandomForestFromSparkExample.java  |    9 +-
 .../RandomForestRegressionFromSparkExample.java    |    9 +-
 .../spark/modelparser/SVMFromSparkExample.java     |    5 +-
 .../multiclass/OneVsRestClassificationExample.java |    7 +-
 .../encoding/TargetEncoderExample.java             |    4 +-
 .../linear/BostonHousePricesPredictionExample.java |    3 +-
 ...gressionLSQRTrainerWithMinMaxScalerExample.java |    4 +-
 ...eeClassificationTrainerSQLInferenceExample.java |    4 +-
 .../RandomForestClassificationExample.java         |    4 +-
 .../hyperparametertuning/Step_13_RandomSearch.java |    6 +-
 .../Step_14_Parallel_Brute_Force_Search.java       |    6 +-
 .../Step_15_Parallel_Random_Search.java            |    6 +-
 .../Step_16_Genetic_Programming_Search.java        |    6 +-
 ...tep_17_Parallel_Genetic_Programming_Search.java |    6 +-
 .../ignite/examples/ml/util/MLSandboxDatasets.java |    9 +-
 .../spark/JavaIgniteDataFrameJoinExample.java      |    4 +-
 .../ignite/examples/spark/SharedRDDExample.java    |    2 +-
 idea/ignite_codeStyle.xml                          |    1 +
 modules/aop/pom.xml                                |   10 +-
 .../aop/aspectj/GridifySetToSetAspectJAspect.java  |    3 +-
 .../aspectj/GridifySetToValueAspectJAspect.java    |    3 +-
 .../gridify/aop/spring/GridifySpringEnhancer.java  |    3 +-
 .../org/apache/ignite/p2p/P2PGridifySelfTest.java  |    2 +
 .../ignite/testsuites/IgniteAopSelfTestSuite.java  |    5 +
 .../direct/singlesplit/SingleSplitsLoadTest.java   |    3 +
 .../gridify/GridifySingleSplitLoadTest.java        |    3 +
 modules/apache-license-gen/pom.xml                 |    2 +-
 modules/aws/pom.xml                                |   11 +-
 modules/azure/README.txt                           |   32 +
 modules/azure/pom.xml                              |  342 +++
 .../azure/TcpDiscoveryAzureBlobStoreIpFinder.java  |  382 +++
 .../spi/discovery/tcp/ipfinder/package-info.java   |   23 +
 ...TcpDiscoveryAzureBlobStoreIpFinderSelfTest.java |   91 +
 .../discovery/tcp/ipfinder/azure/package-info.java |   21 +
 .../ignite/testsuites/IgniteAzureTestSuite.java    |   61 +
 modules/benchmarks/pom.xml                         |    2 +-
 .../jmh/cache/JmhCacheAsyncListenBenchmark.java    |  162 ++
 .../GridDhtPartitionsStateValidatorBenchmark.java  |    5 +-
 .../jmh/misc/JmhSegmentedLruListBenchmark.java     |  122 +
 .../benchmarks/jmh/tree/BPlusTreeBenchmark.java    |    4 +-
 modules/calcite/pom.xml                            |    2 +-
 .../query/calcite/exec/AbstractIndexScan.java      |    6 +-
 .../query/calcite/exec/ExchangeServiceImpl.java    |    3 +-
 .../query/calcite/exec/ExecutionServiceImpl.java   |   13 +-
 .../processors/query/calcite/exec/IndexScan.java   |   14 +-
 .../query/calcite/exec/RuntimeTreeIndex.java       |    9 +-
 .../query/calcite/exec/ddl/DdlCommandHandler.java  |    5 +-
 .../calcite/exec/exp/agg/AccumulatorsFactory.java  |    4 +-
 .../query/calcite/exec/rel/MergeJoinNode.java      |    3 +-
 .../query/calcite/exec/rel/ModifyNode.java         |    4 +-
 .../query/calcite/exec/rel/NestedLoopJoinNode.java |    4 +-
 .../calcite/metadata/AffinityServiceImpl.java      |    4 +-
 .../query/calcite/metadata/ColocationGroup.java    |    9 +-
 .../calcite/metadata/IgniteMdSelectivity.java      |    3 +-
 .../query/calcite/metadata/MappingServiceImpl.java |    3 +-
 .../calcite/prepare/CalciteQueryFieldMetadata.java |   13 +-
 .../query/calcite/prepare/FieldsMetadata.java      |    3 +-
 .../processors/query/calcite/prepare/Splitter.java |    3 +-
 .../prepare/ddl/DdlSqlToCommandConverter.java      |    3 +-
 .../query/calcite/rel/AbstractIgniteJoin.java      |    3 +-
 .../rel/IgniteCorrelatedNestedLoopJoin.java        |    9 +-
 .../query/calcite/rel/IgniteNestedLoopJoin.java    |    9 +-
 .../query/calcite/rel/IgniteTableModify.java       |    3 +-
 .../calcite/rel/agg/IgniteMapHashAggregate.java    |    3 +-
 .../calcite/rel/agg/IgniteSingleHashAggregate.java |    6 +-
 .../calcite/rel/agg/IgniteSingleSortAggregate.java |    3 +-
 .../query/calcite/schema/SchemaHolderImpl.java     |    2 +-
 .../query/calcite/schema/TableDescriptorImpl.java  |   11 +-
 .../query/calcite/trait/DistributionFunction.java  |    3 +-
 .../processors/query/calcite/trait/TraitUtils.java |    5 +-
 .../processors/query/calcite/util/Commons.java     |    2 +-
 .../processors/query/calcite/util/RexUtils.java    |    3 +-
 .../CalciteBasicSecondaryIndexIntegrationTest.java |    6 +-
 .../query/calcite/CalciteQueryProcessorTest.java   |    8 +-
 .../processors/query/calcite/DateTimeTest.java     |   12 +-
 .../query/calcite/exec/rel/ExecutionTest.java      |   12 +-
 .../rel/HashAggregateSingleGroupExecutionTest.java |   36 +-
 .../calcite/exec/rel/TableSpoolExecutionTest.java  |    3 +-
 .../integration/AggregatesIntegrationTest.java     |    8 +-
 .../CalciteErrorHandlilngIntegrationTest.java      |    8 +-
 .../integration/MetadataIntegrationTest.java       |    2 +-
 .../query/calcite/jdbc/JdbcQueryTest.java          |    3 +-
 .../query/calcite/planner/AbstractPlannerTest.java |    3 +-
 .../query/calcite/planner/PlannerTest.java         |   56 +-
 .../query/calcite/planner/UnionPlannerTest.java    |    2 +
 .../ignite/testsuites/ExecutionTestSuite.java      |    4 +-
 .../ignite/testsuites/IntegrationTestSuite.java    |    2 +
 .../apache/ignite/testsuites/ScriptTestSuite.java  |    2 +
 modules/cassandra/pom.xml                          |    2 +-
 modules/cassandra/serializers/pom.xml              |   13 +-
 .../org/apache/ignite/tests/SerializerSuite.java   |   29 +
 modules/cassandra/store/pom.xml                    |   12 +-
 .../cassandra/CassandraCacheStoreFactory.java      |    5 +-
 .../persistence/KeyValuePersistenceSettings.java   |   15 +-
 .../ignite/tests/IgnitePersistentStoreTest.java    |   12 +-
 .../apache/ignite/tests/utils/CassandraHelper.java |    3 +-
 .../tests/persistence/blob/ignite-config.xml       |    6 +-
 .../tests/persistence/pojo/ignite-config.xml       |   21 +-
 .../tests/persistence/primitive/ignite-config.xml  |    6 +-
 modules/clients/pom.xml                            |   11 +-
 .../src/test/config/jdbc-security-config.xml       |   68 +
 ...eCreationDestructionWileTopologyChangeTest.java |   70 +
 .../ClientSizeCacheCreationDestructionTest.java    | 1243 ++++++++++
 .../common/RunningQueryInfoCheckInitiatorTest.java |  420 ++++
 .../client/ClientReconnectionSelfTest.java         |   23 +-
 .../internal/client/TaskSingleJobSplitAdapter.java |    3 +-
 .../client/suite/IgniteClientTestSuite.java        |    9 +-
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java    |   10 +-
 .../internal/jdbc2/JdbcBulkLoadSelfTest.java       |    2 +-
 .../internal/jdbc2/JdbcComplexQuerySelfTest.java   |    2 +-
 .../ignite/internal/jdbc2/JdbcCursorLeaksTest.java |  202 ++
 .../jdbc2/JdbcDistributedJoinsQueryTest.java       |    5 +-
 .../internal/jdbc2/JdbcMetadataSelfTest.java       |   16 +-
 .../jdbc2/JdbcNoCacheStreamingSelfTest.java        |    2 +-
 .../jdbc2/JdbcPreparedStatementSelfTest.java       |    2 +-
 .../internal/jdbc2/JdbcResultSetSelfTest.java      |    2 +-
 .../internal/jdbc2/JdbcStatementSelfTest.java      |    2 +-
 .../internal/jdbc2/JdbcStreamingSelfTest.java      |    4 +-
 .../jdbc2/JdbcStreamingToPublicCacheTest.java      |    2 +-
 ...ttyRestProcessorAuthenticationAbstractTest.java |   10 +-
 ...thenticatorUserManagementAuthorizationTest.java |  112 +
 .../ignite/jdbc/AbstractJdbcPojoQuerySelfTest.java |    2 +-
 .../apache/ignite/jdbc/JdbcAuthorizationTest.java  |   23 +-
 .../ignite/jdbc/JdbcComplexQuerySelfTest.java      |    2 +-
 .../ignite/jdbc/JdbcErrorsAbstractSelfTest.java    |    2 +-
 .../apache/ignite/jdbc/JdbcMetadataSelfTest.java   |    2 +-
 .../ignite/jdbc/JdbcPreparedStatementSelfTest.java |    2 +-
 .../apache/ignite/jdbc/JdbcStatementSelfTest.java  |    2 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java      |    4 +
 .../thin/JdbcThinAbstractDmlStatementSelfTest.java |    4 +-
 .../JdbcThinAuthenticateConnectionSelfTest.java    |   14 +-
 .../ignite/jdbc/thin/JdbcThinBatchSelfTest.java    |    3 +-
 .../ignite/jdbc/thin/JdbcThinBulkLoadSelfTest.java |    4 +-
 .../jdbc/thin/JdbcThinComplexQuerySelfTest.java    |    2 +-
 .../jdbc/thin/JdbcThinConnectionSelfTest.java      |    3 +-
 .../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java |   80 +-
 .../thin/JdbcThinPartitionAwarenessSelfTest.java   |    4 +-
 .../thin/JdbcThinPreparedStatementSelfTest.java    |    2 +-
 .../jdbc/thin/JdbcThinResultSetSelfTest.java       |    2 +-
 .../jdbc/thin/JdbcThinStatementCancelSelfTest.java |    2 +-
 .../jdbc/thin/JdbcThinStatementSelfTest.java       |    2 +-
 .../thin/JdbcThinStatementTimeoutSelfTest.java     |    2 +-
 .../thin/JdbcThinStreamingAbstractSelfTest.java    |    4 +-
 .../client/ClientMarshallerBenchmarkTest.java      |    3 +
 .../loadtests/client/ClientTcpSslLoadTest.java     |    3 +
 .../qa/query/WarningOnBigQueryResultsBaseTest.java |    7 +-
 .../src/test/resources/jetty/rest-jetty.xml        |    2 +-
 modules/cloud/pom.xml                              |   15 +-
 modules/codegen/pom.xml                            |    2 +-
 .../SystemViewRowAttributeWalkerGenerator.java     |   18 +
 modules/compatibility/pom.xml                      |    2 +-
 .../clients/AbstractClientCompatibilityTest.java   |   25 +-
 .../clients/JavaThinCompatibilityTest.java         |   26 +
 .../persistence/FoldersReuseCompatibilityTest.java |    5 +-
 .../IgnitePKIndexesMigrationToUnwrapPkTest.java    |    2 +
 .../IndexAbstractCompatibilityTest.java            |   92 +
 .../persistence/IndexTypesCompatibilityTest.java   |  334 +++
 .../InlineJavaObjectCompatibilityTest.java         |  320 +++
 .../IgniteCompatibilityBasicTestSuite.java         |    4 +
 modules/compress/pom.xml                           |   11 +-
 .../AbstractPageCompressionIntegrationTest.java    |    2 +-
 .../compress/CompressionConfigurationTest.java     |    4 +-
 .../compress/CompressionProcessorTest.java         |    6 +-
 .../DiskPageCompressionIntegrationTest.java        |   10 +-
 .../WalPageCompressionIntegrationTest.java         |    4 +-
 modules/control-utility/pom.xml                    |   15 +-
 .../internal/commandline/CommandHandler.java       |    3 +-
 .../ignite/internal/commandline/CommandList.java   |    6 +-
 .../cache/CacheIndexesForceRebuild.java            |   11 +-
 .../commandline/cache/CacheValidateIndexes.java    |   13 +-
 .../commandline/cache/CheckIndexInlineSizes.java   |    4 +-
 .../internal/commandline/cache/IdleVerify.java     |   44 +-
 .../PerformanceStatisticsCommand.java              |  107 +
 .../PerformanceStatisticsSubCommand.java           |   80 +
 .../internal/commandline/query/KillCommand.java    |    2 +-
 .../commandline/snapshot/SnapshotCommand.java      |   51 +-
 .../commandline/snapshot/SnapshotSubcommand.java   |   25 +-
 .../commandline/CommandHandlerParsingTest.java     |   95 +-
 .../testsuites/IgniteControlUtilityTestSuite.java  |    6 +-
 .../util/GridCommandHandlerAbstractTest.java       |    7 +-
 ...idCommandHandlerCheckIndexesInlineSizeTest.java |    6 +-
 .../util/GridCommandHandlerClusterByClassTest.java |   39 +-
 .../GridCommandHandlerIndexForceRebuildTest.java   |  326 ++-
 .../GridCommandHandlerIndexRebuildStatusTest.java  |   27 +-
 .../util/GridCommandHandlerIndexingTest.java       |    2 +-
 .../GridCommandHandlerInterruptCommandTest.java    |  326 +++
 .../util/GridCommandHandlerPropertiesTest.java     |   39 +
 .../apache/ignite/util/GridCommandHandlerTest.java |   64 +-
 .../util/PerformanceStatisticsCommandTest.java     |  143 ++
 modules/core/pom.xml                               |   15 +-
 modules/core/src/main/java/META-INF/NOTICE         |    2 +-
 .../java/org/apache/ignite/DataRegionMetrics.java  |   12 +-
 .../apache/ignite/DataRegionMetricsAdapter.java    |   12 +-
 .../java/org/apache/ignite/DataStorageMetrics.java |   26 +-
 .../apache/ignite/DataStorageMetricsAdapter.java   |   12 +-
 .../src/main/java/org/apache/ignite/Ignite.java    |   46 +-
 .../main/java/org/apache/ignite/IgniteCache.java   |   11 +
 .../main/java/org/apache/ignite/IgniteCluster.java |   12 +
 .../main/java/org/apache/ignite/IgniteCompute.java |    4 +
 .../java/org/apache/ignite/IgniteSemaphore.java    |   13 +
 .../src/main/java/org/apache/ignite/IgniteSet.java |    3 +-
 .../java/org/apache/ignite/IgniteSnapshot.java     |   14 +
 .../org/apache/ignite/IgniteSystemProperties.java  |   54 +-
 .../java/org/apache/ignite/IgniteTransactions.java |    2 +
 .../main/java/org/apache/ignite/MemoryMetrics.java |    3 +-
 .../java/org/apache/ignite/PersistenceMetrics.java |    3 +-
 .../ignite/binary/BinaryBasicNameMapper.java       |   24 +
 .../org/apache/ignite/binary/BinaryIdMapper.java   |    2 +-
 .../org/apache/ignite/binary/BinaryObject.java     |    6 +
 .../apache/ignite/binary/BinaryObjectBuilder.java  |    2 +-
 .../java/org/apache/ignite/cache/QueryEntity.java  |    2 +-
 .../ClusterNodeAttributeColocatedBackupFilter.java |  125 +
 .../rendezvous/RendezvousAffinityFunction.java     |   35 +-
 .../sorted/SortedEvictionPolicyFactory.java        |    2 +-
 .../apache/ignite/cache/query/SqlFieldsQuery.java  |   53 +
 .../cache/store/jdbc/CacheJdbcPojoStore.java       |    7 +-
 .../cache/store/jdbc/dialect/BasicJdbcDialect.java |    8 +-
 .../cache/store/jdbc/dialect/DB2Dialect.java       |    7 +-
 .../cache/store/jdbc/dialect/OracleDialect.java    |    7 +-
 .../cache/store/jdbc/dialect/SQLServerDialect.java |    7 +-
 .../java/org/apache/ignite/client/ClientCache.java |  150 +-
 .../ignite/client/ClientCacheConfiguration.java    |   44 +
 .../ignite/client/ClientDisconnectListener.java    |   35 +
 .../ignite/configuration/CacheConfiguration.java   |    4 +-
 .../configuration/DataRegionConfiguration.java     |   36 +-
 .../ignite/configuration/IgniteConfiguration.java  |   37 +
 .../configuration/IgniteReflectionFactory.java     |    4 +-
 .../ignite/configuration/PageReplacementMode.java  |   87 +
 .../events/CacheConsistencyViolationEvent.java     |   11 +-
 .../ignite/events/CacheQueryExecutedEvent.java     |    7 +-
 .../apache/ignite/events/CacheQueryReadEvent.java  |    7 +-
 .../org/apache/ignite/events/CheckpointEvent.java  |    7 +-
 .../org/apache/ignite/events/DeploymentEvent.java  |    7 +-
 .../org/apache/ignite/events/DiscoveryEvent.java   |    7 +-
 .../main/java/org/apache/ignite/events/Event.java  |    4 +-
 .../java/org/apache/ignite/events/EventType.java   |   23 +-
 .../ignite/events/SqlQueryExecutionEvent.java      |    7 +-
 .../java/org/apache/ignite/events/TaskEvent.java   |    7 +-
 .../ignite/internal/GridEventConsumeHandler.java   |    7 +-
 .../ignite/internal/GridJobExecuteRequest.java     |    6 +-
 .../apache/ignite/internal/GridKernalContext.java  |   26 +-
 .../ignite/internal/GridKernalContextImpl.java     |   36 +-
 .../ignite/internal/GridMessageListenHandler.java  |    5 +
 .../org/apache/ignite/internal/IgniteFeatures.java |    5 +-
 .../org/apache/ignite/internal/IgniteKernal.java   |   43 +-
 .../ignite/internal/IgniteNodeAttributes.java      |    3 -
 .../ignite/internal/IgniteSchedulerImpl.java       |    4 +-
 .../org/apache/ignite/internal/IgnitionEx.java     |   39 +-
 .../internal/TransactionMetricsMxBeanImpl.java     |   13 +-
 .../internal/binary/BinaryEnumObjectImpl.java      |   14 +
 .../ignite/internal/binary/BinaryObjectImpl.java   |    5 +
 .../internal/binary/BinaryObjectOffheapImpl.java   |    5 +
 .../ignite/internal/binary/BinaryRawReaderEx.java  |    7 +
 .../ignite/internal/binary/BinaryReaderExImpl.java |    7 +-
 .../apache/ignite/internal/binary/BinaryUtils.java |   32 +-
 .../binary/builder/BinaryBuilderReader.java        |   89 +-
 .../binary/streams/BinaryAbstractOutputStream.java |    6 +-
 .../binary/streams/BinaryHeapOutputStream.java     |    3 +-
 .../binary/streams/BinaryMemoryAllocator.java      |    3 +-
 .../binary/streams/BinaryOffheapOutputStream.java  |    3 +-
 .../internal/cache/query/index/AbstractIndex.java  |   42 +
 .../ignite/internal/cache/query/index/Index.java   |   69 +
 .../cache/query/index/IndexDefinition.java         |   28 +
 .../internal/cache/query/index/IndexFactory.java   |   34 +
 .../internal/cache/query/index/IndexName.java      |   88 +
 .../internal/cache/query/index/IndexProcessor.java |  588 +++++
 .../internal/cache/query/index/NullsOrder.java     |   29 +
 .../ignite/internal/cache/query/index/Order.java   |   45 +
 .../internal/cache/query/index/SingleCursor.java   |   58 +
 .../internal/cache/query/index/SortOrder.java      |   29 +
 .../DurableBackgroundCleanupIndexTreeTask.java     |  351 +++
 .../query/index/sorted/IndexKeyDefinition.java     |   68 +
 .../query/index/sorted/IndexKeyTypeSettings.java   |   81 +
 .../cache/query/index/sorted/IndexKeyTypes.java    |  133 ++
 .../cache/query/index/sorted/IndexRow.java         |   86 +
 .../cache/query/index/sorted/IndexRowCache.java    |  162 ++
 .../query/index/sorted/IndexRowCacheRegistry.java  |  132 ++
 .../query/index/sorted/IndexRowComparator.java     |   46 +
 .../query/index/sorted/IndexRowCompartorImpl.java  |   71 +
 .../cache/query/index/sorted/IndexRowImpl.java     |  176 ++
 .../query/index/sorted/IndexSearchRowImpl.java     |   78 +
 .../cache/query/index/sorted/IndexValueCursor.java |   72 +
 .../query/index/sorted/InlineIndexRowHandler.java  |   69 +
 .../index/sorted/InlineIndexRowHandlerFactory.java |   34 +
 .../cache/query/index/sorted/MetaPageInfo.java     |   96 +
 .../query/index/sorted/SortedIndexDefinition.java  |   62 +
 .../query/index/sorted/SortedSegmentedIndex.java   |  102 +
 .../index/sorted/ThreadLocalRowHandlerHolder.java  |   62 +
 .../sorted/defragmentation/DefragIndexFactory.java |  324 +++
 .../defragmentation/IndexingDefragmentation.java   |  269 +++
 .../index/sorted/inline/IndexQueryContext.java     |   50 +
 .../query/index/sorted/inline/InlineIndex.java     |   41 +
 .../index/sorted/inline/InlineIndexFactory.java    |  102 +
 .../query/index/sorted/inline/InlineIndexImpl.java |  478 ++++
 .../index/sorted/inline/InlineIndexKeyType.java    |   88 +
 .../sorted/inline/InlineIndexKeyTypeRegistry.java  |  188 ++
 .../query/index/sorted/inline/InlineIndexTree.java |  658 ++++++
 .../sorted/inline/InlineObjectBytesDetector.java   |  212 ++
 .../index/sorted/inline/InlineRecommender.java     |  141 ++
 .../sorted/inline/InlineTreeFilterClosure.java     |  142 ++
 .../sorted/inline/JavaObjectKeySerializer.java     |   54 +
 .../sorted/inline/io/AbstractInlineInnerIO.java    |  166 ++
 .../sorted/inline/io/AbstractInlineLeafIO.java     |  166 ++
 .../index/sorted/inline/io/AbstractInnerIO.java    |   81 +
 .../index/sorted/inline/io/AbstractLeafIO.java     |   81 +
 .../query/index/sorted/inline/io/IORowHandler.java |   71 +
 .../query/index/sorted/inline/io/InlineIO.java     |   35 +
 .../index/sorted/inline/io/InlineInnerIO.java      |   31 +
 .../query/index/sorted/inline/io/InlineLeafIO.java |   31 +
 .../query/index/sorted/inline/io/InnerIO.java      |   39 +
 .../cache/query/index/sorted/inline/io/LeafIO.java |   37 +
 .../cache/query/index/sorted/inline/io/MvccIO.java |   56 +
 .../index/sorted/inline/io/MvccInlineInnerIO.java  |   55 +
 .../index/sorted/inline/io/MvccInlineLeafIO.java   |   54 +
 .../query/index/sorted/inline/io/MvccInnerIO.java  |   58 +
 .../query/index/sorted/inline/io/MvccLeafIO.java   |   58 +
 .../inline/types/BooleanInlineIndexKeyType.java    |   59 +
 .../inline/types/ByteInlineIndexKeyType.java       |   59 +
 .../inline/types/BytesInlineIndexKeyType.java      |  154 ++
 .../inline/types/DateInlineIndexKeyType.java       |   69 +
 .../sorted/inline/types/DateValueConstants.java    |   46 +
 .../inline/types/DoubleInlineIndexKeyType.java     |   59 +
 .../inline/types/FloatInlineIndexKeyType.java      |   59 +
 .../inline/types/IntegerInlineIndexKeyType.java    |   61 +
 .../inline/types/LongInlineIndexKeyType.java       |   61 +
 .../inline/types/NullableInlineIndexKeyType.java   |  232 ++
 .../types/ObjectByteArrayInlineIndexKeyType.java   |   69 +
 .../inline/types/ObjectHashInlineIndexKeyType.java |   64 +
 .../inline/types/ShortInlineIndexKeyType.java      |   59 +
 .../types/SignedBytesInlineIndexKeyType.java       |   33 +
 .../inline/types/StringInlineIndexKeyType.java     |  279 +++
 .../types/StringNoCompareInlineIndexKeyType.java   |   55 +
 .../inline/types/TimeInlineIndexKeyType.java       |   61 +
 .../inline/types/TimestampInlineIndexKeyType.java  |   82 +
 .../inline/types/UuidInlineIndexKeyType.java       |   74 +
 .../index/sorted/keys/AbstractDateIndexKey.java    |   37 +
 .../index/sorted/keys/AbstractTimeIndexKey.java    |   36 +
 .../sorted/keys/AbstractTimestampIndexKey.java     |   40 +
 .../query/index/sorted/keys/BooleanIndexKey.java   |   48 +
 .../query/index/sorted/keys/ByteIndexKey.java      |   48 +
 .../query/index/sorted/keys/BytesCompareUtils.java |   59 +
 .../query/index/sorted/keys/BytesIndexKey.java     |   48 +
 .../index/sorted/keys/CacheJavaObjectIndexKey.java |   85 +
 .../query/index/sorted/keys/DecimalIndexKey.java   |   49 +
 .../query/index/sorted/keys/DoubleIndexKey.java    |   48 +
 .../query/index/sorted/keys/FloatIndexKey.java     |   48 +
 .../cache/query/index/sorted/keys/IndexKey.java    |   40 +
 .../query/index/sorted/keys/IndexKeyFactory.java   |   99 +
 .../query/index/sorted/keys/IntegerIndexKey.java   |   48 +
 .../index/sorted/keys/JavaObjectIndexKey.java      |  109 +
 .../query/index/sorted/keys/LongIndexKey.java      |   48 +
 .../query/index/sorted/keys/NullIndexKey.java      |   46 +
 .../index/sorted/keys/PlainJavaObjectIndexKey.java |   64 +
 .../query/index/sorted/keys/ShortIndexKey.java     |   49 +
 .../index/sorted/keys/SignedBytesIndexKey.java     |   33 +
 .../query/index/sorted/keys/StringIndexKey.java    |   49 +
 .../query/index/sorted/keys/UuidIndexKey.java      |   53 +
 .../thin/ClientCacheEntryListenerHandler.java      |  265 +++
 .../thin/ClientCacheEntryListenersRegistry.java    |   61 +
 .../ignite/internal/client/thin/ClientChannel.java |    9 +-
 .../internal/client/thin/ClientComputeImpl.java    |  249 +-
 .../client/thin/ClientContinuousQueryCursor.java   |   61 +
 .../internal/client/thin/ClientJCacheAdapter.java  |  194 ++
 .../thin/ClientJCacheEntryListenerAdapter.java     |   70 +
 .../client/thin/ClientNotificationType.java        |   45 +
 .../internal/client/thin/ClientOperation.java      |   25 +-
 .../client/thin/IgniteClientFutureImpl.java        |   54 +-
 .../internal/client/thin/NotificationListener.java |   12 +-
 .../internal/client/thin/ReliableChannel.java      |   50 +-
 .../internal/client/thin/TcpClientCache.java       |  242 +-
 .../internal/client/thin/TcpClientChannel.java     |  115 +-
 .../internal/client/thin/TcpIgniteClient.java      |   23 +-
 .../ignite/internal/cluster/IgniteClusterImpl.java |    9 +-
 .../stream/v2/DirectByteBufferStreamImplV2.java    |   15 +-
 .../internal/jdbc/thin/JdbcThinConnection.java     |    6 +-
 .../ignite/internal/jdbc2/JdbcCloseCursorTask.java |   46 +
 .../ignite/internal/jdbc2/JdbcConnection.java      |   48 +
 .../jdbc2/JdbcQueryMultipleStatementsTask.java     |   11 +
 .../jdbc2/JdbcQueryMultipleStatementsTaskV3.java   |   72 +
 .../ignite/internal/jdbc2/JdbcResultSet.java       |   20 +-
 .../ignite/internal/jdbc2/JdbcStatement.java       |   29 +-
 .../jdbc2/JdbcStreamedPreparedStatement.java       |    2 +-
 .../internal/managers/GridManagerAdapter.java      |    8 +-
 .../communication/GridIoMessageFactory.java        |    4 -
 .../deployment/GridDeploymentLocalStore.java       |  174 +-
 .../deployment/GridDeploymentPerLoaderStore.java   |    2 +-
 .../managers/discovery/GridDiscoveryManager.java   |  111 +-
 .../managers/encryption/CacheGroupPageScanner.java |  234 +-
 .../encryption/EncryptionCacheKeyProvider.java     |   42 +
 .../managers/encryption/GridEncryptionManager.java |  110 +-
 .../managers/encryption/GroupKeyChangeProcess.java |    4 +-
 .../managers/indexing/IndexesRebuildTask.java      |  170 ++
 .../systemview/walker/AtomicLongViewWalker.java    |   52 +
 .../walker/AtomicReferenceViewWalker.java          |   52 +
 .../walker/AtomicSequenceViewWalker.java           |   54 +
 .../systemview/walker/AtomicStampedViewWalker.java |   54 +
 .../walker/CountDownLatchViewWalker.java           |   56 +
 .../systemview/walker/QueueViewWalker.java         |   61 +
 .../systemview/walker/ReentrantLockViewWalker.java |   60 +
 .../systemview/walker/SemaphoreViewWalker.java     |   60 +
 .../managers/systemview/walker/SetViewWalker.java  |   57 +
 .../systemview/walker/SqlQueryViewWalker.java      |    4 +-
 .../internal/metric/IoStatisticsHolderQuery.java   |    3 +-
 .../ignite/internal/pagemem/PageIdAllocator.java   |    6 -
 .../apache/ignite/internal/pagemem/PageUtils.java  |    2 +-
 .../pagemem/store/IgnitePageStoreManager.java      |    8 +-
 .../internal/pagemem/wal/record/DataEntry.java     |    6 +-
 .../internal/pagemem/wal/record/WALRecord.java     |    6 +-
 .../delta/MetaPageUpdatePartitionDataRecordV2.java |    9 +-
 .../internal/processors/GridProcessorAdapter.java  |    5 +-
 .../affinity/GridAffinityAssignmentCache.java      |    4 +-
 .../processors/affinity/GridAffinityProcessor.java |   29 +-
 .../authentication/AuthorizationContext.java       |   89 -
 .../IgniteAuthenticationProcessor.java             |  527 +++--
 .../cache/CacheAffinitySharedManager.java          |   49 +-
 .../processors/cache/CacheEvictableEntryImpl.java  |    2 +-
 .../processors/cache/CacheGroupContext.java        |    3 +-
 .../processors/cache/CacheGroupMetricsImpl.java    |    3 +-
 .../cache/CacheGroupMetricsMXBeanImpl.java         |   12 +-
 .../internal/processors/cache/CacheLazyEntry.java  |   19 +-
 .../cache/CacheLocalMetricsMXBeanImpl.java         |   14 +-
 .../processors/cache/CacheMetricsImpl.java         |   17 +-
 .../processors/cache/ClusterCachesInfo.java        |   67 +-
 .../cache/DynamicCacheChangeRequest.java           |    2 +-
 .../internal/processors/cache/ExchangeActions.java |   28 +-
 .../cache/GatewayProtectedCacheProxy.java          |   60 +-
 .../processors/cache/GridCacheAdapter.java         |   34 +-
 .../cache/GridCacheDeploymentManager.java          |   25 +-
 .../processors/cache/GridCacheEvictionManager.java |    2 +-
 .../processors/cache/GridCacheIoManager.java       |   38 +-
 .../processors/cache/GridCacheMapEntry.java        |   23 +-
 .../processors/cache/GridCacheMvccManager.java     |    2 +-
 .../cache/GridCachePartitionExchangeManager.java   |   47 +-
 .../processors/cache/GridCachePreloader.java       |    3 +-
 .../cache/GridCachePreloaderAdapter.java           |    2 +-
 .../processors/cache/GridCacheProcessor.java       |  231 +-
 .../processors/cache/GridCacheSharedContext.java   |   12 +-
 .../cache/GridCacheSharedTtlCleanupManager.java    |   23 +-
 .../internal/processors/cache/GridCacheUtils.java  |    3 +
 .../cache/GridDeferredAckMessageSender.java        |    3 +-
 .../processors/cache/IgniteCacheFutureImpl.java    |    8 +-
 .../cache/IgniteCacheOffheapManager.java           |   15 +-
 .../cache/IgniteCacheOffheapManagerImpl.java       |   32 +-
 .../processors/cache/IgniteCacheProxyImpl.java     |   26 +-
 .../cache/IgniteFinishedCacheFutureImpl.java       |    2 +-
 .../cache/PartitionUpdateCounterErrorWrapper.java  |  182 ++
 .../cache/PartitionUpdateCounterTrackingImpl.java  |   31 +-
 .../internal/processors/cache/QueryCursorImpl.java |   81 +-
 .../cache/ValidationOnNodeJoinUtils.java           |    4 +-
 .../internal/processors/cache/WalStateManager.java |   49 +-
 .../cache/binary/BinaryMetadataTransport.java      |    3 +-
 .../binary/CacheObjectBinaryProcessorImpl.java     |   44 +-
 .../datastructures/CacheDataStructuresManager.java |   10 +
 .../distributed/GridCacheTxRecoveryFuture.java     |    5 +-
 .../cache/distributed/dht/GridDhtCacheAdapter.java |    2 +-
 .../dht/GridDhtTxAbstractEnlistFuture.java         |    3 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java    |   74 +-
 .../dht/GridPartitionedSingleGetFuture.java        |    2 +-
 .../distributed/dht/atomic/GridDhtAtomicCache.java |   86 +-
 .../atomic/GridNearAtomicSingleUpdateFuture.java   |    5 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java     |    5 +-
 .../dht/colocated/GridDhtColocatedCache.java       |    6 +-
 .../dht/colocated/GridDhtColocatedLockFuture.java  |    5 +-
 .../dht/colocated/GridDhtDetachedCacheEntry.java   |    8 +-
 .../dht/preloader/FinishPreloadingTask.java        |   21 +-
 .../dht/preloader/GridDhtPartitionDemander.java    |  155 +-
 .../dht/preloader/GridDhtPartitionFullMap.java     |    3 +-
 .../dht/preloader/GridDhtPartitionSupplier.java    |    5 +-
 .../preloader/GridDhtPartitionsExchangeFuture.java |  202 +-
 .../dht/preloader/GridDhtPreloader.java            |    8 +-
 .../dht/preloader/latch/ExchangeLatchManager.java  |    3 +-
 .../dht/topology/GridClientPartitionTopology.java  |    2 +-
 .../dht/topology/GridDhtLocalPartition.java        |    2 +-
 .../dht/topology/GridDhtPartitionTopologyImpl.java |   12 +-
 .../dht/topology/GridDhtPartitionsReservation.java |   18 +-
 .../topology/GridDhtPartitionsStateValidator.java  |  125 +-
 .../distributed/near/GridNearAtomicCache.java      |    3 +-
 .../cache/distributed/near/GridNearGetFuture.java  |    2 +-
 .../cache/distributed/near/GridNearLockFuture.java |    2 +-
 ...dNearOptimisticSerializableTxPrepareFuture.java |   18 +-
 .../near/GridNearOptimisticTxPrepareFuture.java    |    5 +-
 .../distributed/near/GridNearTxFinishFuture.java   |    2 +-
 .../cache/distributed/near/GridNearTxLocal.java    |   73 +-
 .../near/GridNearTxPrepareResponse.java            |    2 +-
 .../processors/cache/local/GridLocalCache.java     |    6 +-
 .../cache/local/atomic/GridLocalAtomicCache.java   |    9 +-
 .../processors/cache/mvcc/MvccProcessorImpl.java   |    6 +-
 .../internal/processors/cache/mvcc/MvccUtils.java  |    4 +-
 .../msg/PartitionCountersNeighborcastRequest.java  |  173 --
 .../msg/PartitionCountersNeighborcastResponse.java |  141 --
 .../internal/processors/cache/package-info.java    |    5 +-
 .../cache/persistence/CacheDataRowAdapter.java     |   77 +-
 .../cache/persistence/DataRegionMetricsImpl.java   |   10 +
 .../persistence/DataRegionMetricsMXBeanImpl.java   |   12 +-
 .../cache/persistence/DataStorageMetricsImpl.java  |  198 +-
 .../persistence/DataStorageMetricsSnapshot.java    |   30 +-
 .../GridCacheDatabaseSharedManager.java            |  166 +-
 .../cache/persistence/GridCacheOffheapManager.java |  260 +-
 .../IgniteCacheDatabaseSharedManager.java          |   59 +-
 .../processors/cache/persistence/IndexStorage.java |   12 +
 .../cache/persistence/IndexStorageImpl.java        |   13 +
 .../cache/persistence/RecoveryDebug.java           |    2 +-
 .../persistence/checkpoint/CheckpointEntry.java    |   17 +-
 .../persistence/checkpoint/CheckpointHistory.java  |   29 +-
 .../persistence/checkpoint/CheckpointManager.java  |   17 +-
 .../checkpoint/CheckpointPagesWriter.java          |    3 +-
 .../persistence/checkpoint/CheckpointWorkflow.java |    7 +-
 .../cache/persistence/checkpoint/Checkpointer.java |  114 +-
 .../checkpoint/LightweightCheckpointManager.java   |    9 +-
 .../checkpoint/PartitionDestroyQueue.java          |   18 +-
 .../CachePartitionDefragmentationManager.java      |   24 +-
 .../cache/persistence/defragmentation/LinkMap.java |   16 +-
 .../cache/persistence/file/EncryptedFileIO.java    |   98 +-
 .../cache/persistence/file/EncryptionUtil.java     |  159 ++
 .../cache/persistence/file/FilePageStore.java      |   48 +-
 .../persistence/file/FilePageStoreFactory.java     |   56 -
 .../persistence/file/FilePageStoreManager.java     |  149 +-
 .../cache/persistence/file/FilePageStoreV2.java    |   14 +-
 .../file/FileVersionCheckingFactory.java           |   67 +-
 .../cache/persistence/freelist/PagesList.java      |   41 +-
 .../cache/persistence/metastorage/MetaStorage.java |   29 +-
 .../metastorage/MetastorageRowStoreEntry.java      |    3 +-
 .../pendingtask/DurableBackgroundTask.java         |   37 +-
 .../pendingtask/DurableBackgroundTaskResult.java   |  107 +
 .../processors/cache/persistence/package-info.java |    5 +-
 .../pagemem/ClockPageReplacementFlags.java         |  154 ++
 .../pagemem/ClockPageReplacementPolicy.java        |   96 +
 .../pagemem/ClockPageReplacementPolicyFactory.java |   33 +
 .../cache/persistence/pagemem/PageMemoryImpl.java  |  545 ++---
 .../cache/persistence/pagemem/PagePool.java        |    8 +
 .../pagemem/PageReadWriteManagerImpl.java          |    8 +-
 .../persistence/pagemem/PageReplacementPolicy.java |   69 +
 .../pagemem/PageReplacementPolicyFactory.java      |   39 +
 .../pagemem/RandomLruPageReplacementPolicy.java    |  247 ++
 .../RandomLruPageReplacementPolicyFactory.java     |   33 +
 .../persistence/pagemem/SegmentedLruPageList.java  |  364 +++
 .../pagemem/SegmentedLruPageReplacementPolicy.java |  102 +
 .../SegmentedLruPageReplacementPolicyFactory.java  |   33 +
 .../cache/persistence/pagemem/package-info.java    |    5 +-
 .../snapshot/IgniteCacheSnapshotManager.java       |    3 +-
 .../snapshot/IgniteSnapshotManager.java            |  796 ++++++-
 .../snapshot/IgniteSnapshotVerifyException.java    |   48 +
 .../persistence/snapshot/SnapshotFutureTask.java   |  215 +-
 .../persistence/snapshot/SnapshotMetadata.java     |  199 ++
 .../snapshot/SnapshotMetadataCollectorTask.java    |  111 +
 .../snapshot/SnapshotOperationRequest.java         |  130 +
 .../snapshot/SnapshotPartitionsVerifyTask.java     |  327 +++
 .../snapshot/SnapshotRestoreProcess.java           |  935 ++++++++
 .../cache/persistence/tree/BPlusTree.java          |    9 +-
 .../persistence/tree/io/AbstractDataPageIO.java    |  129 +-
 .../cache/persistence/tree/io/BPlusMetaIO.java     |   31 +-
 .../cache/persistence/tree/io/PageIO.java          |    3 +-
 .../persistence/tree/io/PagePartitionMetaIO.java   |   38 +
 .../persistence/tree/io/PagePartitionMetaIOV2.java |   23 +-
 .../persistence/tree/io/PagePartitionMetaIOV3.java |   16 +-
 .../cache/persistence/tree/util/PageHandler.java   |   16 +-
 .../persistence/wal/FileWriteAheadLogManager.java  |  443 +++-
 .../cache/persistence/wal/SegmentRouter.java       |    8 +-
 .../wal/filehandle/FileHandleManagerImpl.java      |   10 +-
 .../wal/reader/StandaloneGridKernalContext.java    |   20 +-
 .../wal/reader/StandaloneWalRecordsIterator.java   |    8 +-
 .../wal/serializer/RecordDataV1Serializer.java     |    4 +-
 .../wal/serializer/RecordV1Serializer.java         |    8 +-
 .../processors/cache/query/CacheQueryEntry.java    |    2 +-
 .../query/GridCacheDistributedQueryFuture.java     |    6 +-
 .../query/GridCacheDistributedQueryManager.java    |    6 +-
 .../cache/query/GridCacheQueryManager.java         |   84 +-
 .../processors/cache/query/GridCacheSqlQuery.java  |   25 +-
 .../continuous/CacheContinuousQueryHandler.java    |   44 +-
 .../continuous/CacheContinuousQueryHandlerV3.java  |    7 +-
 .../continuous/CacheContinuousQueryManager.java    |    8 +-
 .../cache/query/jdbc/GridCacheQueryJdbcTask.java   |    6 +-
 .../cache/store/GridCacheWriteBehindStore.java     |   10 +-
 .../cache/transactions/IgniteTxAdapter.java        |   17 +-
 .../cache/transactions/IgniteTxEntry.java          |   16 +-
 .../cache/transactions/IgniteTxHandler.java        |   64 +-
 .../cache/transactions/IgniteTxLocalAdapter.java   |   11 +-
 .../cache/transactions/IgniteTxManager.java        |  133 +-
 .../PartitionCountersNeighborcastFuture.java       |  236 --
 .../cache/transactions/TxEntryValueHolder.java     |    5 +-
 .../processors/cache/tree/AbstractDataLeafIO.java  |    2 +-
 .../processors/cache/tree/CacheDataRowStore.java   |   10 +-
 .../processors/cache/tree/CacheDataTree.java       |    2 +-
 .../internal/processors/cache/tree/DataRow.java    |    7 +
 .../cache/tree/mvcc/data/MvccDataRow.java          |    2 +-
 .../cache/tree/mvcc/data/MvccUpdateDataRow.java    |    6 +-
 .../cache/verify/IdleVerifyResultV2.java           |  102 +-
 .../processors/cache/verify/IdleVerifyUtility.java |  114 +-
 .../cache/verify/PartitionHashRecordV2.java        |   10 +-
 .../verify/VerifyBackupPartitionsDumpTask.java     |    8 +-
 .../cache/verify/VerifyBackupPartitionsTask.java   |    2 +-
 .../cache/verify/VerifyBackupPartitionsTaskV2.java |  190 +-
 .../cacheobject/IgniteCacheObjectProcessor.java    |   10 +
 .../processors/closure/GridClosureProcessor.java   |    6 +-
 .../cluster/ClusterMetricsUpdateMessage.java       |    6 +-
 .../processors/cluster/ClusterProcessor.java       |   12 +-
 .../cluster/GridClusterStateProcessor.java         |   37 +-
 .../autoadjust/BaselineAutoAdjustData.java         |   11 +-
 .../autoadjust/BaselineAutoAdjustScheduler.java    |   50 +-
 .../autoadjust/BaselineTopologyUpdater.java        |  162 ++
 .../baseline/autoadjust/ChangeTopologyWatcher.java |  164 --
 .../continuous/GridContinuousProcessor.java        |   85 +-
 .../datastreamer/DataStreamProcessor.java          |    3 +-
 .../processors/datastreamer/DataStreamerImpl.java  |   48 +-
 .../datastreamer/DataStreamerRequest.java          |    6 +-
 .../datastructures/AtomicDataStructureProxy.java   |    4 +-
 .../datastructures/DataStructuresProcessor.java    |  201 +-
 .../GridCacheAtomicReferenceImpl.java              |    4 +-
 .../datastructures/GridCacheLockImpl.java          |    2 +-
 .../datastructures/GridCacheQueueProxy.java        |   10 +
 .../datastructures/GridCacheSemaphoreImpl.java     |   35 +
 .../datastructures/GridCacheSemaphoreState.java    |    4 +-
 .../datastructures/GridCacheSetProxy.java          |   10 +
 .../processors/diagnostic/DiagnosticProcessor.java |  222 +-
 .../diagnostic/PageHistoryDiagnoster.java          |  350 ---
 .../processors/failure/FailureProcessor.java       |    2 +-
 .../internal/processors/job/GridJobProcessor.java  |   15 +-
 .../internal/processors/job/GridJobWorker.java     |    5 +
 .../processors/jobmetrics/GridJobMetrics.java      |   12 +-
 .../jobmetrics/GridJobMetricsProcessor.java        |   12 +-
 .../jobmetrics/GridJobMetricsSnapshot.java         |   12 +-
 .../localtask/DurableBackgroundTaskState.java      |  147 ++
 .../localtask/DurableBackgroundTasksProcessor.java |  439 ++--
 .../marshaller/GridMarshallerMappingProcessor.java |    3 +-
 .../marshaller/MarshallerMappingTransport.java     |    5 +-
 .../persistence/DistributedMetaStorageImpl.java    |  151 +-
 .../persistence/DmsDataWriterWorker.java           |  233 +-
 .../metastorage/persistence/DmsWorkerStatus.java   |   30 -
 .../processors/metric/GridMetricManager.java       |   10 +-
 .../internal/processors/metric/MetricRegistry.java |    8 +-
 .../ClientListenerAbstractConnectionContext.java   |   80 +-
 .../odbc/ClientListenerConnectionContext.java      |    8 -
 .../processors/odbc/ClientListenerNioListener.java |   22 +-
 .../processors/odbc/ClientListenerProcessor.java   |   14 +-
 .../internal/processors/odbc/SqlListenerUtils.java |    2 +-
 .../odbc/jdbc/JdbcConnectionContext.java           |   13 +-
 .../processors/odbc/jdbc/JdbcRequestHandler.java   |   16 +-
 .../processors/odbc/odbc/OdbcColumnMeta.java       |   39 +-
 .../odbc/odbc/OdbcConnectionContext.java           |   18 +-
 .../processors/odbc/odbc/OdbcMessageParser.java    |    4 +-
 .../processors/odbc/odbc/OdbcRequestHandler.java   |   30 +-
 .../processors/odbc/odbc/OdbcResultSet.java        |    2 +-
 .../internal/processors/odbc/odbc/OdbcUtils.java   |    7 +-
 .../processors/offheap/GridOffHeapProcessor.java   |    7 +-
 .../ignite/internal/processors/package-info.java   |    4 +-
 .../FilePerformanceStatisticsReader.java           |   57 +
 .../FilePerformanceStatisticsWriter.java           |   78 +-
 .../performancestatistics/OperationType.java       |   18 +-
 .../PerformanceStatisticsHandler.java              |   44 +
 .../PerformanceStatisticsMBeanImpl.java            |    5 +
 .../PerformanceStatisticsProcessor.java            |  168 +-
 .../processors/platform/PlatformProcessorImpl.java |    6 +-
 .../platform/binary/PlatformBinaryProcessor.java   |    3 +-
 .../platform/client/ClientBitmaskFeature.java      |    7 +-
 .../platform/client/ClientConnectionContext.java   |   17 +-
 .../platform/client/ClientMessageParser.java       |    7 +
 .../platform/client/ClientRequestHandler.java      |    8 +-
 .../ClientBinaryConfigurationGetRequest.java       |   76 +
 .../ClientBinaryConfigurationGetResponse.java      |   54 +
 .../cache/ClientCacheSqlFieldsQueryRequest.java    |    4 +-
 .../platform/cluster/PlatformClusterGroup.java     |    2 +-
 .../platform/services/PlatformServices.java        |   26 +-
 .../transactions/PlatformTransactions.java         |    6 +-
 .../platform/utils/PlatformConfigurationUtils.java |   40 +
 .../processors/platform/utils/PlatformUtils.java   |    3 +
 .../internal/processors/query/GridIndex.java       |    6 +-
 .../processors/query/GridQueryFieldMetadata.java   |    9 +
 .../processors/query/GridQueryIndexing.java        |   78 +-
 .../processors/query/GridQueryProcessor.java       |  243 +-
 .../processors/query/GridQueryRowCacheCleaner.java |    2 +-
 .../processors/query/GridRunningQueryInfo.java     |   15 +-
 .../processors/query/IndexRebuildAware.java        |  145 ++
 .../internal/processors/query/NoOpQueryEngine.java |    3 +-
 .../internal/processors/query/QueryEntityEx.java   |   26 +-
 .../processors/query/QueryTypeDescriptorImpl.java  |    4 +-
 .../internal/processors/query/QueryUtils.java      |   61 +-
 .../processors/query/RunningQueryManager.java      |   16 +-
 .../schema/SchemaIndexCacheCompoundFuture.java     |   49 +
 .../query/schema/SchemaIndexCacheFuture.java       |   46 +
 .../schema/SchemaIndexCachePartitionWorker.java    |   20 +-
 .../query/schema/SchemaIndexCacheVisitorImpl.java  |    7 +-
 .../SchemaIndexOperationCancellationException.java |   36 +
 .../processors/rest/GridRestProcessor.java         |   66 +-
 .../handlers/cache/GridCacheCommandHandler.java    |   67 +-
 .../DataStructuresCommandHandler.java              |    6 +-
 .../handlers/probe/GridProbeCommandHandler.java    |    6 +-
 .../rest/handlers/query/QueryCommandHandler.java   |    8 +-
 .../handlers/user/UserActionCommandHandler.java    |   13 +-
 .../rest/protocols/tcp/GridTcpRestNioListener.java |  104 +-
 .../processors/rest/request/GridRestRequest.java   |   16 +-
 .../processors/security/GridSecurityProcessor.java |   32 +
 .../processors/security/IgniteSecurity.java        |   26 +
 .../security/IgniteSecurityProcessor.java          |   20 +
 .../security/NoOpIgniteSecurityProcessor.java      |   22 +-
 .../processors/security/SecurityUtils.java         |    2 +-
 .../processors/service/GridServiceProcessor.java   |    3 +-
 .../processors/service/GridServiceProxy.java       |   14 +-
 .../processors/service/ServiceDeploymentTask.java  |    3 +-
 .../GridInternalSubscriptionProcessor.java         |    3 +-
 .../internal/processors/task/GridTaskWorker.java   |    5 +-
 .../internal/processors/tracing/SpanTags.java      |    9 +
 .../processors/tracing/TraceableIterator.java      |   11 +-
 .../GridTracingConfigurationManager.java           |    8 +-
 .../apache/ignite/internal/sql/SqlParserUtils.java |    2 +-
 .../suggestions/JvmConfigurationSuggestions.java   |    6 -
 .../suggestions/OsConfigurationSuggestions.java    |   38 +-
 .../apache/ignite/internal/util/GridCleaner.java   |    2 +-
 .../org/apache/ignite/internal/util/GridDebug.java |    4 +-
 .../ignite/internal/util/GridJavaProcess.java      |    9 +-
 .../apache/ignite/internal/util/GridLeanSet.java   |    2 +-
 .../ignite/internal/util/GridMutableLong.java      |   64 +
 .../apache/ignite/internal/util/GridUnsafe.java    |    7 +-
 .../ignite/internal/util/HostAndPortRange.java     |  133 +-
 .../apache/ignite/internal/util/IgniteUtils.java   |   82 +-
 .../ignite/internal/util/collection/IntMap.java    |   30 +
 .../util/distributed/DistributedProcess.java       |   24 +-
 .../internal/util/future/IgniteFutureImpl.java     |   24 +-
 .../util/ipc/loopback/IpcServerTcpEndpoint.java    |    2 +-
 .../ipc/shmem/IpcSharedMemoryServerEndpoint.java   |    2 +-
 .../apache/ignite/internal/util/lang/GridFunc.java |   10 +
 .../ignite/internal/util/nio/GridNioServer.java    |   11 +
 .../internal/util/nio/GridNioSessionImpl.java      |    2 +-
 .../internal/util/nio/ssl/GridNioSslHandler.java   |   12 +
 .../util/offheap/unsafe/GridUnsafeMap.java         |    2 +-
 .../util/tostring/CircularStringBuilder.java       |    2 +-
 .../util/tostring/GridToStringBuilder.java         |    7 +-
 .../apache/ignite/internal/util/typedef/CIX1.java  |    7 +-
 .../apache/ignite/internal/util/typedef/CIX2.java  |    7 +-
 .../apache/ignite/internal/util/typedef/COX.java   |    7 +-
 .../apache/ignite/internal/util/typedef/CX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/CX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/PX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/PX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/R2.java    |    7 +-
 .../apache/ignite/internal/util/typedef/R3.java    |    7 +-
 .../apache/ignite/internal/util/typedef/RX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/RX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/RX3.java   |    7 +-
 .../ignite/internal/util/worker/CycleThread.java   |    2 +-
 .../ignite/internal/util/worker/GridWorker.java    |    4 +-
 .../visor/annotation/InterruptibleVisorTask.java   |   32 +
 ...VisorFindAndDeleteGarbageInPersistenceTask.java |   17 +-
 .../visor/cache/index/IndexForceRebuildTask.java   |  135 +-
 .../visor/cache/index/IndexRebuildStatusTask.java  |    7 +-
 .../diagnostic/VisorPageLocksTrackerArgs.java      |    2 +-
 .../node/VisorCacheRebalanceCollectorTask.java     |    3 +-
 .../VisorPerformanceStatisticsOperation.java       |   48 +
 .../VisorPerformanceStatisticsTask.java            |   93 +
 .../VisorPerformanceStatisticsTaskArg.java         |   64 +
 .../internal/visor/query/VisorQueryUtils.java      |    5 +-
 .../query/VisorRunningQueriesCollectorTask.java    |    4 +-
 .../visor/snapshot/VisorSnapshotCheckTask.java     |   60 +
 .../VisorTracingConfigurationTask.java             |    3 +-
 .../ignite/internal/visor/util/VisorMimeTypes.java |    9 +-
 .../internal/visor/verify/VisorIdleVerifyJob.java  |   13 +
 .../java/org/apache/ignite/lang/IgniteBiTuple.java |    2 +-
 .../java/org/apache/ignite/lang/IgniteFuture.java  |   10 +-
 .../org/apache/ignite/lang/IgniteProducer.java     |   34 +
 .../ignite/mxbean/CacheGroupMetricsMXBean.java     |   10 +-
 .../apache/ignite/mxbean/CacheMetricsMXBean.java   |   70 +-
 .../ignite/mxbean/DataRegionMetricsMXBean.java     |   34 +-
 .../ignite/mxbean/DataStorageMetricsMXBean.java    |   20 +-
 .../ignite/mxbean/DefragmentationMXBean.java       |    4 +-
 .../org/apache/ignite/mxbean/IgniteMXBean.java     |   74 +-
 .../ignite/mxbean/PerformanceStatisticsMBean.java  |    8 +-
 .../org/apache/ignite/mxbean/ThreadPoolMXBean.java |   20 +-
 .../ignite/mxbean/TransactionMetricsMxBean.java    |   12 +-
 .../plugin/security/AuthenticationContext.java     |   21 -
 .../ignite/plugin/security/SecurityPermission.java |    2 +-
 .../org/apache/ignite/spi/IgniteSpiContext.java    |    9 +-
 .../ignite/spi/checkpoint/CheckpointSpi.java       |    8 +-
 .../checkpoint/sharedfs/SharedFsCheckpointSpi.java |    2 +-
 .../jobstealing/JobStealingCollisionSpi.java       |    4 +-
 .../priorityqueue/PriorityQueueCollisionSpi.java   |    2 +-
 .../spi/communication/tcp/TcpCommunicationSpi.java |   29 +-
 .../tcp/internal/CommunicationTcpUtils.java        |   40 +-
 .../tcp/internal/CommunicationWorker.java          |    4 +-
 .../tcp/internal/ConnectionClientPool.java         |   93 +-
 .../tcp/internal/GridNioServerWrapper.java         |  328 +--
 .../tcp/internal/HandshakeTimeoutObject.java       |   55 +-
 .../tcp/internal/InboundConnectionHandler.java     |    2 +-
 .../TcpCommunicationConfigInitializer.java         |    3 +-
 .../TcpCommunicationConnectionCheckFuture.java     |    3 +-
 .../tcp/internal/TcpHandshakeExecutor.java         |  284 +++
 .../spi/deployment/local/LocalDeploymentSpi.java   |  100 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java       |   19 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java       |  116 +-
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java  |   69 +-
 .../spi/discovery/tcp/TcpDiscoverySpiMBean.java    |   15 +-
 .../tcp/internal/TcpDiscoveryStatistics.java       |   12 +-
 .../multicast/TcpDiscoveryMulticastIpFinder.java   |    4 +-
 .../tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.java    |  104 +-
 .../ignite/spi/encryption/EncryptionSpi.java       |   37 +-
 .../encryption/keystore/KeystoreEncryptionSpi.java |   94 +-
 .../spi/encryption/noop/NoopEncryptionSpi.java     |   15 +
 .../apache/ignite/spi/failover/FailoverSpi.java    |    3 +-
 .../jobstealing/JobStealingFailoverSpi.java        |    6 +-
 .../spi/indexing/IndexingQueryFilterImpl.java      |   34 +-
 .../apache/ignite/spi/indexing/IndexingSpi.java    |    2 +-
 .../ignite/spi/indexing/noop/NoopIndexingSpi.java  |    2 +-
 .../ignite/spi/metric/MetricExporterSpi.java       |   11 +-
 .../ignite/spi/metric/ReadOnlyMetricRegistry.java  |   32 +
 .../spi/metric/jmx/JmxMetricExporterSpi.java       |   55 +-
 .../spi/systemview/view/ClientConnectionView.java  |   10 +-
 .../spi/systemview/view/ContinuousQueryView.java   |   11 +-
 .../ignite/spi/systemview/view/SqlQueryView.java   |    6 +
 .../datastructures/AbstractDataStructureView.java  |   58 +
 .../view/datastructures/AtomicLongView.java        |   48 +
 .../view/datastructures/AtomicReferenceView.java   |   50 +
 .../view/datastructures/AtomicSequenceView.java    |   57 +
 .../view/datastructures/AtomicStampedView.java     |   59 +
 .../view/datastructures/CountDownLatchView.java    |   64 +
 .../systemview/view/datastructures/QueueView.java  |   89 +
 .../view/datastructures/ReentrantLockView.java     |   83 +
 .../view/datastructures/SemaphoreView.java         |   83 +
 .../systemview/view/datastructures/SetView.java    |   78 +
 .../apache/ignite/stream/StreamTransformer.java    |    2 +-
 .../java/org/jsr166/ConcurrentLinkedHashMap.java   |    8 +-
 .../main/resources/META-INF/classnames.properties  |    2 +
 modules/core/src/main/resources/ignite.properties  |    2 +-
 .../src/test/config/class_list_test_excluded.txt   |   17 +
 .../test/java/org/apache/ignite/GridTestJob.java   |    2 +-
 ...finityFunctionBackupFilterAbstractSelfTest.java |   24 +-
 ...tyFunctionExcludeNeighborsAbstractSelfTest.java |    2 +-
 ...NodeAttributeColocatedBackupFilterSelfTest.java |  250 ++
 ...usAffinityFunctionExcludeNeighborsSelfTest.java |   64 +-
 .../RendezvousAffinityFunctionSimpleBenchmark.java |    3 +
 ...nerRWThroughDisabledTransactionalCacheTest.java |    3 +-
 ...CacheStoreSessionListenerLifecycleSelfTest.java |    5 +-
 .../store/StoreResourceInjectionSelfTest.java      |    4 +-
 ...hallerStoreKeepBinaryWithSqlEscapeSelfTest.java |    3 +-
 .../cache/store/jdbc/CacheJdbcPojoStoreTest.java   |    6 +-
 ...JdbcPojoWriteBehindStoreWithCoalescingTest.java |   12 +-
 .../jdbc/JdbcTypesDefaultTransformerTest.java      |    7 +-
 .../store/jdbc/dialect/OracleDialectTest.java      |   49 +
 .../TestJdbcPojoStoreFactoryWithHangWriteAll.java  |    9 +-
 .../org/apache/ignite/client/ConnectionTest.java   |   31 +-
 .../org/apache/ignite/client/FunctionalTest.java   |   93 +-
 .../apache/ignite/client/LocalIgniteCluster.java   |   14 +-
 .../apache/ignite/client/PersonBinarylizable.java  |   31 +-
 .../org/apache/ignite/client/ReliabilityTest.java  |   14 -
 .../failure/FailureHandlerTriggeredTest.java       |    2 +-
 .../internal/ClusterNodeMetricsSelfTest.java       |    5 +-
 ...dCachePartitionExchangeManagerWarningsTest.java |  216 +-
 .../internal/GridContinuousTaskSelfTest.java       |    6 +-
 .../internal/GridJobMasterLeaveAwareSelfTest.java  |    3 +-
 .../GridMultipleVersionsDeploymentSelfTest.java    |    2 +-
 .../GridMultithreadedJobStealingSelfTest.java      |   12 +-
 .../internal/GridNodeMetricsLogPdsSelfTest.java    |   11 +-
 .../internal/GridNodeMetricsLogSelfTest.java       |   18 +-
 .../ignite/internal/GridSpiExceptionSelfTest.java  |    3 +-
 .../internal/GridStopWithCollisionSpiTest.java     |   66 +
 ...ientCheckClusterGroupLocalIdAfterReconnect.java |  142 ++
 .../ignite/internal/IgniteClientFailuresTest.java  |  100 +-
 .../IgniteExplicitImplicitDeploymentSelfTest.java  |  178 +-
 .../RaceOnDeployClassesWithSameAliases.java        |  147 --
 .../binary/BinaryBasicNameMapperSelfTest.java      |   21 +
 .../binary/BinaryClassLoaderMultiJvmTest.java      |    3 +-
 .../internal/binary/BinaryClassLoaderTest.java     |    3 +-
 .../internal/binary/BinaryEnumsSelfTest.java       |    1 +
 .../BinaryFooterOffsetsAbstractSelfTest.java       |    2 +
 .../internal/binary/BinaryMarshallerSelfTest.java  |  182 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java     |   11 +-
 .../BinaryObjectBuilderDefaultMappersSelfTest.java |    3 +-
 .../AbstractBinaryStreamByteOrderSelfTest.java     |    5 +
 .../streams/BinaryAbstractOutputStreamTest.java    |    9 +
 .../inline/InlineIndexKeyTypeRegistryTest.java     |   97 +
 .../client/thin/AbstractThinClientTest.java        |   22 +
 .../internal/client/thin/CacheAsyncTest.java       |   28 +-
 .../client/thin/CacheEntryListenersTest.java       |  774 ++++++
 .../internal/client/thin/ComputeTaskTest.java      |   29 +-
 .../internal/client/thin/ReliableChannelTest.java  |   10 +-
 .../ignite/internal/client/thin/ServicesTest.java  |   29 +-
 ...ClientPartitionAwarenessStableTopologyTest.java |   12 +
 .../internal/cluster/IgniteClusterIdTagTest.java   |    2 +-
 ...ectByteBufferStreamImplV2ByteOrderSelfTest.java |   63 +-
 .../encryption/AbstractEncryptionTest.java         |   10 +-
 .../encryption/CacheGroupKeyChangeTest.java        |    2 +-
 .../encryption/CacheGroupReencryptionTest.java     |   17 +-
 .../encryption/EncryptedCacheBigEntryTest.java     |    4 +-
 .../encryption/EncryptedCacheCreateTest.java       |    2 +-
 .../encryption/EncryptedCacheDestroyTest.java      |    2 +-
 .../encryption/EncryptedCacheGroupCreateTest.java  |    4 +-
 .../encryption/EncryptedCacheRestartTest.java      |    4 +-
 .../internal/encryption/EncryptionMXBeanTest.java  |    4 +-
 ...GridManagerMxBeanIllegalArgumentHandleTest.java |    4 +-
 .../managers/IgniteDiagnosticMessagesTest.java     |    5 +-
 .../IgniteCommunicationBalanceTest.java            |    3 +-
 .../GridDeploymentManagerStopSelfTest.java         |    4 +-
 .../GridDifferentLocalDeploymentSelfTest.java      |  162 ++
 .../P2PCacheOperationIntoComputeTest.java          |    5 +-
 .../IgniteTopologyPrintFormatSelfTest.java         |  212 +-
 .../optimized/OptimizedMarshallerTest.java         |   12 +-
 .../ignite/internal/metric/MetricsSelfTest.java    |   14 +-
 .../ignite/internal/metric/SystemMetricsTest.java  |   66 +
 .../ignite/internal/metric/SystemViewSelfTest.java |  677 ++++++
 .../wal/record/WALRecordSerializationTest.java     |    3 +-
 .../Authentication1kUsersNodeRestartTest.java      |   38 +-
 .../AuthenticationConfigurationClusterTest.java    |   80 +-
 .../AuthenticationOnNotActiveClusterTest.java      |   22 +-
 .../AuthenticationProcessorNodeRestartTest.java    |   58 +-
 .../AuthenticationProcessorSelfTest.java           |  324 +--
 .../cache/CacheAsyncContinuationExecutorTest.java  |  254 ++
 ...heAsyncContinuationSynchronousExecutorTest.java |   42 +
 .../cache/CacheEntryProcessorCopySelfTest.java     |    4 +
 .../cache/CacheGroupsMetricsRebalanceTest.java     |   52 +-
 ...InterceptorPartitionCounterLocalSanityTest.java |   12 +-
 .../processors/cache/CacheMetricsManageTest.java   |    6 +-
 .../processors/cache/CacheRebalancingSelfTest.java |    2 +-
 .../cache/CacheSerializableTransactionsTest.java   |   15 +-
 .../cache/CacheStopAndDestroySelfTest.java         |   20 +-
 .../ClientFastReplyCoordinatorFailureTest.java     |  100 +
 .../processors/cache/ClusterStateTestUtils.java    |    5 +-
 .../cache/GridCacheAffinityRoutingSelfTest.java    |    3 +
 .../GridCacheAsyncOperationsLimitSelfTest.java     |    4 +-
 .../GridCacheConfigurationConsistencySelfTest.java |    3 +-
 .../cache/GridCacheEntryMemorySizeSelfTest.java    |    3 +
 .../cache/GridCacheEntryVersionSelfTest.java       |    2 +-
 .../processors/cache/GridCacheMvccSelfTest.java    |    3 +
 .../cache/GridCacheNestedTxAbstractTest.java       |    2 +-
 .../cache/GridCacheOffheapUpdateSelfTest.java      |    2 +-
 .../cache/GridCacheOnCopyFlagAtomicSelfTest.java   |    2 +
 .../cache/GridCacheOnCopyFlagLocalSelfTest.java    |    2 +
 .../GridCacheOnCopyFlagReplicatedSelfTest.java     |    2 +
 .../GridCacheOnCopyFlagTxPartitionedSelfTest.java  |    2 +
 .../cache/GridCacheP2PUndeploySelfTest.java        |    2 +
 .../cache/GridCachePartitionedWritesTest.java      |    4 +-
 .../cache/GridCacheReferenceCleanupSelfTest.java   |    7 +
 .../cache/GridCacheTtlManagerEvictionSelfTest.java |    2 +
 .../cache/GridCacheTtlManagerLoadTest.java         |    2 +-
 .../IgniteAbstractDynamicCacheStartFailTest.java   |    6 +-
 .../IgniteCacheClusterReadOnlyModeSelfTest.java    |   10 +-
 .../processors/cache/IgniteCacheGroupsTest.java    |    2 +-
 .../cache/IgniteCacheInterceptorSelfTestSuite.java |    9 +-
 .../cache/IgniteClientCacheStartFailoverTest.java  |    8 +-
 .../cache/IgniteDynamicCacheStartSelfTest.java     |    8 +-
 .../cache/IgniteOutOfMemoryPropagationTest.java    |    3 +
 .../RebalanceIteratorLargeEntriesOOMTest.java      |  137 ++
 .../cache/RestorePartitionStateTest.java           |  220 ++
 .../SetTxTimeoutOnPartitionMapExchangeTest.java    |    2 +-
 ...aryObjectsAtomicNearDisabledOnheapSelfTest.java |    6 +
 ...GridCacheBinaryObjectsAtomicOnheapSelfTest.java |    6 +
 ...jectsPartitionedNearDisabledOnheapSelfTest.java |    6 +
 ...acheBinaryObjectsPartitionedOnheapSelfTest.java |    6 +
 .../GridCacheBinaryObjectsLocalOnheapSelfTest.java |    6 +
 ...acheAbstractDataStructuresFailoverSelfTest.java |    2 +-
 .../GridCacheAtomicStampedApiSelfAbstractTest.java |    2 +-
 .../GridCacheQueueClientDisconnectTest.java        |    2 +-
 .../IgniteAtomicStampedClusterReadOnlyTest.java    |    2 +-
 .../IgniteDataStructuresNoClassOnServerTest.java   |    2 +
 ...iteExchangeLatchManagerCoordinatorFailTest.java |    4 +-
 .../datastructures/IgniteLockAbstractSelfTest.java |    2 +-
 .../IgniteSemaphoreAbstractSelfTest.java           |  101 +-
 .../SemaphoreFailoverNoWaitingAcquirerTest.java    |    2 +-
 ...chePartitionedAtomicReferenceMultiNodeTest.java |    2 +
 .../GridCachePartitionedNodeRestartTxSelfTest.java |    5 +-
 .../partitioned/IgnitePartitionedLockSelfTest.java |    2 +
 ...acheReplicatedAtomicReferenceMultiNodeTest.java |    2 +
 .../distributed/CacheBaselineTopologyTest.java     |    8 +-
 .../distributed/CacheBlockOnReadAbstractTest.java  |    2 +-
 .../CacheClientsConcurrentStartTest.java           |   32 +-
 .../cache/distributed/CacheStartOnJoinTest.java    |    7 +-
 .../GridCacheMultiNodeLockAbstractTest.java        |   12 +-
 ...GridCacheMultithreadedFailoverAbstractTest.java |  593 -----
 .../GridCacheMultithreadedFailoverTest.java        |  595 +++++
 ...PartitionEvictionDuringReadThroughSelfTest.java |    7 +-
 ...GridExchangeFreeCellularSwitchAbstractTest.java |  134 +-
 ...ngeFreeCellularSwitchComplexOperationsTest.java |   76 +-
 ...ridExchangeFreeCellularSwitchIsolationTest.java |  535 +++--
 ...changeFreeCellularSwitchTxContinuationTest.java |  264 +++
 ...idExchangeFreeCellularSwitchTxCountersTest.java |  242 ++
 .../distributed/GridExchangeFreeSwitchTest.java    |    8 +-
 .../IgniteBinaryMetadataUpdateNodeRestartTest.java |    2 +
 ...CacheClientMultiNodeUpdateTopologyLockTest.java |    2 +
 .../IgniteCacheNearRestartRollbackSelfTest.java    |    2 +
 .../IgniteCachePartitionLossPolicySelfTest.java    |    4 +-
 .../distributed/IgniteCacheSizeFailoverTest.java   |    2 +-
 .../distributed/IgniteTxTimeoutAbstractTest.java   |    2 +-
 ...sabledAtomicOnheapMultiNodeFullApiSelfTest.java |    3 +-
 .../GridCachePartitionsStateValidationTest.java    |   25 +-
 .../GridCachePartitionsStateValidatorSelfTest.java |    3 +-
 ...idCachePartitionsUpdateCountersAndSizeTest.java |  246 ++
 .../dht/GridCacheTxNodeFailureSelfTest.java        |    2 +-
 .../dht/IgniteCacheConcurrentPutGetRemove.java     |  165 --
 .../dht/IgniteCacheConcurrentPutGetRemoveTest.java |  165 ++
 .../dht/IgniteCacheMultiTxLockSelfTest.java        |    2 +-
 .../dht/IgniteCacheStartWithLoadTest.java          |    7 +-
 ...lanceIsProcessingWhenAssignmentIsEmptyTest.java |    2 +-
 .../dht/atomic/GridCacheAtomicPreloadSelfTest.java |    2 +
 .../dht/topology/BlockedEvictionsTest.java         |    7 +-
 ...MovingPartitionIsEvictedDuringClearingTest.java |    7 +-
 .../dht/topology/PartitionEvictionOrderTest.java   |  159 ++
 ...reloadingRestartWhileClearingPartitionTest.java |    7 +-
 .../GridCachePartitionedFilteredPutSelfTest.java   |    3 +-
 .../near/IgniteTxExceptionNodeFailTest.java        |  239 +-
 .../CacheRebalanceWithRemovedWalSegment.java       |  174 ++
 .../GridCacheRebalancingOrderingTest.java          |    2 +
 .../GridCacheRebalancingSyncSelfTest.java          |    2 +-
 .../rebalancing/RebalanceMetricsTest.java          |  112 +
 .../rebalancing/RebalanceStatisticsTest.java       |    3 +-
 .../GridCacheReplicatedMarshallerTxTest.java       |    2 +
 .../GridCacheReplicatedOnheapFullApiSelfTest.java  |    6 +
 ...heReplicatedOnheapMultiNodeFullApiSelfTest.java |    6 +
 .../GridCacheReplicatedTxConcurrentGetTest.java    |    2 +
 .../replicated/GridCacheReplicatedTxReadTest.java  |    2 +
 .../IgniteCacheAtomicLocalExpiryPolicyTest.java    |    3 +
 ...niteCacheAtomicLocalOnheapExpiryPolicyTest.java |    6 +
 .../IgniteCacheAtomicOnheapExpiryPolicyTest.java   |    6 +
 .../expiry/IgniteCacheExpiryPolicyTestSuite.java   |    4 +-
 ...teCacheStoreSessionWriteBehindAbstractTest.java |    4 +-
 .../GridCacheFastNodeLeftForTransactionTest.java   |    2 +-
 ...isabledAtomicOnheapMultiJvmFullApiSelfTest.java |    3 +-
 ...dNearDisabledOnheapMultiJvmFullApiSelfTest.java |    3 +-
 ...heMvccAbstractBasicCoordinatorFailoverTest.java |    7 +-
 .../cache/mvcc/CacheMvccAbstractTest.java          |    6 +-
 .../mvcc/CacheMvccConfigurationValidationTest.java |    6 +-
 .../cache/mvcc/CacheMvccTxFailoverTest.java        |    3 +-
 .../CorruptedTreeFailureHandlingTest.java          |   40 +-
 .../IgniteDataStorageMetricsSelfTest.java          |  238 +-
 ...gnitePdsBinaryMetadataOnClusterRestartTest.java |   12 +-
 ...sCacheObjectBinaryProcessorOnDiscoveryTest.java |    2 +-
 .../IgnitePdsCacheRebalancingAbstractTest.java     |    2 +-
 ...itePdsCacheStartStopWithFreqCheckpointTest.java |    2 +-
 .../persistence/IgnitePdsCorruptedStoreTest.java   |    3 +-
 .../persistence/IgnitePdsDefragmentationTest.java  |   68 +-
 .../IgnitePdsNoSpaceLeftOnDeviceTest.java          |    3 +-
 .../IgnitePdsSporadicDataRecordsOnBackupTest.java  |    2 +-
 ...IgnitePdsSpuriousRebalancingOnNodeJoinTest.java |   10 +-
 .../persistence/IgnitePdsTaskCancelingTest.java    |    2 +-
 .../persistence/MaintenanceRegistrySimpleTest.java |   14 +-
 ...hangingBaselineDownCacheRemoveFailoverTest.java |    5 +-
 ...eChangingBaselineUpCacheRemoveFailoverTest.java |    5 +-
 ...gniteStableBaselineCachePutAllFailoverTest.java |    2 +
 ...gniteStableBaselineCacheRemoveFailoverTest.java |    7 +-
 .../db/CheckpointBufferDeadlockTest.java           |   62 +-
 .../persistence/db/IgniteLogicalRecoveryTest.java  |    9 +-
 .../db/IgniteLogicalRecoveryWithParamsTest.java    |  368 +++
 .../db/IgnitePdsDataRegionMetricsTest.java         |   23 +-
 ...gnitePdsRebalancingOnNotStableTopologyTest.java |    2 +-
 .../db/IgnitePdsTransactionsHangTest.java          |    4 +-
 .../db/SlowCheckpointFileIOFactory.java            |   86 +
 .../db/checkpoint/CheckpointFreeListTest.java      |    6 +-
 .../db/checkpoint/IgniteMassLoadSandboxTest.java   |    3 +
 .../db/file/IgnitePdsCheckpointSimpleTest.java     |  144 +-
 ...CheckpointSimulationWithRealCpDisabledTest.java |    7 +-
 .../db/file/IgnitePdsDiskErrorsRecoveringTest.java |   10 +-
 .../db/file/IgnitePdsThreadInterruptionTest.java   |    2 +-
 .../persistence/db/wal/IgniteLocalWalSizeTest.java |   31 +-
 .../wal/IgniteNodeStoppedDuringDisableWALTest.java |    4 +-
 .../persistence/db/wal/IgniteWalRebalanceTest.java |  195 +-
 .../db/wal/WalArchiveSizeConfigurationTest.java    |  132 ++
 .../db/wal/WalCompactionAfterRestartTest.java      |    2 +
 .../db/wal/WalDeletionArchiveAbstractTest.java     |   98 +-
 .../db/wal/WalRecoveryTxLogicalRecordsTest.java    |   56 +-
 .../db/wal/WriteAheadLogManagerSelfTest.java       |  302 +++
 .../db/wal/crc/IgniteDataIntegrityTests.java       |    4 +-
 .../db/wal/reader/IgniteWalReaderTest.java         |    9 +-
 .../defragmentation/DefragmentationMXBeanTest.java |    1 -
 .../pagelocktracker/PageLockTrackerTestSuit.java   |    1 +
 .../pagelocktracker/log/PageLockLogTest.java       |    6 +-
 .../pagemem/BPlusTreePageMemoryImplTest.java       |    9 +-
 .../BPlusTreeReuseListPageMemoryImplTest.java      |    9 +-
 .../pagemem/ClockPageReplacementFlagsTest.java     |  119 +
 .../IgnitePageMemReplaceDelayedWriteUnitTest.java  |   12 +-
 .../pagemem/IgniteThrottlingUnitTest.java          |   10 +-
 .../pagemem/IndexStoragePageMemoryImplTest.java    |    9 +-
 .../persistence/pagemem/NoOpPageStoreManager.java  |    8 +-
 .../cache/persistence/pagemem/NoOpWALManager.java  |    5 +-
 .../pagemem/PageMemoryImplNoLoadTest.java          |    9 +-
 .../persistence/pagemem/PageMemoryImplTest.java    |   14 +-
 .../pagemem/PagesWriteThrottleSandboxTest.java     |    3 +-
 .../pagemem/PagesWriteThrottleSmokeTest.java       |   56 +-
 .../pagemem/SegmentedLruPageListTest.java          |  366 +++
 .../snapshot/AbstractSnapshotSelfTest.java         |   55 +-
 .../snapshot/IgniteClusterSnapshotCheckTest.java   |  542 +++++
 .../IgniteClusterSnapshotRestoreBaseTest.java      |  100 +
 .../IgniteClusterSnapshotRestoreSelfTest.java      |  770 ++++++
 .../snapshot/IgniteClusterSnapshotSelfTest.java    |   12 +-
 .../snapshot/IgniteSnapshotManagerSelfTest.java    |  187 +-
 .../IgniteSnapshotWithMetastorageTest.java         |  196 ++
 .../IgniteChangeGlobalStateCacheTest.java          |    4 +-
 .../IgniteChangeGlobalStateDataStructureTest.java  |    2 +
 .../IgniteChangeGlobalStateServiceTest.java        |    1 +
 .../IgniteChangeGlobalStateTest.java               |    1 +
 .../extended/GridActivateExtensionTest.java        |    2 +
 ...inActiveNodeToActiveClusterWithPersistence.java |    6 +-
 ...InActiveNodeToActiveClusterWithPersistence.java |    6 +-
 .../persistence/tree/io/TrackingPageIOTest.java    |    2 +-
 .../wal/AbstractWalDeltaConsistencyTest.java       |    2 +-
 .../wal/SegmentedRingByteBufferTest.java           |    4 +-
 .../persistence/wal/WalArchiveConsistencyTest.java |  273 +++
 .../wal/WalEnableDisableWithNodeShutdownTest.java  |  314 +++
 .../wal/WalEnableDisableWithRestartsTest.java      |  203 ++
 .../wal/memtracker/PageMemoryTracker.java          |    2 +-
 .../reader/StandaloneWalRecordsIteratorTest.java   |   38 +-
 .../cache/query/CacheDataPageScanQueryTest.java    |   10 +-
 .../cache/query/IndexingSpiQuerySelfTest.java      |    2 +-
 .../CacheContinuousQueryCounterAbstractTest.java   |    4 +-
 ...CacheContinuousQueryDeploymentToClientTest.java |  128 +
 ...cheContinuousQueryFailoverAbstractSelfTest.java |    9 +-
 .../CacheContinuousQueryRandomOperationsTest.java  |   28 +-
 ...CacheContinuousWithTransformerFailoverTest.java |   13 +-
 .../continuous/CacheKeepBinaryIterationTest.java   |    4 +-
 .../GridCacheContinuousQueryAbstractSelfTest.java  |   16 +-
 .../IgniteCacheContinuousQueryClientTest.java      |   45 +
 .../GridCacheWriteBehindStoreAbstractSelfTest.java |    2 +-
 ...iteBehindStorePartitionedMultiNodeSelfTest.java |    2 +-
 .../store/GridCacheWriteBehindStoreSelfTest.java   |    5 +-
 .../AbstractTransactionIntergrityTest.java         |   19 +-
 .../transactions/PartitionUpdateCounterTest.java   |    9 +-
 .../TxCrossCacheMapOnInvalidTopologyTest.java      |    5 +-
 .../cache/transactions/TxDeadlockCauseTest.java    |   11 +-
 .../TxDeadlockOnEntryToStringTest.java             |   24 +-
 .../cache/transactions/TxOnCachesStopTest.java     |    2 +-
 .../TxPartitionCounterStateConsistencyTest.java    |    6 +-
 ...ounterStateOnePrimaryTwoBackupsFailAllTest.java |    4 +-
 ...teOnePrimaryTwoBackupsHistoryRebalanceTest.java |  160 ++
 ...titionCounterStateOnePrimaryTwoBackupsTest.java |   21 +-
 ...titionCounterStateTwoPrimaryTwoBackupsTest.java |    7 +-
 .../TxRecoveryOnCoordniatorFailTest.java           |  116 +
 .../TxRecoveryWithConcurrentRollbackTest.java      |  140 +-
 .../cache/transactions/TxRollbackAsyncTest.java    |   14 +-
 .../TxRollbackOnTimeoutOnePhaseCommitTest.java     |    8 +-
 .../transactions/TxRollbackOnTimeoutTest.java      |  101 +-
 .../TxRollbackOnTopologyChangeTest.java            |    2 +-
 .../warmup/LoadAllWarmUpStrategySelfTest.java      |    3 +-
 .../processors/cluster/BaselineAutoAdjustTest.java |  219 +-
 .../cluster/ClusterNameBeforeActivation.java       |  106 +
 .../processors/database/BPlusTreeSelfTest.java     |   24 +-
 .../processors/database/CacheFreeListSelfTest.java |    9 +-
 .../database/DataRegionMetricsSelfTest.java        |   10 +-
 .../database/IgniteDbMemoryLeakAbstractTest.java   |    5 +-
 .../DataStreamerCommunicationSpiExceptionTest.java |  143 ++
 .../IgniteDataStreamerPerformanceTest.java         |    2 +-
 .../diagnostic/DiagnosticProcessorTest.java        |  313 ++-
 .../failure/FailureProcessorLoggingTest.java       |    4 +-
 .../DurableBackgroundTasksProcessorSelfTest.java   |  523 ++++
 .../localtask/ObservingCheckpointListener.java     |  128 +
 .../internal/processors/localtask/SimpleTask.java  |  102 +
 .../IgniteMessagingConfigVariationFullApiTest.java |    6 +-
 .../DistributedMetaStorageClassloadingTest.java    |  205 ++
 .../DistributedMetaStoragePersistentTest.java      |    2 +-
 .../metastorage/DistributedMetaStorageTest.java    |   48 +-
 .../persistence/DmsDataWriterWorkerTest.java       |   43 +-
 .../AbstractPerformanceStatisticsTest.java         |   58 +-
 .../performancestatistics/CheckpointTest.java      |  228 ++
 .../PerformanceStatisticsRotateFileTest.java       |  118 +
 .../processors/query/DummyQueryIndexing.java       |   55 +-
 .../cache/GridCacheMetadataCommandTest.java        |  113 +
 .../client/ThinClientPermissionCheckTest.java      |    9 +-
 .../client/ThinClientSslPermissionCheckTest.java   |    7 +-
 .../compute/ComputePermissionCheckTest.java        |    2 +-
 ...ridServiceDeploymentCompoundFutureSelfTest.java |    3 +-
 .../ServiceDeploymentProcessIdSelfTest.java        |    6 +-
 .../internal/sql/SqlParserCreateIndexSelfTest.java |   68 +-
 .../internal/sql/SqlParserKillQuerySelfTest.java   |    6 +-
 .../ignite/internal/util/GridArraysSelfTest.java   |   20 +-
 .../ignite/internal/util/GridMutableLongTest.java  |   61 +
 .../ignite/internal/util/HostAndPortRangeTest.java |  181 ++
 .../util/IgniteUtilsWorkDirectoryTest.java         |    3 +-
 .../internal/util/collection/IntHashMapTest.java   |   27 +
 .../util/future/IgniteCacheFutureImplTest.java     |    2 +-
 .../util/nio/impl/GridNioFilterChainSelfTest.java  |   14 +-
 .../GridOffHeapMapPerformanceAbstractTest.java     |    2 +-
 .../GridOffHeapPartitionedMapAbstractSelfTest.java |    2 -
 .../util/tostring/GridToStringBuilderSelfTest.java |    2 +-
 .../GridBoundedConcurrentOrderedMapSelfTest.java   |    4 +-
 .../loadtests/colocation/GridTestCacheStore.java   |    3 +-
 .../communication/GridIoManagerBenchmark0.java     |    3 +
 .../GridContinuousOperationsLoadTest.java          |   10 +-
 .../ignite/loadtests/job/GridJobLoadTest.java      |    3 +-
 .../lang/GridConcurrentLinkedHashMapBenchmark.java |   11 +-
 .../marshaller/GridMarshallerAbstractTest.java     |    2 +-
 .../marshaller/MarshallerContextTestImpl.java      |    7 +-
 .../ignite/messaging/GridMessagingSelfTest.java    |   12 +-
 .../messaging/IgniteMessagingSendAsyncTest.java    |    2 +-
 ...2PContinuousDeploymentClientDisconnectTest.java |  344 +++
 .../ignite/p2p/GridP2PLocalDeploymentSelfTest.java |    2 +-
 .../java/org/apache/ignite/p2p/GridP2PTestJob.java |    2 +-
 .../apache/ignite/p2p/GridP2PUndeploySelfTest.java |   41 +-
 .../java/org/apache/ignite/platform/Address.java   |   47 -
 .../org/apache/ignite/platform/Department.java     |   34 -
 .../java/org/apache/ignite/platform/Employee.java  |   47 -
 .../test/java/org/apache/ignite/platform/Key.java  |   51 -
 .../platform/PlatformComputeEchoArgTask.java       |   60 +
 .../ignite/platform/PlatformComputeEchoTask.java   |   14 +
 .../PlatformCustomBinaryBasicNameMapper.java       |   35 +
 .../platform/PlatformCustomBinaryNameMapper.java   |   35 +
 .../ignite/platform/PlatformDeployServiceTask.java |  127 +
 .../platform/PlatformEventsWriteEventTask.java     |    2 +-
 .../ignite/platform/PlatformTestExecutor.java      |   30 +
 .../ignite/platform/PlatformThreadUtils.java       |    9 +
 .../java/org/apache/ignite/platform/Value.java     |   51 -
 .../java/org/apache/ignite/platform/model/ACL.java |   23 +
 .../org/apache/ignite/platform/model/Account.java  |   71 +
 .../org/apache/ignite/platform/model/Address.java  |   47 +
 .../apache/ignite/platform/model/Department.java   |   34 +
 .../org/apache/ignite/platform/model/Employee.java |   47 +
 .../java/org/apache/ignite/platform/model/Key.java |   51 +
 .../apache/ignite/platform/model/ParamValue.java   |   43 +
 .../apache/ignite/platform/model/Parameter.java    |   43 +
 .../org/apache/ignite/platform/model/Role.java     |   39 +
 .../org/apache/ignite/platform/model/User.java     |   67 +
 .../java/org/apache/ignite/platform/model/V1.java  |   34 +
 .../java/org/apache/ignite/platform/model/V2.java  |   34 +
 .../java/org/apache/ignite/platform/model/V3.java  |   34 +
 .../java/org/apache/ignite/platform/model/V4.java  |   34 +
 .../org/apache/ignite/platform/model/Value.java    |   51 +
 .../session/GridSessionWaitAttributeSelfTest.java  |    5 +-
 ...unicationInverseConnectionEstablishingTest.java |   67 +-
 .../tcp/GridTcpCommunicationSpiConfigSelfTest.java |  158 ++
 .../tcp/GridTcpCommunicationSpiLogTest.java        |    5 +-
 ...municationSpiSkipWaitHandshakeOnClientTest.java |    2 +-
 .../IgniteTcpCommunicationConnectOnInitTest.java   |   32 +-
 .../tcp/TcpCommunicationHandshakeTimeoutTest.java  |  151 ++
 .../tcp/TcpCommunicationSpiDropNodesTest.java      |    2 +-
 ...cpCommunicationSpiHalfOpenedConnectionTest.java |   76 +-
 .../tcp/TcpCommunicationStatisticsTest.java        |    7 +-
 .../local/GridLocalDeploymentSpiSelfTest.java      |   54 +-
 .../discovery/DiscoverySpiDataExchangeTest.java    |  267 +++
 .../FilterDataForClientNodeDiscoveryTest.java      |    4 +-
 .../spi/discovery/tcp/IgniteClientConnectTest.java |    8 +-
 ...cpClientDiscoverySpiFailureTimeoutSelfTest.java |    9 +-
 .../tcp/TcpClientDiscoverySpiSelfTest.java         |   18 +-
 .../tcp/TcpClientDiscoveryUnresolvedHostTest.java  |    2 +-
 .../tcp/TcpDiscoveryCoordinatorFailureTest.java    |   11 +-
 .../tcp/TcpDiscoveryIpFinderFailureTest.java       |  399 ++++
 .../tcp/TcpDiscoveryNodeJoinAndFailureTest.java    |   10 +-
 .../TcpDiscoveryPendingMessageDeliveryTest.java    |    3 +-
 .../tcp/TcpDiscoverySslParametersTest.java         |    7 +-
 .../tcp/TcpDiscoveryWithAddressFilterTest.java     |   86 +
 .../tcp/TcpDiscoveryWithWrongServerTest.java       |   20 +-
 .../spi/discovery/tcp/TestDynamicIpFinder.java     |   55 +
 .../vm/TcpDiscoveryVmIpFinderDnsResolveTest.java   |  631 +++++
 .../GridInternalTasksLoadBalancingSelfTest.java    |    3 +-
 .../ignite/spi/metric/jmx/DummyMBeanServer.java    |    7 +-
 .../startup/servlet/GridServletLoaderTest.java     |    3 +-
 .../ignite/testframework/GridSpiTestContext.java   |   14 +
 .../apache/ignite/testframework/GridTestUtils.java |   40 +-
 .../testframework/junits/GridAbstractTest.java     |   77 +-
 .../testframework/junits/IgniteTestResources.java  |    6 +-
 .../junits/common/GridCommonAbstractTest.java      |  137 +-
 .../testframework/test/VariationsIteratorTest.java |   10 +-
 .../testframework/wal/record/RecordUtils.java      |    3 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java    |   18 +
 .../IgniteBasicWithPersistenceTestSuite.java       |   18 +-
 .../testsuites/IgniteBinaryCacheTestSuite.java     |   12 +-
 .../testsuites/IgniteBinaryObjectsTestSuite.java   |   15 +-
 .../IgniteCacheDataStructuresSelfTestSuite.java    |   13 +-
 .../testsuites/IgniteCacheFailoverTestSuite2.java  |    6 +-
 .../IgniteCacheFullApiSelfTestSuite.java           |    3 +-
 .../testsuites/IgniteCacheMvccTestSuite1.java      |    2 +
 .../testsuites/IgniteCacheMvccTestSuite2.java      |    5 +-
 .../testsuites/IgniteCacheMvccTestSuite5.java      |    4 +
 .../testsuites/IgniteCacheMvccTestSuite6.java      |    6 +-
 .../testsuites/IgniteCacheMvccTestSuite7.java      |    4 +-
 .../testsuites/IgniteCacheRestartTestSuite.java    |    5 +-
 .../testsuites/IgniteCacheRestartTestSuite2.java   |    4 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java    |   25 +-
 .../ignite/testsuites/IgniteCacheTestSuite2.java   |    5 +
 .../ignite/testsuites/IgniteCacheTestSuite3.java   |   15 +-
 .../ignite/testsuites/IgniteCacheTestSuite5.java   |    9 +-
 .../ignite/testsuites/IgniteCacheTestSuite6.java   |   13 +-
 .../ignite/testsuites/IgniteCacheTestSuite9.java   |    7 +
 .../testsuites/IgniteClientReconnectTestSuite.java |    2 +
 .../testsuites/IgniteKernalSelfTestSuite.java      |    4 +-
 .../ignite/testsuites/IgniteP2PSelfTestSuite.java  |    8 +-
 .../ignite/testsuites/IgnitePdsMvccTestSuite.java  |    2 +
 .../ignite/testsuites/IgnitePdsTestSuite.java      |   14 +
 .../ignite/testsuites/IgnitePdsTestSuite2.java     |   11 +-
 .../ignite/testsuites/IgnitePdsTestSuite4.java     |    4 +
 .../testsuites/IgniteRestHandlerTestSuite.java     |    2 +
 .../IgniteSpiCommunicationSelfTestSuite.java       |    2 +
 .../IgniteSpiDiscoverySelfTestSuite.java           |   13 +-
 .../testsuites/IgniteStandByClusterSuite.java      |   12 +-
 .../ignite/testsuites/IgniteUtilSelfTestSuite.java |    7 +-
 .../apache/ignite/util/GridLongListSelfTest.java   |   10 +-
 ...mandHandlerClusterByClassTest_cache_help.output |    4 +-
 ...ridCommandHandlerClusterByClassTest_help.output |   20 +-
 ...dlerClusterByClassWithSSLTest_cache_help.output |    4 +-
 ...andHandlerClusterByClassWithSSLTest_help.output |   20 +-
 modules/dev-utils/ignite-modules-test/build.gradle |    2 +-
 modules/dev-utils/pom.xml                          |    2 +-
 .../ignite/development/utils/DataEntryWrapper.java |  120 +-
 .../development/utils/IgniteWalConverter.java      |  234 +-
 .../utils/IgniteWalConverterArguments.java         |  626 +++++
 .../utils/MetastoreDataRecordWrapper.java          |   13 +-
 .../development/utils/DevUtilsTestSuite.java       |    2 +
 .../utils/IgniteWalConverterArgumentsTest.java     |  570 +++++
 .../utils/IgniteWalConverterSensitiveDataTest.java |   69 +-
 .../development/utils/IgniteWalConverterTest.java  |  606 +++++
 .../apache/ignite/development/utils/Person.java    |   65 +
 .../apache/ignite/development/utils/PersonEx.java  |   79 +
 .../apache/ignite/development/utils/PersonKey.java |   61 +
 modules/direct-io/pom.xml                          |   15 +-
 .../cache/persistence/file/IgniteNativeIoLib.java  |    3 +-
 .../testsuites/IgnitePdsNativeIoTestSuite.java     |    2 +
 modules/extdata/p2p/pom.xml                        |    2 +-
 .../ignite/tests/p2p/AlwaysTruePredicate.java      |    2 +-
 ...dP2PEventRemoteFilterWithStaticInitializer.java |   34 +
 ...MessageRemoteListenerWithStaticInitializer.java |   34 +
 .../GridP2PRemoteFilterWithStaticInitializer.java  |   36 +
 ...2PRemoteFilterWithStaticInitializerFactory.java |   31 +
 ...dP2PRemoteTransformerWithStaticInitializer.java |   34 +
 ...oteTransformerWithStaticInitializerFactory.java |   33 +
 ...ializableRemoteFilterWithStaticInitializer.java |   35 +
 .../GridP2PTestObjectWithStaticInitializer.java    |   36 +
 .../tests/p2p/compute/ExternalEntryProcessor.java  |   44 +
 modules/extdata/platform/pom.xml                   |    2 +-
 modules/extdata/uri/modules/uri-dependency/pom.xml |    2 +-
 modules/extdata/uri/pom.xml                        |    2 +-
 modules/gce/pom.xml                                |   10 +-
 modules/geospatial/pom.xml                         |    4 +-
 .../processors/query/h2/opt/GeoSpatialIndex.java   |   65 +
 .../query/h2/opt/GeoSpatialIndexDefinition.java    |   58 +
 .../query/h2/opt/GeoSpatialIndexFactory.java       |   69 +
 .../query/h2/opt/GeoSpatialIndexImpl.java          |  395 ++++
 .../processors/query/h2/opt/GeoSpatialUtils.java   |   71 +
 .../processors/query/h2/opt/GeometryIndexKey.java  |   49 +
 .../query/h2/opt/GridH2SpatialIndex.java           |  371 +--
 modules/hibernate-4.2/pom.xml                      |    3 +-
 modules/hibernate-5.1/pom.xml                      |    3 +-
 .../cache/hibernate/HibernateEntityRegion.java     |    9 +-
 modules/hibernate-5.3/pom.xml                      |    3 +-
 .../hibernate/IgniteCachedDomainDataAccess.java    |   15 +-
 .../cache/hibernate/IgniteEntityDataAccess.java    |    9 +-
 .../cache/hibernate/IgniteNaturalIdDataAccess.java |    7 +-
 .../HibernateL2CacheConfigurationSelfTest.java     |   10 +-
 .../HibernateL2CacheStrategySelfTest.java          |   10 +-
 modules/hibernate-core/pom.xml                     |   11 +-
 .../cache/hibernate/HibernateCacheProxy.java       |    4 +-
 modules/ignored-tests/pom.xml                      |    2 +-
 modules/indexing/pom.xml                           |   12 +-
 .../cache/query/GridCacheTwoStepQuery.java         |   15 +-
 .../processors/query/h2/CommandProcessor.java      |   22 +-
 .../processors/query/h2/ConnectionManager.java     |   13 +
 .../h2/DurableBackgroundCleanupIndexTreeTask.java  |  195 --
 .../query/h2/H2JavaObjectSerializer.java           |   27 +-
 .../internal/processors/query/h2/H2RowCache.java   |  163 --
 .../processors/query/h2/H2RowCacheRegistry.java    |  132 --
 .../processors/query/h2/H2SqlFieldMetadata.java    |   11 +-
 .../processors/query/h2/H2TableDescriptor.java     |   22 +-
 .../processors/query/h2/H2TableEngine.java         |   11 +-
 .../internal/processors/query/h2/H2Utils.java      |   45 +-
 .../processors/query/h2/IgniteH2Indexing.java      |  460 ++--
 .../query/h2/IndexRebuildFullClosure.java          |   49 -
 .../query/h2/IndexRebuildPartialClosure.java       |   91 -
 .../processors/query/h2/QueryDescriptor.java       |   14 +-
 .../internal/processors/query/h2/QueryParser.java  |    8 +-
 .../processors/query/h2/SchemaManager.java         |   16 +-
 .../query/h2/database/H2PkHashIndex.java           |   53 +-
 .../processors/query/h2/database/H2Tree.java       |  928 --------
 .../query/h2/database/H2TreeClientIndex.java       |   47 +-
 .../query/h2/database/H2TreeFilterClosure.java     |  141 --
 .../processors/query/h2/database/H2TreeIndex.java  |  622 +----
 .../query/h2/database/H2TreeIndexBase.java         |   92 -
 .../query/h2/database/InlineIndexColumn.java       |  101 -
 .../inlinecolumn/AbstractInlineIndexColumn.java    |  246 --
 .../inlinecolumn/BooleanInlineIndexColumn.java     |   68 -
 .../inlinecolumn/ByteInlineIndexColumn.java        |   68 -
 .../inlinecolumn/BytesInlineIndexColumn.java       |  148 --
 .../inlinecolumn/DateInlineIndexColumn.java        |   69 -
 .../inlinecolumn/DoubleInlineIndexColumn.java      |   68 -
 .../inlinecolumn/FixedStringInlineIndexColumn.java |   39 -
 .../inlinecolumn/FloatInlineIndexColumn.java       |   68 -
 .../inlinecolumn/InlineIndexColumnFactory.java     |  238 --
 .../inlinecolumn/IntegerInlineIndexColumn.java     |   68 -
 .../inlinecolumn/LongInlineIndexColumn.java        |   68 -
 .../inlinecolumn/ObjectBytesInlineIndexColumn.java |   40 -
 .../inlinecolumn/ObjectHashInlineIndexColumn.java  |  175 --
 .../inlinecolumn/ShortInlineIndexColumn.java       |   68 -
 .../StringIgnoreCaseInlineIndexColumn.java         |   39 -
 .../inlinecolumn/StringInlineIndexColumn.java      |  311 ---
 .../inlinecolumn/TimeInlineIndexColumn.java        |   69 -
 .../inlinecolumn/TimestampInlineIndexColumn.java   |   83 -
 .../inlinecolumn/UuidInlineIndexColumn.java        |   81 -
 .../h2/database/io/AbstractH2ExtrasInnerIO.java    |  169 --
 .../h2/database/io/AbstractH2ExtrasLeafIO.java     |  166 --
 .../query/h2/database/io/AbstractH2InnerIO.java    |   79 -
 .../query/h2/database/io/AbstractH2LeafIO.java     |   81 -
 .../query/h2/database/io/H2ExtrasInnerIO.java      |   33 -
 .../query/h2/database/io/H2ExtrasLeafIO.java       |   32 -
 .../processors/query/h2/database/io/H2IOUtils.java |   92 -
 .../processors/query/h2/database/io/H2InnerIO.java |   37 -
 .../processors/query/h2/database/io/H2LeafIO.java  |   37 -
 .../query/h2/database/io/H2MvccExtrasInnerIO.java  |   55 -
 .../query/h2/database/io/H2MvccExtrasLeafIO.java   |   54 -
 .../query/h2/database/io/H2MvccInnerIO.java        |   58 -
 .../query/h2/database/io/H2MvccLeafIO.java         |   58 -
 .../query/h2/database/io/H2RowLinkIO.java          |   69 -
 .../defragmentation/IndexingDefragmentation.java   |  482 ----
 .../processors/query/h2/dml/DmlAstUtils.java       |    2 +-
 .../processors/query/h2/index/H2RowComparator.java |  135 ++
 .../query/h2/index/QueryIndexDefinition.java       |  206 ++
 .../h2/index/QueryIndexKeyDefinitionProvider.java  |   80 +
 .../query/h2/index/QueryIndexRowHandler.java       |  172 ++
 .../query/h2/index/QueryRowHandlerFactory.java     |   48 +
 .../h2/index/client/ClientIndexDefinition.java     |   79 +
 .../query/h2/index/client/ClientIndexFactory.java  |   57 +
 .../query/h2/index/client/ClientInlineIndex.java   |  153 ++
 .../query/h2/index/keys/DateIndexKey.java          |   58 +
 .../query/h2/index/keys/H2ValueWrapperMixin.java   |   44 +
 .../query/h2/index/keys/TimeIndexKey.java          |   58 +
 .../query/h2/index/keys/TimestampIndexKey.java     |   63 +
 .../processors/query/h2/opt/GridH2IndexBase.java   |    5 +-
 .../processors/query/h2/opt/GridH2MetaTable.java   |    2 +-
 .../processors/query/h2/opt/GridH2ProxyIndex.java  |    9 +-
 .../processors/query/h2/opt/GridH2Table.java       |  210 +-
 .../processors/query/h2/opt/H2CacheRow.java        |    2 +-
 .../internal/processors/query/h2/opt/H2Row.java    |    3 +-
 .../query/h2/opt/join/CollocationModel.java        |    2 +-
 .../query/h2/opt/join/DistributedJoinContext.java  |    2 +-
 .../query/h2/opt/join/DistributedLookupBatch.java  |    2 +-
 .../processors/query/h2/opt/join/RangeSource.java  |   12 +-
 .../processors/query/h2/sql/GridSqlConst.java      |    5 +
 .../query/h2/sql/GridSqlCreateTable.java           |    4 +-
 .../processors/query/h2/sql/GridSqlDelete.java     |   10 +-
 .../processors/query/h2/sql/GridSqlInsert.java     |   18 +-
 .../processors/query/h2/sql/GridSqlJoin.java       |    8 +-
 .../processors/query/h2/sql/GridSqlMerge.java      |   16 +-
 .../processors/query/h2/sql/GridSqlQuery.java      |    4 +-
 .../query/h2/sql/GridSqlQuerySplitter.java         |   19 +-
 .../processors/query/h2/sql/GridSqlSelect.java     |   16 +-
 .../processors/query/h2/sql/GridSqlUnion.java      |   14 +-
 .../processors/query/h2/sql/GridSqlUpdate.java     |   12 +-
 .../processors/query/h2/sql/SplitterUtils.java     |   29 +
 .../query/h2/twostep/AbstractReducer.java          |    4 +-
 .../query/h2/twostep/GridMapQueryExecutor.java     |   60 +-
 .../query/h2/twostep/GridReduceQueryExecutor.java  |   14 +-
 .../h2/twostep/PartitionReservationManager.java    |   10 +
 .../processors/query/h2/twostep/ReduceIndex.java   |    4 +-
 .../query/h2/twostep/ReducePartitionMapper.java    |   10 +-
 .../query/h2/twostep/SortedReduceIndexAdapter.java |   36 +
 .../query/h2/twostep/UnsortedBaseReducer.java      |  108 +
 .../query/h2/twostep/UnsortedOneWayReducer.java    |  118 +
 .../query/h2/twostep/UnsortedReducer.java          |   81 +-
 .../query/h2/twostep/msg/GridH2QueryRequest.java   |   11 +-
 .../visor/verify/ValidateIndexesClosure.java       |  263 ++-
 .../visor/verify/ValidateIndexesContext.java       |   30 +
 .../visor/verify/VisorValidateIndexesTask.java     |   18 +
 .../org/apache/ignite/client/ClientTestSuite.java  |    2 +
 .../apache/ignite/client/FunctionalQueryTest.java  |    3 +-
 ...finityKeyNameAndValueFieldNameConflictTest.java |    3 +-
 .../cache/BinaryTypeMismatchLoggingTest.java       |    5 +-
 .../CacheGroupMetricsWithIndexBuildFailTest.java   |   22 +-
 .../cache/CacheGroupMetricsWithIndexTest.java      |  204 +-
 .../cache/CacheRegisterMetadataLocallyTest.java    |    4 +-
 ...eckIndexesInlineSizeOnNodeJoinMultiJvmTest.java |   13 +-
 .../cache/GridCacheCrossCacheQuerySelfTest.java    |    4 +-
 .../cache/GridCacheDynamicLoadOnClientTest.java    |    4 +-
 .../processors/cache/GridCacheOffHeapSelfTest.java |    2 +-
 .../cache/GridCacheQuerySimpleBenchmark.java       |    7 +-
 .../cache/GridIndexingWithNoopSwapSelfTest.java    |    2 +-
 .../IgniteCacheAbstractFieldsQuerySelfTest.java    |   17 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java    |    9 +-
 .../cache/IgniteCacheCollocatedQuerySelfTest.java  |    8 +-
 ...teCacheConfigurationPrimitiveTypesSelfTest.java |    3 +-
 .../cache/IgniteCacheDistributedJoinTest.java      |   12 +-
 .../IgniteCacheFieldsQueryNoDataSelfTest.java      |    2 +-
 ...gniteCacheJoinPartitionedAndReplicatedTest.java |   64 +-
 .../cache/IgniteCacheLargeResultSelfTest.java      |    2 +-
 .../cache/IgniteCacheOffheapEvictQueryTest.java    |    4 +-
 .../cache/IgniteCacheOffheapIndexScanTest.java     |    2 +-
 .../IgniteCacheParallelismQuerySortOrderTest.java  |  257 ++
 .../cache/IgniteCacheQueryLoadSelfTest.java        |    2 +-
 .../IgniteCacheQueryMultiThreadedSelfTest.java     |    2 +-
 .../IgniteCacheSqlInsertValidationSelfTest.java    |   47 +-
 .../IgniteCacheSqlQueryMultiThreadedSelfTest.java  |    2 +-
 .../cache/IgniteDynamicSqlRestoreTest.java         |    3 +-
 .../QueryJoinWithDifferentNodeFiltersTest.java     |    4 +-
 .../authentication/SqlUserCommandSelfTest.java     |   55 +-
 ...heClientQueryReplicatedNodeRestartSelfTest.java |    8 +-
 .../near/IgniteCacheQueryNodeRestartSelfTest.java  |    2 +-
 .../near/IgniteCacheQueryNodeRestartSelfTest2.java |    2 +-
 .../encryption/EncryptedSqlTemplateTableTest.java  |   79 +
 .../cache/index/AbstractIndexingCommonTest.java    |   11 +-
 .../processors/cache/index/BasicIndexTest.java     |   60 +-
 .../index/ComplexSecondaryKeyUnwrapSelfTest.java   |    2 +
 .../DynamicEnableIndexingConcurrentSelfTest.java   |   21 +-
 .../index/DynamicIndexAbstractBasicSelfTest.java   |    2 +-
 .../cache/index/ForceRebuildIndexTest.java         |  317 +++
 .../cache/index/H2ConnectionLeaksSelfTest.java     |    2 +-
 .../cache/index/H2DynamicTableSelfTest.java        |    2 +-
 .../cache/index/H2RowCachePageEvictionTest.java    |   14 +-
 .../processors/cache/index/H2RowCacheSelfTest.java |   26 +-
 .../cache/index/H2RowExpireTimeIndexSelfTest.java  |    6 +-
 .../index/H2TreeCorruptedTreeExceptionTest.java    |    5 +-
 .../cache/index/IgniteDecimalSelfTest.java         |    2 +-
 .../processors/cache/index/IndexMetricsTest.java   |   16 +-
 .../cache/index/IndexesRebuildTaskEx.java          |  207 ++
 .../cache/index/QueryEntityValidationSelfTest.java |    6 +-
 .../cache/index/SqlTransactionsSelfTest.java       |    2 +
 .../cache/index/StopRebuildIndexTest.java          |  311 +++
 ...niteCacheLocalQueryCancelOrTimeoutSelfTest.java |   77 +-
 ...acheMvccAbstractSqlCoordinatorFailoverTest.java |   10 +-
 .../cache/mvcc/CacheMvccBackupsAbstractTest.java   |    6 +-
 .../mvcc/CacheMvccBasicContinuousQueryTest.java    |    9 +-
 ...eMvccPartitionedSqlCoordinatorFailoverTest.java |   10 +-
 .../CacheMvccSqlConfigurationValidationTest.java   |    7 +-
 .../mvcc/CacheMvccSqlQueriesAbstractTest.java      |    8 +-
 .../cache/mvcc/CacheMvccSqlTxModesTest.java        |    2 +-
 .../mvcc/CacheMvccSqlTxQueriesAbstractTest.java    |    9 +-
 ...cheMvccSqlTxQueriesWithReducerAbstractTest.java |   38 +-
 .../cache/mvcc/MvccRepeatableReadBulkOpsTest.java  |    2 +-
 .../IgnitePdsIndexingDefragmentationTest.java      |   34 +-
 ...xingMultithreadedLoadContinuousRestartTest.java |    4 +-
 .../db/LongDestroyDurableBackgroundTaskTest.java   |  250 +-
 .../MultipleParallelCacheDeleteDeadlockTest.java   |  157 +-
 .../persistence/db/wal/IgniteWalRecoveryTest.java  |    3 +-
 .../IgniteClusterSnapshotCheckWithIndexesTest.java |  127 +
 ...niteClusterSnapshotRestoreWithIndexingTest.java |  211 ++
 .../IgniteClusterSnapshotWithIndexesTest.java      |    3 +-
 .../IgniteDbSingleNodeWithIndexingPutGetTest.java  |   14 +-
 .../processors/database/RebuildIndexTest.java      |    2 +-
 .../RebuildIndexWithHistoricalRebalanceTest.java   |    7 +-
 ...ngingBaselineCacheQueryNodeRestartSelfTest.java |    5 +-
 ...ableBaselineCacheQueryNodeRestartsSelfTest.java |    5 +-
 .../PerformanceStatisticsQueryTest.java            |    4 +-
 .../CleanupIndexTreeCheckpointFailoverTest.java    |  127 +
 .../query/IgniteCacheGroupsCompareQueryTest.java   |    2 +-
 .../query/IgniteSqlKeyValueFieldsTest.java         |    3 +-
 .../query/IgniteSqlParameterizedQueryTest.java     |    2 +-
 .../processors/query/IgniteSqlRoutingTest.java     |    2 +-
 .../query/IgniteSqlSplitterSelfTest.java           |   35 +-
 .../query/KillQueryOnClientDisconnectTest.java     |   11 +-
 .../processors/query/LocalQueryLazyTest.java       |    4 +-
 .../query/MemLeakOnSqlWithClientReconnectTest.java |    2 +-
 .../processors/query/ReducerRowsBufferTest.java    |  114 +
 .../query/RemoveConstantsFromQueryTest.java        |  235 ++
 .../processors/query/RunningQueriesTest.java       |    2 +-
 .../query/SqlFieldTypeValidationTypesTest.java     |   12 +-
 .../processors/query/SqlSystemViewsSelfTest.java   |   53 +-
 .../query/WrongQueryEntityFieldTypeTest.java       |    3 +
 .../query/h2/GridIndexRebuildSelfTest.java         |   31 +-
 .../h2/GridSubqueryJoinOptimizerSelfTest.java      |   54 +
 .../H2ResultSetIteratorNullifyOnEndSelfTest.java   |    5 +-
 .../query/h2/IgniteSqlQueryMinMaxTest.java         |   70 +-
 .../processors/query/h2/QueryDataPageScanTest.java |   38 +-
 .../inlinecolumn/InlineIndexColumnTest.java        |  258 +-
 .../query/h2/sql/AbstractH2CompareQueryTest.java   |    6 +-
 .../query/h2/sql/BaseH2CompareQueryTest.java       |   17 +-
 .../query/h2/sql/GridQueryParsingTest.java         |    4 +-
 .../query/h2/sql/H2CompareBigQueryTest.java        |   16 +-
 .../DisappearedCacheCauseRetryMessageSelfTest.java |    5 +-
 ...neOrSinglePartitionsQueryOptimizationsTest.java |    4 +-
 .../h2/twostep/RetryCauseMessageSelfTest.java      |    9 +-
 .../h2/twostep/TableViewSubquerySelfTest.java      |    2 +-
 .../ReplicatedSqlCustomPartitionsTest.java         |   76 +
 .../apache/ignite/sqltests/ReplicatedSqlTest.java  |   43 +-
 .../IgniteBinaryCacheQueryTestSuite.java           |   22 +-
 .../IgniteBinaryCacheQueryTestSuite2.java          |    3 +
 .../testsuites/IgniteCacheMvccSqlTestSuite.java    |    3 +-
 .../testsuites/IgniteCacheQuerySelfTestSuite6.java |    5 +-
 ...teCacheWithIndexingAndPersistenceTestSuite.java |    4 +-
 .../IgnitePdsWithIndexingCoreTestSuite.java        |    2 +
 .../testsuites/IgnitePdsWithIndexingTestSuite.java |   10 +-
 modules/jcl/pom.xml                                |   12 +-
 modules/jta/pom.xml                                |   12 +-
 modules/kubernetes/DEVNOTES.md                     |   69 +
 modules/kubernetes/DEVNOTES.txt                    |   69 -
 modules/kubernetes/{README.txt => README.md}       |    0
 modules/kubernetes/config/Dockerfile               |   18 +-
 .../config/example-kube-persistence-and-wal.xml    |    9 +-
 .../kubernetes/config/example-kube-persistence.xml |    9 +-
 modules/kubernetes/config/example-kube-rbac.xml    |   10 +-
 modules/kubernetes/config/example-kube.xml         |    5 +-
 modules/kubernetes/pom.xml                         |   14 +-
 .../ignite/client/TestClusterClientConnection.java |  157 --
 .../discovery/KubernetesDiscoveryAbstractTest.java |  151 ++
 .../discovery/TestClusterClientConnection.java     |   52 +
 .../TestKubernetesIpFinderDisconnection.java       |  123 +
 .../testsuites/IgniteKubernetesTestSuite.java      |    4 +-
 modules/log4j/pom.xml                              |   13 +-
 modules/log4j2/pom.xml                             |   12 +-
 modules/mesos/pom.xml                              |   12 +-
 modules/ml/catboost-model-parser/pom.xml           |   11 +-
 modules/ml/h2o-model-parser/pom.xml                |   11 +-
 modules/ml/pom.xml                                 |   11 +-
 modules/ml/spark-model-parser/pom.xml              |   12 +-
 .../ml/sparkmodelparser/SparkModelParser.java      |    5 +-
 .../ml/sparkmodelparser/SparkModelParserTest.java  |    5 +-
 .../ignite/ml/clustering/kmeans/KMeansModel.java   |    6 +-
 .../ignite/ml/composition/ModelsComposition.java   |    4 +-
 .../ml/composition/bagging/BaggedTrainer.java      |    4 +-
 .../apache/ignite/ml/dataset/DatasetBuilder.java   |    2 +-
 .../bootstrapping/BootstrappedDatasetBuilder.java  |    2 +-
 .../ml/dataset/impl/cache/CacheBasedDataset.java   |    3 +-
 .../impl/cache/CacheBasedDatasetBuilder.java       |   14 +-
 .../ml/dataset/impl/local/LocalDatasetBuilder.java |    5 +-
 .../ignite/ml/environment/logging/MLLogger.java    |    2 +-
 .../ignite/ml/knn/ann/ANNClassificationModel.java  |    6 +-
 .../ml/knn/ann/ANNClassificationTrainer.java       |    9 +-
 .../preprocessing/IllegalFeatureTypeException.java |    3 +-
 .../preprocessing/IllegalLabelTypeException.java   |    3 +-
 .../ignite/ml/multiclass/MultiClassModel.java      |    3 +-
 .../ignite/ml/multiclass/OneVsRestTrainer.java     |    3 +-
 .../compound/CompoundNaiveBayesTrainer.java        |   12 +-
 .../apache/ignite/ml/nn/MultilayerPerceptron.java  |    3 +-
 .../updatecalculators/SimpleGDParameterUpdate.java |    3 +-
 .../ml/preprocessing/PreprocessingTrainer.java     |    2 +-
 .../ml/preprocessing/encoding/EncoderTrainer.java  |    4 +-
 .../onehotencoder/OneHotEncoderPreprocessor.java   |    6 +-
 .../stringencoder/StringEncoderPreprocessor.java   |    3 +-
 .../preprocessing/imputing/ImputingStrategy.java   |    5 +-
 .../normalization/NormalizationPreprocessor.java   |    2 +-
 .../linear/LinearRegressionLSQRTrainer.java        |    3 +-
 .../linear/LinearRegressionSGDTrainer.java         |    3 +-
 .../logistic/LogisticRegressionSGDTrainer.java     |    3 +-
 .../ml/selection/cv/AbstractCrossValidation.java   |    3 +-
 ...assificationPointwiseMetricStatsAggregator.java |    3 +-
 .../ClassificationMetricsAggregator.java           |    3 +-
 .../RegressionMetricStatsAggregator.java           |    3 +-
 .../BinaryClassificationEvaluationContext.java     |    3 +-
 .../classification/BinaryClassificationMetric.java |    3 +-
 .../selection/split/TrainTestDatasetSplitter.java  |    2 +-
 .../split/mapper/SHA256UniformMapper.java          |    2 +-
 .../ml/svm/SVMLinearClassificationTrainer.java     |    3 +-
 .../ml/trainers/AdaptableDatasetTrainer.java       |   15 +-
 .../apache/ignite/ml/trainers/DatasetTrainer.java  |    9 +-
 .../java/org/apache/ignite/ml/tree/NodeData.java   |    8 +-
 .../ignite/ml/util/genetic/GeneticAlgorithm.java   |    3 +-
 .../test/java/org/apache/ignite/ml/TestUtils.java  |    6 +-
 .../ignite/ml/clustering/KMeansTrainerTest.java    |    3 +-
 .../apache/ignite/ml/common/LocalModelsTest.java   |    9 +-
 .../ml/composition/CompositionTestSuite.java       |    6 +-
 .../ml/composition/boosting/GDBTrainerTest.java    |    3 +-
 .../apache/ignite/ml/dataset/DatasetTestSuite.java |    6 +-
 .../impl/local/LocalDatasetBuilderTest.java        |    2 +-
 .../primitive/SimpleLabeledDatasetTest.java        |    3 +-
 .../LearningEnvironmentBuilderTest.java            |   16 +-
 .../ml/environment/LearningEnvironmentTest.java    |   11 +-
 .../ml/environment/deploy/MLDeployingTest.java     |    4 +-
 .../java/org/apache/ignite/ml/math/BlasTest.java   |    4 +-
 .../ignite/ml/math/MathImplLocalTestSuite.java     |    5 +
 .../ml/math/distances/DistancesTestSuite.java      |   35 +
 .../ignite/ml/math/isolve/lsqr/LSQROnHeapTest.java |    9 +-
 .../primitives/matrix/MatrixStorageFixtures.java   |    3 +-
 .../matrix/MatrixStorageImplementationTest.java    |    9 +-
 .../math/primitives/vector/AbstractVectorTest.java |   25 +-
 .../vector/VectorImplementationsFixtures.java      |    2 +-
 .../ml/math/primitives/vector/VectorNormTest.java  |    3 +-
 .../ignite/ml/multiclass/OneVsRestTrainerTest.java |    3 +-
 .../ignite/ml/naivebayes/NaiveBayesTestSuite.java  |   48 +
 .../discrete/DiscreteNaiveBayesModelTest.java      |    2 +-
 .../discrete/DiscreteNaiveBayesTrainerTest.java    |    2 +-
 .../gaussian/GaussianNaiveBayesTrainerTest.java    |    3 +-
 .../test/java/org/apache/ignite/ml/nn/MLPTest.java |    6 +-
 .../org/apache/ignite/ml/nn/MLPTrainerTest.java    |   12 +-
 .../ignite/ml/nn/performance/MnistMLPTestUtil.java |    7 +-
 .../ml/preprocessing/PreprocessingTestSuite.java   |   13 +-
 .../preprocessing/encoding/EncoderTrainerTest.java |   48 +-
 .../preprocessing/imputing/ImputerTrainerTest.java |   30 +-
 .../linear/LinearRegressionLSQRTrainerTest.java    |    3 +-
 .../logistic/LogisticRegressionSGDTrainerTest.java |    3 +-
 .../ignite/ml/selection/SelectionTestSuite.java    |    8 +-
 .../ml/selection/cv/CrossValidationTest.java       |   84 +-
 .../cursor/CacheBasedLabelPairCursorTest.java      |    3 +-
 .../scoring/cursor/LocalLabelPairCursorTest.java   |    3 +-
 .../apache/ignite/ml/svm/SVMBinaryTrainerTest.java |    3 +-
 .../ignite/ml/tree/DecisionTreeTestSuite.java      |    4 +-
 .../gini/GiniImpurityMeasureCalculatorTest.java    |   26 +-
 .../mse/MSEImpurityMeasureCalculatorTest.java      |   18 +-
 .../RandomForestClassifierTrainerTest.java         |    3 +-
 .../RandomForestRegressionTrainerTest.java         |    3 +-
 .../randomforest/RandomForestTreeTestSuite.java    |    4 +-
 .../data/impurity/GiniFeatureHistogramTest.java    |    4 +-
 .../data/impurity/ImpurityHistogramTest.java       |    4 +-
 .../ml/util/genetic/GeneticAlgorithmTest.java      |    3 +-
 modules/ml/xgboost-model-parser/pom.xml            |   11 +-
 modules/opencensus/pom.xml                         |   11 +-
 .../monitoring/opencensus/AbstractTracingTest.java |   57 +-
 .../opencensus/OpenCensusSqlJdbcTracingTest.java   |   62 +-
 .../opencensus/OpenCensusSqlNativeTracingTest.java |  200 +-
 .../opencensus/OpenCensusTracingSpiTest.java       |   12 +-
 modules/osgi-karaf/pom.xml                         |   11 +-
 modules/osgi-paxlogging/pom.xml                    |   12 +-
 modules/osgi/pom.xml                               |   11 +-
 modules/platforms/cpp/CMakeLists.txt               |    6 +-
 .../include/ignite/binary/binary_raw_reader.h      |    2 +-
 .../include/ignite/binary/binary_raw_writer.h      |    2 +-
 .../binary/include/ignite/binary/binary_reader.h   |    2 +-
 .../binary/include/ignite/binary/binary_writer.h   |    2 +-
 .../ignite/impl/binary/binary_reader_impl.h        |  161 +-
 .../ignite/impl/interop/interop_input_stream.h     |   27 +-
 .../include/ignite/impl/interop/interop_memory.h   |   18 +-
 .../binary/src/impl/binary/binary_reader_impl.cpp  |  284 ++-
 .../cpp/binary/src/impl/interop/interop_memory.cpp |   28 +-
 modules/platforms/cpp/core-test/CMakeLists.txt     |    3 +-
 .../cpp/core-test/config/affinity-test-32.xml      |   52 +
 .../cpp/core-test/config/affinity-test-default.xml |   79 +
 .../cpp/core-test/config/affinity-test.xml         |   34 +
 .../cpp/core-test/config/cache-test-default.xml    |    4 -
 .../cpp/core-test/include/ignite/test_utils.h      |   30 +
 .../cpp/core-test/project/vs/core-test.vcxproj     |    1 +
 .../core-test/project/vs/core-test.vcxproj.filters |    3 +
 .../platforms/cpp/core-test/src/affinity_test.cpp  |  123 +-
 .../platforms/cpp/core-test/src/compute_test.cpp   |  363 +--
 modules/platforms/cpp/core-test/src/test_utils.cpp |   36 +-
 modules/platforms/cpp/core/CMakeLists.txt          |    3 +-
 .../cpp/core/include/ignite/cache/cache.h          |    4 +-
 .../core/include/ignite/cache/query/query_cursor.h |    4 +-
 .../ignite/cache/query/query_fields_cursor.h       |    4 +-
 .../include/ignite/cache/query/query_fields_row.h  |    4 +-
 modules/platforms/cpp/core/include/ignite/ignite.h |    4 +-
 .../core/include/ignite/transactions/transaction.h |    4 +-
 .../include/ignite/transactions/transactions.h     |    4 +-
 .../cluster-compute-example/CMakeLists.txt         |    3 +-
 .../cpp/examples/compute-example/CMakeLists.txt    |    3 +-
 .../continuous-query-example/CMakeLists.txt        |    3 +-
 .../cpp/examples/include/ignite/examples/person.h  |    2 +-
 .../cpp/examples/odbc-example/CMakeLists.txt       |    3 +-
 .../cpp/examples/put-get-example/CMakeLists.txt    |    3 +-
 .../cpp/examples/query-example/CMakeLists.txt      |    3 +-
 .../examples/query-example/src/query_example.cpp   |    4 +-
 .../thin-client-put-get-example/CMakeLists.txt     |    3 +-
 modules/platforms/cpp/ignite/CMakeLists.txt        |    2 +-
 modules/platforms/cpp/jni/CMakeLists.txt           |    3 +-
 modules/platforms/cpp/odbc-test/CMakeLists.txt     |    3 +-
 .../cpp/odbc-test/src/attributes_test.cpp          |   24 +
 .../cpp/odbc-test/src/meta_queries_test.cpp        |   44 +-
 modules/platforms/cpp/odbc-test/src/test_utils.cpp |   34 +-
 modules/platforms/cpp/odbc/CMakeLists.txt          |    3 +-
 .../odbc/include/ignite/odbc/meta/column_meta.h    |   41 +-
 .../odbc/include/ignite/odbc/protocol_version.h    |    3 +
 .../cpp/odbc/install/ignite-odbc-amd64.wxs         |    2 +-
 .../platforms/cpp/odbc/install/ignite-odbc-x86.wxs |    2 +-
 .../platforms/cpp/odbc/src/meta/column_meta.cpp    |   28 +-
 .../platforms/cpp/odbc/src/protocol_version.cpp    |    6 +-
 .../platforms/cpp/thin-client-test/CMakeLists.txt  |    4 +-
 .../cpp/thin-client-test/config/log/log4j-0.xml    |   42 +
 .../config/sql-query-fields-32.xml                 |   52 +
 .../config/sql-query-fields-default.xml            |  125 +
 .../thin-client-test/config/sql-query-fields.xml   |   35 +
 .../cpp/thin-client-test/config/with-logging-0.xml |   36 +
 .../thin-client-test/config/with-logging-base.xml  |   70 +
 .../thin-client-test/include/ignite/test_type.h    |  183 ++
 .../cpp/thin-client-test/include/test_utils.h      |    8 +
 .../project/vs/thin-client-test.vcxproj            |    5 +
 .../project/vs/thin-client-test.vcxproj.filters    |   15 +
 .../thin-client-test/src/ignite_client_test.cpp    |   68 +-
 .../thin-client-test/src/sql_fields_query_test.cpp |  467 ++++
 .../cpp/thin-client-test/src/test_utils.cpp        |   51 +-
 .../platforms/cpp/thin-client-test/src/tx_test.cpp |   85 +-
 modules/platforms/cpp/thin-client/CMakeLists.txt   |    5 +-
 .../ignite/impl/thin/cache/cache_client_proxy.h    |   12 +
 .../thin/cache/query/query_fields_cursor_impl.h    |  147 ++
 .../impl/thin/cache/query/query_fields_row_impl.h  |  197 ++
 .../include/ignite/impl/thin/copyable.h            |  106 +
 .../include/ignite/impl/thin/copyable_writable.h   |  175 ++
 .../include/ignite/thin/cache/cache_client.h       |   30 +-
 .../ignite/thin/cache/query/query_fields_cursor.h  |   94 +
 .../ignite/thin/cache/query/query_fields_row.h     |  104 +
 .../ignite/thin/cache/query/query_sql_fields.h     |  465 ++++
 .../include/ignite/thin/ignite_client.h            |    6 +-
 .../ignite/thin/ignite_client_configuration.h      |   37 +-
 .../include/ignite/thin/transactions/transaction.h |    6 +-
 .../ignite/thin/transactions/transactions.h        |    6 +-
 .../cpp/thin-client/project/vs/thin-client.vcxproj |   13 +
 .../project/vs/thin-client.vcxproj.filters         |   60 +
 .../src/cache/query/query_fields_cursor.cpp        |   69 +
 .../src/cache/query/query_fields_row.cpp           |   59 +
 .../src/impl/cache/cache_client_impl.cpp           |  168 +-
 .../thin-client/src/impl/cache/cache_client_impl.h |   51 +-
 .../src/impl/cache/cache_client_proxy.cpp          |    8 +
 .../thin-client/src/impl/cache/query/cursor_page.h |  127 +
 .../impl/cache/query/query_fields_cursor_impl.h    |  229 ++
 .../src/impl/cache/query/query_fields_row_impl.h   |  129 +
 .../cpp/thin-client/src/impl/data_router.cpp       |   10 +
 .../cpp/thin-client/src/impl/data_router.h         |   25 +-
 .../platforms/cpp/thin-client/src/impl/message.cpp |   69 +
 .../platforms/cpp/thin-client/src/impl/message.h   |  221 +-
 .../src/impl/transactions/transaction_impl.cpp     |  151 ++
 .../src/impl/transactions/transaction_impl.h       |   50 +-
 .../src/impl/transactions/transactions_impl.cpp    |  135 +-
 .../src/impl/transactions/transactions_impl.h      |   48 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.AspNet.nuspec                    |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.BenchmarkDotNet.csproj           |    4 +
 .../Apache.Ignite.BenchmarkDotNet.snk}             |  Bin
 .../Binary/BinarySystemTypeReadBenchmark.cs        |  124 +
 .../DataStreamer/DataStreamerBenchmark.cs          |  106 +
 .../Apache.Ignite.BenchmarkDotNet/Program.cs       |    4 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.Core.Tests.TestDll2/Account.cs   |   57 +
 .../Apache.Ignite.Core.Tests.TestDll2/Address.cs   |   57 +
 .../Apache.Ignite.Core.Tests.TestDll2.csproj       |   58 +
 .../Apache.Ignite.Core.Tests.TestDll2.snk}         |  Bin
 .../Properties/AssemblyInfo.cs                     |   41 +
 .../Apache.Ignite.Core.Tests.DotNetCore.csproj     |   13 +-
 .../Apache.Ignite.Core.Tests.csproj                |   32 +-
 .../Binary/BinaryDateTimeTest.cs                   |  213 +-
 .../Binary/BinaryDynamicRegistrationTest.cs        |   57 +-
 .../Binary/BinaryNameMapperTest.cs                 |  140 ++
 .../Binary/BinarySelfTest.cs                       |   69 +-
 .../Binary/JavaBinaryInteropTest.cs                |  283 ++-
 .../Binary/TypeResolverTest.cs                     |    2 +-
 .../Cache/Affinity/AffinityTest.cs                 |   40 +
 .../Cache/CacheAbstractTest.cs                     |    2 +-
 .../Cache/CacheLocalAtomicTest.cs                  |    3 +
 .../Cache/CacheLocalTest.cs                        |    3 +
 .../Cache/CacheTestAsyncAwait.cs                   |  115 +
 .../Cache/PartitionPreloadTest.cs                  |    2 +-
 .../Cache/PersistenceTest.cs                       |    1 +
 .../Cache/Platform/PlatformCacheTest.cs            |    2 +-
 .../Platform/PlatformCacheTopologyChangeTest.cs    |    1 +
 .../Cache/Query/CacheDmlQueriesTestSimpleName.cs   |    1 +
 .../Query/CacheQueriesCodeConfigurationTest.cs     |  130 +-
 .../Cache/Query/CacheQueriesTestSimpleName.cs      |    1 +
 .../Cache/Query/Continuous/ContinuousQueryTest.cs  |    1 +
 .../Cache/Query/Linq/CacheLinqTest.Base.cs         |   31 +
 .../Cache/Query/Linq/CacheLinqTest.Functions.cs    |   98 -
 .../Cache/Query/Linq/CacheLinqTest.GroupBy.cs      |  294 +++
 .../Cache/Query/Linq/CacheLinqTest.Misc.cs         |  151 ++
 .../Cache/Query/Linq/CacheLinqTest.Strings.cs      |   71 +
 .../Cache/Query/Linq/CacheLinqTestSimpleName.cs    |    1 +
 .../Cache/Query/Linq/CacheLinqTestSqlEscapeAll.cs  |    1 +
 .../Binary/BinaryConfigurationRetrievalTest.cs     |  341 +++
 .../Client/Cache/CacheTestAsync.cs                 |    1 +
 .../Client/Cache/CacheTestAsyncAwait.cs            |    2 +-
 .../Client/Cache/CacheTestNoMeta.cs                |    3 +-
 .../Client/Cache/CacheTestSsl.cs                   |    1 +
 .../Client/Cache/ContinuousQueryTest.cs            |    2 +
 .../Client/ClientFeaturesTest.cs                   |   15 +-
 .../Client/Cluster/ClientClusterDiscoveryTests.cs  |    1 +
 .../ClientClusterDiscoveryTestsBaselineTopology.cs |    1 +
 .../ClientClusterDiscoveryTestsNoLocalhost.cs      |    1 +
 .../Cluster/ClientClusterDiscoveryTestsSsl.cs      |    1 +
 .../ClientReconnectCompatibilityTest.cs            |    2 -
 .../Client/Compute/ComputeClientTests.cs           |    1 +
 .../Compute/CancellationTest.cs                    |    2 +-
 .../Compute/ComputeApiTest.JavaTask.cs             |    3 +
 .../Compute/ComputeApiTest.cs                      |   14 +-
 .../Compute/ComputeApiTestFullFooter.cs            |    1 +
 .../Compute/ComputeApiTypeAutoRegisterTest.cs      |   98 +
 .../Compute/ComputeTestAsyncAwait.cs               |   50 +
 .../Config/binary-custom-name-mapper.xml           |   56 +
 .../Config/binary-custom-name-mapper2.xml          |   56 +
 .../Config/full-config.xml                         |    2 +-
 .../Config/spring-test.xml                         |    4 +
 .../Dataload/DataStreamerTest.cs                   |  314 ++-
 .../Dataload/DataStreamerTestTopologyChange.cs     |   39 +-
 .../Deployment/GetAddressFunc.cs                   |    6 +-
 .../Deployment/PeerAssemblyLoadingAllApisTest.cs   |    4 +-
 .../Deployment/PeerAssemblyLoadingTest.cs          |    4 +-
 .../Apache.Ignite.Core.Tests/Examples/Example.cs   |  158 +-
 .../Examples/ExamplePaths.cs                       |   74 +
 .../Examples/ExamplesTest.cs                       |  264 ---
 .../Examples/ExamplesTestBase.cs                   |  172 ++
 .../Examples/ExpectedOutput/AtomicLong.txt         |   24 +
 .../ExpectedOutput/AtomicLong_ExternalNode.txt     |   44 +
 .../Examples/ExpectedOutput/AtomicReference.txt    |    1 +
 .../Examples/ExpectedOutput/AtomicSequence.txt     |   23 +
 .../ExpectedOutput/AtomicSequence_ExternalNode.txt |   44 +
 .../Examples/ExpectedOutput/BinaryMode.txt         |   21 +
 .../Examples/ExpectedOutput/BinaryModeThin.txt     |   18 +
 .../Examples/ExpectedOutput/ClientReconnect.txt    |   19 +
 .../Examples/ExpectedOutput/DataStreamer.txt       |   51 +
 .../Examples/ExpectedOutput/Ddl.txt                |    9 +
 .../Examples/ExpectedOutput/DdlThin.txt            |   13 +
 .../Examples/ExpectedOutput/Dml.txt                |   17 +
 .../Examples/ExpectedOutput/DmlThin.txt            |   17 +
 .../Examples/ExpectedOutput/EntryProcessor.txt     |   45 +
 .../Examples/ExpectedOutput/Events.txt             |   10 +
 .../ExpectedOutput/Events_ExternalNode.txt         |   10 +
 .../Examples/ExpectedOutput/Func.txt               |   15 +
 .../Examples/ExpectedOutput/Lifecycle.txt          |   17 +
 .../Examples/ExpectedOutput/Linq.txt               |   32 +
 .../Examples/ExpectedOutput/LinqThin.txt           |   32 +
 .../Examples/ExpectedOutput/Messaging.txt          |   28 +
 .../Examples/ExpectedOutput/MultiTieredCache.txt   |   34 +
 .../ExpectedOutput/OptimisticTransaction.txt       |    7 +
 .../ExpectedOutput/OptimisticTransactionThin.txt   |    7 +
 .../ExpectedOutput/PeerAssemblyLoading.txt         |    4 +
 .../Examples/ExpectedOutput/PutGet.txt             |   13 +
 .../Examples/ExpectedOutput/PutGetThin.txt         |   13 +
 .../Examples/ExpectedOutput/QueryContinuous.txt    |    6 +
 .../ExpectedOutput/QueryContinuousThin.txt         |    6 +
 .../Examples/ExpectedOutput/QueryFullText.txt      |    5 +
 .../Examples/ExpectedOutput/QueryScan.txt          |    5 +
 .../Examples/ExpectedOutput/QueryScanThin.txt      |    5 +
 .../Examples/ExpectedOutput/Services.txt           |    7 +
 .../Examples/ExpectedOutput/ServicesThin.txt       |    3 +
 .../Examples/ExpectedOutput/Sql.txt                |   15 +
 .../Examples/ExpectedOutput/SqlThin.txt            |   15 +
 .../Examples/ExpectedOutput/Store.txt              |   21 +
 .../Examples/ExpectedOutput/Task.txt               |   15 +
 .../Examples/ExpectedOutput/Task_ExternalNode.txt  |   16 +
 .../Examples/ExpectedOutput/Transaction.txt        |   26 +
 .../TransactionDeadlockDetection.txt               |   17 +
 .../Examples/ExpectedOutput/TransactionThin.txt    |   26 +
 .../Apache.Ignite.Core.Tests/Examples/PathUtil.cs  |   56 -
 .../Examples/ProjectFilesTest.cs                   |  154 +-
 .../Examples/ThickClientExamplesTest.cs            |   63 +
 .../Examples/ThickExamplesExternalNodeTest.cs      |   63 +
 .../Examples/ThickExamplesTest.cs                  |   47 +
 .../Examples/ThinExamplesTest.cs                   |  102 +
 .../Examples/ThinExamplesTwoServersTest.cs         |   37 +
 .../IgniteConfigurationSerializerTest.cs           |    5 +-
 .../IgniteConfigurationTest.cs                     |    5 +
 .../Apache.Ignite.Core.Tests/IgniteLockTests.cs    |    1 +
 .../dotnet/Apache.Ignite.Core.Tests/JavaServer.cs  |    4 +-
 .../Apache.Ignite.Core.Tests/LifecycleTest.cs      |    4 +-
 .../Log/CustomLoggerTest.cs                        |  100 +-
 .../Apache.Ignite.Core.Tests/MessagingTest.cs      |  128 +-
 .../Apache.Ignite.Core.Tests/ProjectFilesTest.cs   |   74 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Services/IJavaService.cs                       |   23 +-
 .../Services/JavaServiceDynamicProxy.cs            |   44 +-
 .../Apache.Ignite.Core.Tests/Services/Model.cs     |  106 +-
 .../Services/PlatformTestService.cs                |  620 +++++
 .../Services/ServiceProxyTest.cs                   |    6 +-
 .../Services/ServiceTypeAutoResolveTest.cs         |  193 --
 .../Services/ServicesTest.cs                       |  480 +++-
 .../Services/ServicesTestAsync.cs                  |    5 +-
 .../Services/ServicesTestFullFooter.cs             |    4 +
 .../Services/ServicesTypeAutoResolveTest.cs        |  296 +++
 .../Apache.Ignite.Core.Tests/TestUtilsJni.cs       |   21 +
 .../Apache.Ignite.Core.Schema.nuspec               |    2 +-
 .../Apache.Ignite.Core/Apache.Ignite.Core.csproj   |    5 +
 .../Apache.Ignite.Core/Apache.Ignite.Core.nuspec   |   18 +-
 .../Binary/BinaryBasicNameMapper.cs                |   61 +-
 .../Binary/BinaryConfiguration.cs                  |   12 +-
 .../Binary/BinaryReflectiveSerializer.cs           |    2 +-
 .../Binary/ITimestampConverter.cs                  |   38 +
 .../Configuration/AsyncContinuationExecutor.cs     |   60 +
 .../Apache.Ignite.Core/Datastream/IDataStreamer.cs |  150 +-
 .../IgniteClientConfigurationSection.xsd           |   12 +
 .../Apache.Ignite.Core/IgniteConfiguration.cs      |   19 +-
 .../IgniteConfigurationSection.xsd                 |   26 +-
 .../dotnet/Apache.Ignite.Core/Ignition.cs          |   42 +-
 .../Impl/Binary/BinaryProcessor.cs                 |   21 +-
 .../Impl/Binary/BinaryProcessorClient.cs           |   23 +-
 .../Apache.Ignite.Core/Impl/Binary/BinaryReader.cs |   36 +-
 .../Impl/Binary/BinarySystemHandlers.cs            |  412 ++--
 .../Apache.Ignite.Core/Impl/Binary/BinaryUtils.cs  |  105 +-
 .../Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs |   40 +-
 .../Impl/Binary/IBinaryProcessor.cs                |    9 +-
 .../Apache.Ignite.Core/Impl/Binary/JavaTypes.cs    |    2 +-
 .../Apache.Ignite.Core/Impl/Binary/Marshaller.cs   |   73 +-
 .../Impl/Binary/TypeNameParser.cs                  |   18 +-
 .../Apache.Ignite.Core/Impl/Binary/TypeResolver.cs |    9 +-
 .../Binary/BinaryConfigurationClientInternal.cs    |   68 +
 .../Impl/Client/Binary/BinaryNameMapperMode.cs     |   42 +
 .../Impl/Client/ClientBitmaskFeature.cs            |    3 +-
 .../Impl/Client/ClientFailoverSocket.cs            |  112 +-
 .../Impl/Client/ClientFeatures.cs                  |   30 +-
 .../Apache.Ignite.Core/Impl/Client/ClientOp.cs     |    1 +
 .../Apache.Ignite.Core/Impl/Client/IgniteClient.cs |    2 +-
 .../Impl/Common/FutureConverter.cs                 |   22 +-
 .../Apache.Ignite.Core/Impl/Common/TaskRunner.cs   |   57 +-
 .../Apache.Ignite.Core/Impl/Compute/ComputeImpl.cs |   10 +
 .../Impl/Compute/ComputeTaskHolder.cs              |   20 +-
 .../Impl/Datastream/DataStreamerBatch.cs           |   58 +-
 .../Impl/Datastream/DataStreamerImpl.cs            |  212 +-
 .../Impl/IPlatformTargetInternal.cs                |    3 +-
 .../Impl/PlatformDisposableTargetAdapter.cs        |   24 +-
 .../Apache.Ignite.Core/Impl/PlatformJniTarget.cs   |    5 +-
 .../Impl/PlatformTargetAdapter.cs                  |   53 +-
 .../Impl/Plugin/PluginProcessor.cs                 |   34 +-
 .../Impl/Services/ServiceProxySerializer.cs        |   49 +-
 .../Apache.Ignite.Core/Impl/Services/Services.cs   |   26 +-
 .../Impl/Unmanaged/Jni/DllLoader.cs                |   10 +-
 .../Apache.Ignite.Core/Impl/Unmanaged/Jni/Env.cs   |    2 +-
 .../Impl/Unmanaged/NativeLibraryUtils.cs           |  108 +
 .../Impl/Unmanaged/UnmanagedThread.cs              |   20 +-
 .../Apache.Ignite.Core/Properties/AssemblyInfo.cs  |    9 +-
 .../Properties/AssemblyInfo.cs                     |    6 +-
 .../Apache.Ignite.EntityFramework.nuspec           |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.Linq/Apache.Ignite.Linq.nuspec   |    2 +-
 .../Apache.Ignite.Linq/Impl/AliasDictionary.cs     |   43 +-
 .../Impl/CacheQueryExpressionVisitor.cs            |    5 +-
 .../Impl/CacheQueryModelVisitor.cs                 |    2 +-
 .../Apache.Ignite.Linq/Impl/ExpressionWalker.cs    |  130 +-
 .../Apache.Ignite.Linq/Impl/MethodVisitor.cs       |   54 +
 .../Apache.Ignite.Linq/Properties/AssemblyInfo.cs  |    8 +-
 .../Apache.Ignite.Log4Net.nuspec                   |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec   |    2 +-
 .../Apache.Ignite.NLog/Properties/AssemblyInfo.cs  |    8 +-
 modules/platforms/dotnet/Apache.Ignite.sln         |   25 +-
 modules/platforms/dotnet/Apache.Ignite/App.config  |    2 +-
 .../Apache.Ignite/Properties/AssemblyInfo.cs       |    8 +-
 modules/platforms/dotnet/DEVNOTES.txt              |   14 +-
 modules/platforms/dotnet/build.ps1                 |   84 +-
 modules/platforms/dotnet/docfx/index.md            |    9 +-
 .../dotnet/examples/.template.config/template.json |   17 +
 .../platforms/dotnet/examples/.vscode/launch.json  |  445 ++++
 .../platforms/dotnet/examples/.vscode/tasks.json   |   17 +
 .../dotnet/examples/Apache.Ignite.Examples.sln     |  665 +++++-
 .../Apache.Ignite.Examples.sln.DotSettings}        |    0
 .../Apache.Ignite.Examples.csproj                  |  107 -
 .../Apache.Ignite.Examples.snk                     |  Bin 596 -> 0 bytes
 .../examples/Apache.Ignite.Examples/App.config     |   41 -
 .../Compute/ClosureExample.cs                      |   78 -
 .../Compute/PeerAssemblyLoadingExample.cs          |   96 -
 .../Apache.Ignite.Examples/Compute/TaskExample.cs  |  134 --
 .../DataStructures/AtomicLongExample.cs            |   65 -
 .../DataStructures/AtomicReferenceExample.cs       |   65 -
 .../DataStructures/AtomicSequenceExample.cs        |   70 -
 .../Datagrid/BinaryModeExample.cs                  |  261 --
 .../Datagrid/ContinuousQueryExample.cs             |  100 -
 .../Datagrid/DataStreamerExample.cs                |   94 -
 .../Datagrid/EntryProcessorExample.cs              |   94 -
 .../Datagrid/MultiTieredCacheExample.cs            |  116 -
 .../Datagrid/NearCacheExample.cs                   |   87 -
 .../Datagrid/OptimisticTransactionExample.cs       |  110 -
 .../Datagrid/PutGetExample.cs                      |  213 --
 .../Datagrid/QueryExample.cs                       |  163 --
 .../Datagrid/StoreExample.cs                       |  119 -
 .../TransactionDeadlockDetectionExample.cs         |  121 -
 .../Datagrid/TransactionExample.cs                 |  146 --
 .../Apache.Ignite.Examples/Events/EventsExample.cs |   98 -
 .../Messaging/MessagingExample.cs                  |  110 -
 .../Misc/ClientReconnectExample.cs                 |  173 --
 .../Misc/LifecycleExample.cs                       |  115 -
 .../Properties/AssemblyInfo.cs                     |   34 -
 .../Apache.Ignite.Examples/Services/IMapService.cs |   56 -
 .../Services/ServicesExample.cs                    |   74 -
 .../Apache.Ignite.Examples/Sql/LinqExample.cs      |  345 ---
 .../Apache.Ignite.Examples/Sql/SqlDdlExample.cs    |  112 -
 .../Apache.Ignite.Examples/Sql/SqlDmlExample.cs    |  161 --
 .../Apache.Ignite.Examples/Sql/SqlExample.cs       |  281 ---
 .../ThinClient/ThinClientPutGetExample.cs          |   89 -
 .../ThinClient/ThinClientQueryExample.cs           |  144 --
 .../ThinClient/ThinClientSqlExample.cs             |  198 --
 .../Apache.Ignite.ExamplesDll.csproj               |   86 -
 .../Apache.Ignite.ExamplesDll.snk                  |  Bin 596 -> 0 bytes
 .../Apache.Ignite.ExamplesDll/Binary/Account.cs    |   59 -
 .../Apache.Ignite.ExamplesDll/Binary/Address.cs    |   82 -
 .../Apache.Ignite.ExamplesDll/Binary/Employee.cs   |  104 -
 .../Binary/Organization.cs                         |   77 -
 .../Binary/OrganizationType.cs                     |   40 -
 .../Compute/AverageSalaryJob.cs                    |   64 -
 .../Compute/AverageSalaryTask.cs                   |   84 -
 .../Compute/CharacterCountClosure.cs               |   42 -
 .../Compute/CharacterCountReducer.cs               |   51 -
 .../DataStructures/AtomicLongIncrementAction.cs    |   50 -
 .../DataStructures/AtomicReferenceModifyAction.cs  |   62 -
 .../AtomicSequenceIncrementAction.cs               |   50 -
 .../Datagrid/CacheIncrementEntryProcessor.cs       |   45 -
 .../Datagrid/CachePutEntryProcessor.cs             |   45 -
 .../Datagrid/ContinuousQueryFilter.cs              |   48 -
 .../Datagrid/EmployeeStore.cs                      |  120 -
 .../Datagrid/EmployeeStoreFactory.cs               |   38 -
 .../Datagrid/EmployeeStorePredicate.cs             |   38 -
 .../Datagrid/ScanQueryFilter.cs                    |   50 -
 .../Events/LocalListener.cs                        |   54 -
 .../Messaging/LocalListener.cs                     |   59 -
 .../Messaging/RemoteOrderedListener.cs             |   53 -
 .../Messaging/RemoteUnorderedListener.cs           |   53 -
 .../Apache.Ignite.ExamplesDll/Messaging/Topic.cs   |   28 -
 .../Properties/AssemblyInfo.cs                     |   34 -
 .../Services/MapService.cs                         |  116 -
 .../dotnet/examples/Directory.Build.props          |   42 +
 modules/platforms/dotnet/examples/README.md        |   57 +
 modules/platforms/dotnet/examples/README.txt       |    8 -
 .../dotnet/examples/ServerNode/Program.cs          |   39 +
 .../dotnet/examples/ServerNode/ServerNode.csproj   |   13 +
 .../Shared/Cache/CacheIncrementEntryProcessor.cs   |   45 +
 .../Shared/Cache/CachePutEntryProcessor.cs         |   45 +
 .../examples/Shared/Cache/ContinuousQueryFilter.cs |   48 +
 .../dotnet/examples/Shared/Cache/EmployeeStore.cs  |  116 +
 .../examples/Shared/Cache/EmployeeStoreFactory.cs  |   38 +
 .../Shared/Cache/EmployeeStorePredicate.cs         |   38 +
 .../examples/Shared/Cache/ScanQueryFilter.cs       |   50 +
 .../examples/Shared/Compute/AverageSalaryJob.cs    |   64 +
 .../examples/Shared/Compute/AverageSalaryTask.cs   |   84 +
 .../examples/Shared/Compute/CharacterCountFunc.cs  |   42 +
 .../Shared/Compute/CharacterCountReducer.cs        |   51 +
 .../DataStructures/AtomicLongIncrementAction.cs    |   50 +
 .../DataStructures/AtomicReferenceModifyAction.cs  |   62 +
 .../AtomicSequenceIncrementAction.cs               |   50 +
 .../Shared/Messaging/LocalMessageListener.cs       |   59 +
 .../Messaging/RemoteOrderedMessageListener.cs      |   52 +
 .../Messaging/RemoteUnorderedMessageListener.cs    |   52 +
 .../dotnet/examples/Shared/Messaging/Topic.cs      |   28 +
 .../dotnet/examples/Shared/Models/Account.cs       |   59 +
 .../dotnet/examples/Shared/Models/Address.cs       |   82 +
 .../dotnet/examples/Shared/Models/Employee.cs      |  104 +
 .../dotnet/examples/Shared/Models/Organization.cs  |   77 +
 .../examples/Shared/Models/OrganizationType.cs     |   40 +
 .../dotnet/examples/Shared/Services/MapService.cs  |  117 +
 .../platforms/dotnet/examples/Shared/Shared.csproj |   15 +
 modules/platforms/dotnet/examples/Shared/Utils.cs  |  191 ++
 .../Thick/Cache/BinaryMode/BinaryMode.csproj       |   13 +
 .../examples/Thick/Cache/BinaryMode/Program.cs     |  246 ++
 .../Thick/Cache/DataStreamer/DataStreamer.csproj   |   13 +
 .../examples/Thick/Cache/DataStreamer/Program.cs   |   76 +
 .../Cache/EntryProcessor/EntryProcessor.csproj     |   13 +
 .../examples/Thick/Cache/EntryProcessor/Program.cs |   74 +
 .../Cache/MultiTieredCache/MultiTieredCache.csproj |   13 +
 .../Thick/Cache/MultiTieredCache/Program.cs        |  113 +
 .../Thick/Cache/NearCache/NearCache.csproj         |   13 +
 .../examples/Thick/Cache/NearCache/Program.cs      |   78 +
 .../OptimisticTransaction.csproj                   |   13 +
 .../Thick/Cache/OptimisticTransaction/Program.cs   |  101 +
 .../dotnet/examples/Thick/Cache/PutGet/Program.cs  |  195 ++
 .../examples/Thick/Cache/PutGet/PutGet.csproj      |   13 +
 .../Thick/Cache/QueryContinuous/Program.cs         |   85 +
 .../Cache/QueryContinuous/QueryContinuous.csproj   |   13 +
 .../examples/Thick/Cache/QueryFullText/Program.cs  |   62 +
 .../Thick/Cache/QueryFullText/QueryFullText.csproj |   13 +
 .../examples/Thick/Cache/QueryScan/Program.cs      |   65 +
 .../Thick/Cache/QueryScan/QueryScan.csproj         |   13 +
 .../dotnet/examples/Thick/Cache/Store/Program.cs   |  104 +
 .../dotnet/examples/Thick/Cache/Store/Store.csproj |   13 +
 .../examples/Thick/Cache/Transaction/Program.cs    |  131 ++
 .../Thick/Cache/Transaction/Transaction.csproj     |   13 +
 .../Cache/TransactionDeadlockDetection/Program.cs  |  101 +
 .../TransactionDeadlockDetection.csproj            |   13 +
 .../dotnet/examples/Thick/Compute/Func/Func.csproj |   13 +
 .../dotnet/examples/Thick/Compute/Func/Program.cs  |   64 +
 .../PeerAssemblyLoading/PeerAssemblyLoading.csproj |   16 +
 .../Thick/Compute/PeerAssemblyLoading/Program.cs   |   87 +
 .../dotnet/examples/Thick/Compute/Task/Program.cs  |   61 +
 .../dotnet/examples/Thick/Compute/Task/Task.csproj |   13 +
 .../DataStructures/AtomicLong/AtomicLong.csproj    |   13 +
 .../Thick/DataStructures/AtomicLong/Program.cs     |   56 +
 .../AtomicReference/AtomicReference.csproj         |   13 +
 .../DataStructures/AtomicReference/Program.cs      |   57 +
 .../AtomicSequence/AtomicSequence.csproj           |   13 +
 .../Thick/DataStructures/AtomicSequence/Program.cs |   57 +
 .../Misc/ClientReconnect/ClientReconnect.csproj    |   13 +
 .../examples/Thick/Misc/ClientReconnect/Program.cs |  143 ++
 .../examples/Thick/Misc/Events/Events.csproj       |   13 +
 .../dotnet/examples/Thick/Misc/Events/Program.cs   |  114 +
 .../examples/Thick/Misc/Lifecycle/Lifecycle.csproj |   13 +
 .../examples/Thick/Misc/Lifecycle/Program.cs       |   94 +
 .../examples/Thick/Misc/Messaging/Messaging.csproj |   13 +
 .../examples/Thick/Misc/Messaging/Program.cs       |  100 +
 .../dotnet/examples/Thick/Misc/Services/Program.cs |   78 +
 .../examples/Thick/Misc/Services/Services.csproj   |   13 +
 modules/platforms/dotnet/examples/Thick/README.md  |    4 +
 .../dotnet/examples/Thick/Sql/Ddl/Ddl.csproj       |   13 +
 .../dotnet/examples/Thick/Sql/Ddl/Program.cs       |   99 +
 .../dotnet/examples/Thick/Sql/Dml/Dml.csproj       |   13 +
 .../dotnet/examples/Thick/Sql/Dml/Program.cs       |  145 ++
 .../dotnet/examples/Thick/Sql/Linq/Linq.csproj     |   13 +
 .../dotnet/examples/Thick/Sql/Linq/Program.cs      |  311 +++
 .../dotnet/examples/Thick/Sql/Sql/Program.cs       |  244 ++
 .../dotnet/examples/Thick/Sql/Sql/Sql.csproj       |   13 +
 .../Cache/BinaryModeThin/BinaryModeThin.csproj     |   13 +
 .../examples/Thin/Cache/BinaryModeThin/Program.cs  |  232 ++
 .../OptimisticTransactionThin.csproj               |   13 +
 .../Cache/OptimisticTransactionThin/Program.cs     |  108 +
 .../examples/Thin/Cache/PutGetThin/Program.cs      |  202 ++
 .../Thin/Cache/PutGetThin/PutGetThin.csproj        |   13 +
 .../Thin/Cache/QueryContinuousThin/Program.cs      |   93 +
 .../QueryContinuousThin/QueryContinuousThin.csproj |   13 +
 .../examples/Thin/Cache/QueryScanThin/Program.cs   |   71 +
 .../Thin/Cache/QueryScanThin/QueryScanThin.csproj  |   13 +
 .../examples/Thin/Cache/TransactionThin/Program.cs |  137 ++
 .../Cache/TransactionThin/TransactionThin.csproj   |   13 +
 .../examples/Thin/Misc/ServicesThin/Program.cs     |   79 +
 .../Thin/Misc/ServicesThin/ServicesThin.csproj     |   13 +
 modules/platforms/dotnet/examples/Thin/README.md   |    3 +
 .../examples/Thin/Sql/DdlThin/DdlThin.csproj       |   13 +
 .../dotnet/examples/Thin/Sql/DdlThin/Program.cs    |  104 +
 .../examples/Thin/Sql/DmlThin/DmlThin.csproj       |   13 +
 .../dotnet/examples/Thin/Sql/DmlThin/Program.cs    |  152 ++
 .../examples/Thin/Sql/LinqThin/LinqThin.csproj     |   13 +
 .../dotnet/examples/Thin/Sql/LinqThin/Program.cs   |  319 +++
 .../dotnet/examples/Thin/Sql/SqlThin/Program.cs    |  249 ++
 .../examples/Thin/Sql/SqlThin/SqlThin.csproj       |   13 +
 .../dotnetcore/Apache.Ignite.Examples.csproj       |   29 -
 .../dotnet/examples/dotnetcore/App.config          |   38 -
 .../dotnet/examples/dotnetcore/Employee.cs         |   67 -
 .../dotnet/examples/dotnetcore/LinqExample.cs      |  239 --
 .../dotnet/examples/dotnetcore/Organization.cs     |   58 -
 .../dotnet/examples/dotnetcore/Program.cs          |  109 -
 .../dotnet/examples/dotnetcore/PutGetExample.cs    |  122 -
 .../dotnet/examples/dotnetcore/README.txt          |    8 -
 .../dotnet/examples/dotnetcore/SqlExample.cs       |  191 --
 .../dotnet/examples/images/rider-sidebar.png       |  Bin 0 -> 48065 bytes
 modules/platforms/dotnet/examples/images/rider.png |  Bin 0 -> 21953 bytes
 .../platforms/dotnet/examples/images/vs-code.png   |  Bin 0 -> 29808 bytes
 modules/platforms/dotnet/examples/images/vs.png    |  Bin 0 -> 8262 bytes
 modules/platforms/dotnet/release/verify-nuget.ps1  |    2 +-
 .../platforms/dotnet/run-dotnetcore-examples.bat   |   27 -
 modules/platforms/dotnet/templates/README.md       |   32 +
 .../.template.config/template.json                 |   16 +
 .../Apache.Ignite.Example/ExampleProject.csproj    |   13 +
 .../internal/Apache.Ignite.Example/Program.cs      |   50 +
 .../.template.config/template.json                 |   16 +
 .../ExampleProjectThin.csproj                      |   13 +
 .../internal/Apache.Ignite.ExampleThin/Program.cs  |   57 +
 .../Apache.Ignite.Examples.csproj                  |   32 +
 modules/platforms/nodejs/README.md                 |   32 -
 modules/platforms/nodejs/api_spec/conf.json        |   12 -
 .../platforms/nodejs/examples/AuthTlsExample.js    |  128 -
 .../nodejs/examples/CachePutGetExample.js          |  186 --
 .../platforms/nodejs/examples/FailoverExample.js   |   59 -
 modules/platforms/nodejs/examples/SqlExample.js    |  242 --
 .../nodejs/examples/SqlQueryEntriesExample.js      |  136 --
 modules/platforms/nodejs/examples/certs/ca.crt     |   32 -
 modules/platforms/nodejs/examples/certs/client.crt |   30 -
 modules/platforms/nodejs/examples/certs/client.key |   51 -
 .../platforms/nodejs/examples/certs/keystore.jks   |  Bin 3828 -> 0 bytes
 .../platforms/nodejs/examples/certs/truststore.jks |  Bin 1477 -> 0 bytes
 modules/platforms/nodejs/index.js                  |   43 -
 modules/platforms/nodejs/lib/BinaryObject.js       |  530 -----
 modules/platforms/nodejs/lib/CacheClient.js        |  759 ------
 modules/platforms/nodejs/lib/CacheConfiguration.js | 1734 --------------
 modules/platforms/nodejs/lib/Cursor.js             |  307 ---
 modules/platforms/nodejs/lib/EnumItem.js           |  212 --
 modules/platforms/nodejs/lib/Errors.js             |  133 --
 modules/platforms/nodejs/lib/IgniteClient.js       |  290 ---
 .../nodejs/lib/IgniteClientConfiguration.js        |  112 -
 modules/platforms/nodejs/lib/ObjectType.js         |  600 -----
 modules/platforms/nodejs/lib/Query.js              |  508 ----
 modules/platforms/nodejs/lib/Timestamp.js          |   76 -
 .../nodejs/lib/internal/ArgumentChecker.js         |   83 -
 .../nodejs/lib/internal/BinaryCommunicator.js      |  409 ----
 .../platforms/nodejs/lib/internal/BinaryType.js    |  483 ----
 .../nodejs/lib/internal/BinaryTypeStorage.js       |  112 -
 .../platforms/nodejs/lib/internal/BinaryUtils.js   |  602 -----
 .../nodejs/lib/internal/ClientFailoverSocket.js    |  134 --
 .../platforms/nodejs/lib/internal/ClientSocket.js  |  454 ----
 modules/platforms/nodejs/lib/internal/Logger.js    |   45 -
 .../platforms/nodejs/lib/internal/MessageBuffer.js |  293 ---
 modules/platforms/nodejs/package.json              |   40 -
 modules/platforms/nodejs/spec/ExamplesExecutor.js  |   28 -
 modules/platforms/nodejs/spec/TestingHelper.js     |  391 ---
 .../nodejs/spec/cache/BinaryObject.spec.js         |  176 --
 modules/platforms/nodejs/spec/cache/Cache.spec.js  |  262 ---
 .../nodejs/spec/cache/CacheKeyValueOps.spec.js     | 1022 --------
 .../nodejs/spec/cache/CachePutGetDiffTypes.spec.js |  686 ------
 .../nodejs/spec/cache/ComplexObject.spec.js        |  540 -----
 modules/platforms/nodejs/spec/cache/UUID.spec.js   |  105 -
 modules/platforms/nodejs/spec/config.js            |   27 -
 .../nodejs/spec/examples/AuthExample.spec.js       |   33 -
 .../nodejs/spec/examples/Examples.spec.js          |   45 -
 .../platforms/nodejs/spec/query/ScanQuery.spec.js  |  207 --
 .../nodejs/spec/query/SqlFieldsQuery.spec.js       |  266 ---
 .../platforms/nodejs/spec/query/SqlQuery.spec.js   |  247 --
 modules/platforms/nodejs/spec/support/jasmine.json |   11 -
 modules/platforms/php/.gitignore                   |    2 -
 modules/platforms/php/README.md                    |   37 -
 modules/platforms/php/api_docs/Doxyfile            | 2487 --------------------
 modules/platforms/php/composer.json                |   27 -
 modules/platforms/php/examples/AuthTlsExample.php  |  129 -
 .../platforms/php/examples/CachePutGetExample.php  |  184 --
 modules/platforms/php/examples/FailoverExample.php |   67 -
 modules/platforms/php/examples/SqlExample.php      |  237 --
 .../php/examples/SqlQueryEntriesExample.php        |  127 -
 modules/platforms/php/examples/certs/ca.pem        |   32 -
 modules/platforms/php/examples/certs/client.pem    |   81 -
 modules/platforms/php/examples/certs/keystore.jks  |  Bin 3828 -> 0 bytes
 .../platforms/php/examples/certs/truststore.jks    |  Bin 1477 -> 0 bytes
 .../src/Apache/Ignite/Cache/CacheConfiguration.php | 1011 --------
 .../php/src/Apache/Ignite/Cache/CacheEntry.php     |   60 -
 .../php/src/Apache/Ignite/Cache/CacheInterface.php |  379 ---
 .../Apache/Ignite/Cache/CacheKeyConfiguration.php  |  107 -
 .../php/src/Apache/Ignite/Cache/QueryEntity.php    |  315 ---
 .../php/src/Apache/Ignite/Cache/QueryField.php     |  279 ---
 .../php/src/Apache/Ignite/Cache/QueryIndex.php     |  191 --
 modules/platforms/php/src/Apache/Ignite/Client.php |  243 --
 .../php/src/Apache/Ignite/ClientConfiguration.php  |  294 ---
 .../php/src/Apache/Ignite/Data/BinaryObject.php    |  469 ----
 .../platforms/php/src/Apache/Ignite/Data/Date.php  |   83 -
 .../php/src/Apache/Ignite/Data/EnumItem.php        |  155 --
 .../platforms/php/src/Apache/Ignite/Data/Time.php  |   58 -
 .../php/src/Apache/Ignite/Data/Timestamp.php       |   66 -
 .../Apache/Ignite/Exception/ClientException.php    |   35 -
 .../Ignite/Exception/NoConnectionException.php     |   35 -
 .../Apache/Ignite/Exception/OperationException.php |   35 -
 .../Exception/OperationStatusUnknownException.php  |   35 -
 .../Ignite/Internal/Binary/BinaryCommunicator.php  |  493 ----
 .../Apache/Ignite/Internal/Binary/BinaryField.php  |   78 -
 .../Ignite/Internal/Binary/BinaryObjectField.php   |  113 -
 .../Apache/Ignite/Internal/Binary/BinarySchema.php |  145 --
 .../Apache/Ignite/Internal/Binary/BinaryType.php   |  233 --
 .../Ignite/Internal/Binary/BinaryTypeBuilder.php   |  207 --
 .../Ignite/Internal/Binary/BinaryTypeStorage.php   |  123 -
 .../Apache/Ignite/Internal/Binary/BinaryUtils.php  |  450 ----
 .../Ignite/Internal/Binary/ClientOperation.php     |   64 -
 .../Ignite/Internal/Binary/MessageBuffer.php       |  307 ---
 .../src/Apache/Ignite/Internal/Binary/Request.php  |   85 -
 .../src/Apache/Ignite/Internal/Binary/TypeInfo.php |  312 ---
 .../php/src/Apache/Ignite/Internal/Cache.php       |  387 ---
 .../Internal/Connection/ClientFailoverSocket.php   |  134 --
 .../Ignite/Internal/Connection/ClientSocket.php    |  247 --
 .../Ignite/Internal/Connection/ProtocolVersion.php |   82 -
 .../src/Apache/Ignite/Internal/Query/Cursor.php    |  166 --
 .../Ignite/Internal/Query/SqlFieldsCursor.php      |   75 -
 .../Ignite/Internal/Utils/ArgumentChecker.php      |   87 -
 .../src/Apache/Ignite/Internal/Utils/Logger.php    |   62 -
 .../src/Apache/Ignite/Query/CursorInterface.php    |   56 -
 .../php/src/Apache/Ignite/Query/Query.php          |   70 -
 .../php/src/Apache/Ignite/Query/ScanQuery.php      |   88 -
 .../Ignite/Query/SqlFieldsCursorInterface.php      |   82 -
 .../php/src/Apache/Ignite/Query/SqlFieldsQuery.php |  206 --
 .../php/src/Apache/Ignite/Query/SqlQuery.php       |  225 --
 .../Apache/Ignite/Type/CollectionObjectType.php    |  142 --
 .../src/Apache/Ignite/Type/ComplexObjectType.php   |  165 --
 .../php/src/Apache/Ignite/Type/MapObjectType.php   |  123 -
 .../php/src/Apache/Ignite/Type/ObjectArrayType.php |   68 -
 .../php/src/Apache/Ignite/Type/ObjectType.php      |  442 ----
 modules/platforms/php/tests/BinaryObjectTest.php   |  196 --
 .../platforms/php/tests/CacheKeyValueOpsTest.php   |  763 ------
 modules/platforms/php/tests/CachePutGetTest.php    |  765 ------
 modules/platforms/php/tests/CacheTest.php          |  240 --
 modules/platforms/php/tests/ComplexObjectTest.php  |  428 ----
 modules/platforms/php/tests/ScanQueryTest.php      |  167 --
 modules/platforms/php/tests/SqlFieldsQueryTest.php |  224 --
 modules/platforms/php/tests/SqlQueryTest.php       |  204 --
 modules/platforms/php/tests/TestConfig.php         |   37 -
 modules/platforms/php/tests/TestingHelper.php      |  363 ---
 .../php/tests/examples/ExecuteAuthTlsExample.php   |   36 -
 .../php/tests/examples/ExecuteExamples.php         |   61 -
 modules/platforms/python/LICENSE                   |  202 --
 modules/platforms/python/README.md                 |   75 -
 modules/platforms/python/docs/Makefile             |   20 -
 modules/platforms/python/docs/conf.py              |  176 --
 .../python/docs/datatypes/cache_props.rst          |  163 --
 .../platforms/python/docs/datatypes/parsers.rst    |  175 --
 modules/platforms/python/docs/examples.rst         |  624 -----
 modules/platforms/python/docs/index.rst            |   33 -
 modules/platforms/python/docs/modules.rst          |   31 -
 modules/platforms/python/docs/readme.rst           |  202 --
 modules/platforms/python/docs/source/modules.rst   |    7 -
 .../python/docs/source/pyignite.api.binary.rst     |    7 -
 .../docs/source/pyignite.api.cache_config.rst      |    7 -
 .../python/docs/source/pyignite.api.key_value.rst  |    7 -
 .../python/docs/source/pyignite.api.result.rst     |    7 -
 .../platforms/python/docs/source/pyignite.api.rst  |   19 -
 .../python/docs/source/pyignite.api.sql.rst        |    7 -
 .../python/docs/source/pyignite.binary.rst         |    7 -
 .../python/docs/source/pyignite.cache.rst          |    7 -
 .../python/docs/source/pyignite.client.rst         |    7 -
 .../docs/source/pyignite.connection.generators.rst |    7 -
 .../docs/source/pyignite.connection.handshake.rst  |    7 -
 .../python/docs/source/pyignite.connection.rst     |   17 -
 .../python/docs/source/pyignite.connection.ssl.rst |    7 -
 .../python/docs/source/pyignite.constants.rst      |    7 -
 .../python/docs/source/pyignite.datatypes.base.rst |    7 -
 .../docs/source/pyignite.datatypes.binary.rst      |    7 -
 .../source/pyignite.datatypes.cache_config.rst     |    7 -
 .../source/pyignite.datatypes.cache_properties.rst |    7 -
 .../docs/source/pyignite.datatypes.complex.rst     |    7 -
 .../docs/source/pyignite.datatypes.internal.rst    |    7 -
 .../docs/source/pyignite.datatypes.key_value.rst   |    7 -
 .../docs/source/pyignite.datatypes.null_object.rst |    7 -
 .../docs/source/pyignite.datatypes.primitive.rst   |    7 -
 .../source/pyignite.datatypes.primitive_arrays.rst |    7 -
 .../pyignite.datatypes.primitive_objects.rst       |    7 -
 .../docs/source/pyignite.datatypes.prop_codes.rst  |    7 -
 .../python/docs/source/pyignite.datatypes.rst      |   29 -
 .../python/docs/source/pyignite.datatypes.sql.rst  |    7 -
 .../docs/source/pyignite.datatypes.standard.rst    |    7 -
 .../docs/source/pyignite.datatypes.type_codes.rst  |    7 -
 .../python/docs/source/pyignite.exceptions.rst     |    7 -
 .../docs/source/pyignite.queries.op_codes.rst      |    7 -
 .../python/docs/source/pyignite.queries.rst        |   15 -
 modules/platforms/python/docs/source/pyignite.rst  |   30 -
 .../python/docs/source/pyignite.utils.rst          |    7 -
 modules/platforms/python/examples/binary_basics.py |   53 -
 modules/platforms/python/examples/create_binary.py |  103 -
 modules/platforms/python/examples/failover.py      |   61 -
 modules/platforms/python/examples/get_and_put.py   |   41 -
 .../platforms/python/examples/migrate_binary.py    |  190 --
 modules/platforms/python/examples/read_binary.py   |  275 ---
 modules/platforms/python/examples/readme.md        |   17 -
 modules/platforms/python/examples/scans.py         |   55 -
 modules/platforms/python/examples/sql.py           |  298 ---
 modules/platforms/python/examples/type_hints.py    |   51 -
 modules/platforms/python/pyignite/__init__.py      |   17 -
 modules/platforms/python/pyignite/api/__init__.py  |   71 -
 modules/platforms/python/pyignite/api/binary.py    |  209 --
 .../platforms/python/pyignite/api/cache_config.py  |  279 ---
 modules/platforms/python/pyignite/api/key_value.py |  995 --------
 modules/platforms/python/pyignite/api/result.py    |   38 -
 modules/platforms/python/pyignite/api/sql.py       |  475 ----
 modules/platforms/python/pyignite/binary.py        |  136 --
 modules/platforms/python/pyignite/cache.py         |  595 -----
 modules/platforms/python/pyignite/client.py        |  406 ----
 .../python/pyignite/connection/__init__.py         |  333 ---
 .../python/pyignite/connection/generators.py       |   48 -
 .../python/pyignite/connection/handshake.py        |   91 -
 .../platforms/python/pyignite/connection/ssl.py    |   49 -
 modules/platforms/python/pyignite/constants.py     |   52 -
 .../python/pyignite/datatypes/__init__.py          |   27 -
 .../platforms/python/pyignite/datatypes/base.py    |   24 -
 .../platforms/python/pyignite/datatypes/binary.py  |   45 -
 .../python/pyignite/datatypes/cache_config.py      |  153 --
 .../python/pyignite/datatypes/cache_properties.py  |  287 ---
 .../platforms/python/pyignite/datatypes/complex.py |  526 -----
 .../python/pyignite/datatypes/internal.py          |  472 ----
 .../python/pyignite/datatypes/key_value.py         |   24 -
 .../python/pyignite/datatypes/null_object.py       |   64 -
 .../python/pyignite/datatypes/primitive.py         |  106 -
 .../python/pyignite/datatypes/primitive_arrays.py  |  208 --
 .../python/pyignite/datatypes/primitive_objects.py |  158 --
 .../python/pyignite/datatypes/prop_codes.py        |   51 -
 modules/platforms/python/pyignite/datatypes/sql.py |   23 -
 .../python/pyignite/datatypes/standard.py          |  739 ------
 .../python/pyignite/datatypes/type_codes.py        |   57 -
 modules/platforms/python/pyignite/exceptions.py    |   80 -
 .../platforms/python/pyignite/queries/__init__.py  |  339 ---
 .../platforms/python/pyignite/queries/op_codes.py  |   65 -
 modules/platforms/python/pyignite/utils.py         |  172 --
 modules/platforms/python/requirements/docs.txt     |    6 -
 modules/platforms/python/requirements/install.txt  |    4 -
 modules/platforms/python/requirements/setup.txt    |    3 -
 modules/platforms/python/requirements/tests.txt    |    5 -
 modules/platforms/python/setup.py                  |  104 -
 modules/platforms/python/tests/config/ssl.xml      |   58 -
 .../platforms/python/tests/config/ssl/README.txt   |    3 -
 .../python/tests/config/ssl/client_full.pem        |   52 -
 .../tests/config/ssl/client_with_pass_full.pem     |   54 -
 .../platforms/python/tests/config/ssl/server.jks   |  Bin 2380 -> 0 bytes
 .../platforms/python/tests/config/ssl/trust.jks    |  Bin 1346 -> 0 bytes
 modules/platforms/python/tests/conftest.py         |  227 --
 modules/platforms/python/tests/test_binary.py      |  280 ---
 modules/platforms/python/tests/test_cache_class.py |  221 --
 .../platforms/python/tests/test_cache_class_sql.py |  103 -
 .../platforms/python/tests/test_cache_config.py    |   75 -
 modules/platforms/python/tests/test_datatypes.py   |  176 --
 modules/platforms/python/tests/test_examples.py    |   57 -
 .../platforms/python/tests/test_generic_object.py  |   33 -
 modules/platforms/python/tests/test_get_names.py   |   30 -
 modules/platforms/python/tests/test_handshake.py   |   64 -
 modules/platforms/python/tests/test_key_value.py   |  400 ----
 modules/platforms/python/tests/test_scan.py        |   66 -
 modules/platforms/python/tests/test_sql.py         |  184 --
 modules/rest-http/pom.xml                          |   11 +-
 .../http/jetty/GridJettyObjectMapper.java          |   27 +-
 .../protocols/http/jetty/GridJettyRestHandler.java |    6 +-
 modules/scalar-2.10/pom.xml                        |   13 +-
 modules/scalar/pom.xml                             |   49 +-
 .../scalar/testsuites/ScalarSelfTestSuite.scala    |    2 -
 modules/schedule/pom.xml                           |    3 +-
 modules/slf4j/pom.xml                              |   11 +-
 modules/spark-2.4/pom.xml                          |   11 +-
 .../org/apache/ignite/spark/impl/QueryHelper.scala |    2 +-
 .../apache/ignite/spark/IgniteDataFrameSuite.scala |    6 +-
 modules/spark/pom.xml                              |   11 +-
 .../org/apache/ignite/spark/impl/QueryHelper.scala |    2 +-
 .../apache/ignite/spark/IgniteDataFrameSuite.scala |    6 +-
 modules/spring/pom.xml                             |   18 +-
 .../org/apache/ignite/IgniteClientSpringBean.java  |  258 ++
 .../java/org/apache/ignite/IgniteSpringBean.java   |    2 +
 .../apache/ignite/cache/spring/SpringCache.java    |  172 --
 .../ignite/cache/spring/SpringCacheManager.java    |  389 ---
 .../apache/ignite/cache/spring/package-info.java   |   23 -
 .../spring/IgniteTransactionHolder.java            |   97 -
 .../spring/SpringTransactionManager.java           |  561 -----
 .../ignite/transactions/spring/package-info.java   |   22 -
 .../spring-transactions-ignite-spring-bean.xml     |   67 -
 .../src/test/java/config/spring-transactions.xml   |   35 -
 .../apache/ignite/TestInjectionLifecycleBean.java  |   42 -
 .../spring/GridSpringCacheManagerAbstractTest.java |  398 ----
 .../GridSpringCacheManagerMultiJvmSelfTest.java    |  131 --
 .../spring/GridSpringCacheManagerSelfTest.java     |   64 -
 .../GridSpringCacheManagerSpringBeanSelfTest.java  |   46 -
 .../cache/spring/GridSpringCacheTestKey.java       |   61 -
 .../spring/GridSpringCacheTestKeyGenerator.java    |   40 -
 .../cache/spring/GridSpringCacheTestService.java   |  181 --
 .../spring/GridSpringDynamicCacheTestService.java  |   98 -
 .../SpringCacheManagerContextInjectionTest.java    |  128 -
 .../ignite/cache/spring/SpringCacheTest.java       |  184 --
 .../spring/spring-caching-ignite-spring-bean.xml   |   90 -
 .../apache/ignite/cache/spring/spring-caching.xml  |   57 -
 .../apache/ignite/cache/spring/spring-caching1.xml |   56 -
 .../apache/ignite/cache/spring/spring-caching2.xml |   56 -
 .../SpringEncryptedCacheRestartTest.java           |   10 +-
 .../internal/IgniteClientSpringBeanTest.java       |   61 +
 .../ignite/internal/ignite-client-spring-bean.xml  |   40 +
 .../resource/GridResourceProcessorSelfTest.java    |    3 +-
 .../GridSpringResourceInjectionSelfTest.java       |    2 +-
 .../org/apache/ignite/spring-injection-test.xml    |   43 -
 ...gniteSpringBeanSpringResourceInjectionTest.java |    6 +-
 .../apache/ignite/spring/injection/spring-bean.xml |    3 +-
 .../ignite/testsuites/IgniteSpringTestSuite.java   |   23 +-
 .../GridSpringTransactionManagerAbstractTest.java  |  142 --
 .../GridSpringTransactionManagerSelfTest.java      |   66 -
 ...SpringTransactionManagerSpringBeanSelfTest.java |   58 -
 .../spring/GridSpringTransactionService.java       |   66 -
 ...ringTransactionManagerContextInjectionTest.java |  128 -
 modules/sqlline/bin/sqlline.bat                    |    8 +-
 modules/sqlline/bin/sqlline.sh                     |    6 +-
 modules/sqlline/pom.xml                            |    2 +-
 modules/ssh/pom.xml                                |   12 +-
 modules/tools/pom.xml                              |   68 +-
 .../tools/ant/beautifier/GridJavadocAntTask.java   |    3 +-
 .../surefire/testsuites/AssertOnOrphanedTests.java |   58 +
 .../surefire/testsuites/CheckAllTestsInSuites.java |  127 +
 .../surefire/testsuites/IgniteTestsProvider.java   |  131 ++
 .../testsuites/OrphanedTestCollection.java         |  123 +
 ...che.maven.surefire.providerapi.SurefireProvider |    1 +
 modules/urideploy/pom.xml                          |   12 +-
 .../spi/deployment/uri/UriDeploymentSpi.java       |    4 +-
 .../scanners/file/UriDeploymentFileScanner.java    |    2 +-
 .../UriDeploymentAbsentProcessorClassTest.java     |  117 +
 .../testsuites/IgniteUriDeploymentTestSuite.java   |    4 +-
 modules/visor-console-2.10/pom.xml                 |   14 +-
 modules/visor-console/pom.xml                      |   13 +-
 modules/visor-plugins/pom.xml                      |   13 +-
 modules/web/ignite-appserver-test/pom.xml          |    2 +-
 modules/web/ignite-websphere-test/pom.xml          |    2 +-
 modules/web/pom.xml                                |   12 +-
 .../servlet/ServletContextListenerStartup.java     |    6 +-
 .../ignite/startup/servlet/ServletStartup.java     |    6 +-
 .../benchmark-cache-pagereplacements.properties    |  124 +
 .../benchmark-cache-pegereplacements.properties    |   83 -
 .../ignite-localhost-pagereplacement-config.xml    |   79 +
 modules/yardstick/pom.xml                          |    2 +-
 .../ignite/yardstick/IgniteBenchmarkArguments.java |   29 +-
 .../org/apache/ignite/yardstick/IgniteNode.java    |    8 +-
 .../IgniteAbstractPageReplacementBenchmark.java    |  216 ++
 .../cache/IgniteCacheAbstractBenchmark.java        |    2 +-
 .../IgniteGetWithPageReplacementBenchmark.java     |   41 +
 .../cache/IgnitePutGetWithPageReplacements.java    |  171 --
 .../IgnitePutWithPageReplacementBenchmark.java     |   43 +
 .../yardstick/cache/jdbc/RdbmsBenchmark.java       |    4 +-
 .../jdbc/NativeJavaApiPutRemoveBenchmark.java      |    2 +-
 .../jdbc/NativeSqlInsertDeleteBenchmark.java       |    2 +-
 .../jdbc/NativeSqlJoinQueryRangeBenchmark.java     |    6 +-
 modules/yarn/pom.xml                               |   12 +-
 modules/yarn/src/main/resources/ignite.properties  |    2 +-
 modules/zookeeper/pom.xml                          |   12 +-
 .../spi/discovery/zk/internal/ZkIgnitePaths.java   |    2 +-
 .../zk/internal/ZookeeperDiscoveryImpl.java        |   14 +
 .../zk/internal/ZookeeperDiscoveryStatistics.java  |   18 +-
 .../zk/ZookeeperDiscoverySpiTestSuite4.java        |    4 +-
 .../zk/ZookeeperDiscoverySpiTestUtil.java          |    4 +-
 packaging/deb/changelog                            |    6 +
 packaging/rpm/apache-ignite.spec                   |    5 +-
 parent/pom.xml                                     |   40 +-
 pom.xml                                            |   71 +-
 2632 files changed, 90519 insertions(+), 74775 deletions(-)
 create mode 100644 docs/_docs/code-snippets/cpp/src/broadcast_jobs_to_remote_nodes.cpp
 create mode 100644 docs/_docs/code-snippets/cpp/src/predefined_cluster_groups.cpp
 create mode 100644 docs/_docs/code-snippets/java/src/main/java/org/apache/ignite/snippets/WarmUpStrategy.java
 create mode 100644 docs/_docs/code-snippets/xml/warm-up-strategy.xml
 create mode 100644 docs/_docs/extensions-and-integrations/performance-statistics.adoc
 create mode 100644 docs/_docs/extensions-and-integrations/spring/spring-tx.adoc
 delete mode 100644 docs/_docs/installation/index.adoc
 create mode 100644 docs/_docs/monitoring-metrics/performance-statistics.adoc
 create mode 100644 docs/_docs/net-specific/net-async.adoc
 create mode 100644 docs/_docs/persistence/native-persistence-defragmentation.adoc
 create mode 100644 docs/_docs/persistence/snapshot-directory.adoc
 delete mode 100644 docs/_docs/persistence/snapshots.adoc
 create mode 100644 docs/_docs/security/cache-encryption-key-rotation.adoc
 create mode 100644 docs/_docs/snapshots/snapshots.adoc
 create mode 100644 examples/src/main/java/org/apache/ignite/examples/client/ClientKubernetesPutGetExample.java
 create mode 100644 modules/azure/README.txt
 create mode 100644 modules/azure/pom.xml
 create mode 100644 modules/azure/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinder.java
 create mode 100644 modules/azure/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/package-info.java
 create mode 100644 modules/azure/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinderSelfTest.java
 create mode 100644 modules/azure/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/package-info.java
 create mode 100644 modules/azure/src/test/java/org/apache/ignite/testsuites/IgniteAzureTestSuite.java
 create mode 100644 modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/cache/JmhCacheAsyncListenBenchmark.java
 create mode 100644 modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/misc/JmhSegmentedLruListBenchmark.java
 create mode 100644 modules/cassandra/serializers/src/test/java/org/apache/ignite/tests/SerializerSuite.java
 create mode 100644 modules/clients/src/test/config/jdbc-security-config.xml
 create mode 100644 modules/clients/src/test/java/org/apache/ignite/common/ClientSideCacheCreationDestructionWileTopologyChangeTest.java
 create mode 100644 modules/clients/src/test/java/org/apache/ignite/common/ClientSizeCacheCreationDestructionTest.java
 create mode 100644 modules/clients/src/test/java/org/apache/ignite/common/RunningQueryInfoCheckInitiatorTest.java
 create mode 100644 modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcCursorLeaksTest.java
 create mode 100644 modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAuthenticatorUserManagementAuthorizationTest.java
 create mode 100644 modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexAbstractCompatibilityTest.java
 create mode 100644 modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexTypesCompatibilityTest.java
 create mode 100644 modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/InlineJavaObjectCompatibilityTest.java
 create mode 100644 modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/performancestatistics/PerformanceStatisticsCommand.java
 create mode 100644 modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/performancestatistics/PerformanceStatisticsSubCommand.java
 create mode 100644 modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerInterruptCommandTest.java
 create mode 100644 modules/control-utility/src/test/java/org/apache/ignite/util/PerformanceStatisticsCommandTest.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeColocatedBackupFilter.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/client/ClientDisconnectListener.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/configuration/PageReplacementMode.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/AbstractIndex.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/Index.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexDefinition.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexName.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/IndexProcessor.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/NullsOrder.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/Order.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/SingleCursor.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/SortOrder.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/DurableBackgroundCleanupIndexTreeTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyDefinition.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyTypeSettings.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexKeyTypes.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRow.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCache.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCacheRegistry.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowComparator.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowCompartorImpl.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexRowImpl.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexSearchRowImpl.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/IndexValueCursor.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/InlineIndexRowHandler.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/InlineIndexRowHandlerFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/MetaPageInfo.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/SortedIndexDefinition.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/SortedSegmentedIndex.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/ThreadLocalRowHandlerHolder.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/DefragIndexFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/IndexingDefragmentation.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/IndexQueryContext.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndex.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexImpl.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexKeyTypeRegistry.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexTree.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineObjectBytesDetector.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineRecommender.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineTreeFilterClosure.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/JavaObjectKeySerializer.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/AbstractInlineInnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/AbstractInlineLeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/AbstractInnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/AbstractLeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/IORowHandler.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/InlineIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/InlineInnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/InlineLeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/InnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/LeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/MvccIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/MvccInlineInnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/MvccInlineLeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/MvccInnerIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/io/MvccLeafIO.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BooleanInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ByteInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/BytesInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DateInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DateValueConstants.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/DoubleInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/FloatInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/IntegerInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/LongInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/NullableInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ObjectByteArrayInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ObjectHashInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/ShortInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/SignedBytesInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/StringInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/StringNoCompareInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/TimeInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/TimestampInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/inline/types/UuidInlineIndexKeyType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/AbstractDateIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/AbstractTimeIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/AbstractTimestampIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BooleanIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ByteIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BytesCompareUtils.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/BytesIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/CacheJavaObjectIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DecimalIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/DoubleIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/FloatIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IndexKeyFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/IntegerIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/JavaObjectIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/LongIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/NullIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/PlainJavaObjectIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/ShortIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/SignedBytesIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/StringIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/keys/UuidIndexKey.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntryListenerHandler.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientCacheEntryListenersRegistry.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientContinuousQueryCursor.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheAdapter.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientJCacheEntryListenerAdapter.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientNotificationType.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcCloseCursorTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcQueryMultipleStatementsTaskV3.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/encryption/EncryptionCacheKeyProvider.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/IndexesRebuildTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/AtomicLongViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/AtomicReferenceViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/AtomicSequenceViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/AtomicStampedViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/CountDownLatchViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/QueueViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/ReentrantLockViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SemaphoreViewWalker.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/SetViewWalker.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/AuthorizationContext.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/PartitionUpdateCounterErrorWrapper.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/PartitionCountersNeighborcastRequest.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/msg/PartitionCountersNeighborcastResponse.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/EncryptionUtil.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/metastorage/pendingtask/DurableBackgroundTaskResult.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/ClockPageReplacementFlags.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/ClockPageReplacementPolicy.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/ClockPageReplacementPolicyFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageReplacementPolicy.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageReplacementPolicyFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RandomLruPageReplacementPolicy.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RandomLruPageReplacementPolicyFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/SegmentedLruPageList.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/SegmentedLruPageReplacementPolicy.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/SegmentedLruPageReplacementPolicyFactory.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotVerifyException.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadata.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotMetadataCollectorTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotOperationRequest.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotPartitionsVerifyTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/PartitionCountersNeighborcastFuture.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/BaselineTopologyUpdater.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/baseline/autoadjust/ChangeTopologyWatcher.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/diagnostic/PageHistoryDiagnoster.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/localtask/DurableBackgroundTaskState.java
 delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/metastorage/persistence/DmsWorkerStatus.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/binary/ClientBinaryConfigurationGetRequest.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/binary/ClientBinaryConfigurationGetResponse.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/IndexRebuildAware.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaIndexCacheCompoundFuture.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaIndexCacheFuture.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaIndexOperationCancellationException.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/util/GridMutableLong.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/visor/annotation/InterruptibleVisorTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/visor/performancestatistics/VisorPerformanceStatisticsOperation.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/visor/performancestatistics/VisorPerformanceStatisticsTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/visor/performancestatistics/VisorPerformanceStatisticsTaskArg.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/visor/snapshot/VisorSnapshotCheckTask.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/lang/IgniteProducer.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/internal/TcpHandshakeExecutor.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/AbstractDataStructureView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/AtomicLongView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/AtomicReferenceView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/AtomicSequenceView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/AtomicStampedView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/CountDownLatchView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/QueueView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/ReentrantLockView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/SemaphoreView.java
 create mode 100644 modules/core/src/main/java/org/apache/ignite/spi/systemview/view/datastructures/SetView.java
 create mode 100644 modules/core/src/test/config/class_list_test_excluded.txt
 create mode 100644 modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/ClusterNodeAttributeColocatedBackupFilterSelfTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialectTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/GridStopWithCollisionSpiTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/IgniteClientCheckClusterGroupLocalIdAfterReconnect.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/internal/RaceOnDeployClassesWithSameAliases.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/cache/query/index/sorted/inline/InlineIndexKeyTypeRegistryTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/client/thin/CacheEntryListenersTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/managers/deployment/GridDifferentLocalDeploymentSelfTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/metric/SystemMetricsTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAsyncContinuationExecutorTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheAsyncContinuationSynchronousExecutorTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/RebalanceIteratorLargeEntriesOOMTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/RestorePartitionStateTest.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheMultithreadedFailoverAbstractTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheMultithreadedFailoverTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridExchangeFreeCellularSwitchTxContinuationTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridExchangeFreeCellularSwitchTxCountersTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCachePartitionsUpdateCountersAndSizeTest.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCacheConcurrentPutGetRemove.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCacheConcurrentPutGetRemoveTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionEvictionOrderTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/CacheRebalanceWithRemovedWalSegment.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/RebalanceMetricsTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgniteLogicalRecoveryWithParamsTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/SlowCheckpointFileIOFactory.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalArchiveSizeConfigurationTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WriteAheadLogManagerSelfTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/ClockPageReplacementFlagsTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/SegmentedLruPageListTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreBaseTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreSelfTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotWithMetastorageTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/WalArchiveConsistencyTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/WalEnableDisableWithNodeShutdownTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/WalEnableDisableWithRestartsTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryDeploymentToClientTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxRecoveryOnCoordniatorFailTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cluster/ClusterNameBeforeActivation.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerCommunicationSpiExceptionTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/localtask/DurableBackgroundTasksProcessorSelfTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/localtask/ObservingCheckpointListener.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/localtask/SimpleTask.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/metastorage/DistributedMetaStorageClassloadingTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/performancestatistics/CheckpointTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/performancestatistics/PerformanceStatisticsRotateFileTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheMetadataCommandTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/util/GridMutableLongTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/util/HostAndPortRangeTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/p2p/GridP2PContinuousDeploymentClientDisconnectTest.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/platform/Address.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/platform/Department.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/platform/Employee.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/platform/Key.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/PlatformComputeEchoArgTask.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/PlatformCustomBinaryBasicNameMapper.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/PlatformCustomBinaryNameMapper.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/PlatformTestExecutor.java
 delete mode 100644 modules/core/src/test/java/org/apache/ignite/platform/Value.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/ACL.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Account.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Address.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Department.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Employee.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Key.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/ParamValue.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Parameter.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Role.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/User.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/V1.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/V2.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/V3.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/V4.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/platform/model/Value.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationHandshakeTimeoutTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchangeTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryIpFinderFailureTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoveryWithAddressFilterTest.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TestDynamicIpFinder.java
 create mode 100644 modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderDnsResolveTest.java
 create mode 100644 modules/dev-utils/src/main/java/org/apache/ignite/development/utils/IgniteWalConverterArguments.java
 create mode 100644 modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterArgumentsTest.java
 create mode 100644 modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterTest.java
 create mode 100644 modules/dev-utils/src/test/java/org/apache/ignite/development/utils/Person.java
 create mode 100644 modules/dev-utils/src/test/java/org/apache/ignite/development/utils/PersonEx.java
 create mode 100644 modules/dev-utils/src/test/java/org/apache/ignite/development/utils/PersonKey.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PEventRemoteFilterWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PMessageRemoteListenerWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PRemoteFilterWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PRemoteFilterWithStaticInitializerFactory.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PRemoteTransformerWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PRemoteTransformerWithStaticInitializerFactory.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PSerializableRemoteFilterWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/GridP2PTestObjectWithStaticInitializer.java
 create mode 100644 modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/compute/ExternalEntryProcessor.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeoSpatialIndex.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeoSpatialIndexDefinition.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeoSpatialIndexFactory.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeoSpatialIndexImpl.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeoSpatialUtils.java
 create mode 100644 modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GeometryIndexKey.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DurableBackgroundCleanupIndexTreeTask.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCache.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IndexRebuildFullClosure.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IndexRebuildPartialClosure.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeFilterClosure.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/InlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/AbstractInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/BooleanInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/ByteInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/BytesInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/DateInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/DoubleInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/FixedStringInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/FloatInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/InlineIndexColumnFactory.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/IntegerInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/LongInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/ObjectBytesInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/ObjectHashInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/ShortInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/StringIgnoreCaseInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/StringInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/TimeInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/TimestampInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/inlinecolumn/UuidInlineIndexColumn.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasInnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasLeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2IOUtils.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasInnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasLeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccInnerIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccLeafIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java
 delete mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/defragmentation/IndexingDefragmentation.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/H2RowComparator.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/QueryIndexDefinition.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/QueryIndexKeyDefinitionProvider.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/QueryIndexRowHandler.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/QueryRowHandlerFactory.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/client/ClientIndexDefinition.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/client/ClientIndexFactory.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/client/ClientInlineIndex.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/keys/DateIndexKey.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/keys/H2ValueWrapperMixin.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/keys/TimeIndexKey.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/index/keys/TimestampIndexKey.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/UnsortedBaseReducer.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/UnsortedOneWayReducer.java
 create mode 100644 modules/indexing/src/main/java/org/apache/ignite/internal/visor/verify/ValidateIndexesContext.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheParallelismQuerySortOrderTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/encryption/EncryptedSqlTemplateTableTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ForceRebuildIndexTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/IndexesRebuildTaskEx.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/StopRebuildIndexTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckWithIndexesTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreWithIndexingTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/CleanupIndexTreeCheckpointFailoverTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/ReducerRowsBufferTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/RemoveConstantsFromQueryTest.java
 create mode 100644 modules/indexing/src/test/java/org/apache/ignite/sqltests/ReplicatedSqlCustomPartitionsTest.java
 create mode 100644 modules/kubernetes/DEVNOTES.md
 delete mode 100644 modules/kubernetes/DEVNOTES.txt
 rename modules/kubernetes/{README.txt => README.md} (100%)
 delete mode 100644 modules/kubernetes/src/test/java/org/apache/ignite/client/TestClusterClientConnection.java
 create mode 100644 modules/kubernetes/src/test/java/org/apache/ignite/kubernetes/discovery/KubernetesDiscoveryAbstractTest.java
 create mode 100644 modules/kubernetes/src/test/java/org/apache/ignite/kubernetes/discovery/TestClusterClientConnection.java
 create mode 100644 modules/kubernetes/src/test/java/org/apache/ignite/kubernetes/discovery/TestKubernetesIpFinderDisconnection.java
 create mode 100644 modules/ml/src/test/java/org/apache/ignite/ml/math/distances/DistancesTestSuite.java
 create mode 100644 modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/NaiveBayesTestSuite.java
 create mode 100644 modules/platforms/cpp/core-test/config/affinity-test-32.xml
 create mode 100644 modules/platforms/cpp/core-test/config/affinity-test-default.xml
 create mode 100644 modules/platforms/cpp/core-test/config/affinity-test.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/log/log4j-0.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/sql-query-fields-32.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/sql-query-fields-default.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/sql-query-fields.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/with-logging-0.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/config/with-logging-base.xml
 create mode 100644 modules/platforms/cpp/thin-client-test/include/ignite/test_type.h
 create mode 100644 modules/platforms/cpp/thin-client-test/src/sql_fields_query_test.cpp
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/impl/thin/cache/query/query_fields_cursor_impl.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/impl/thin/cache/query/query_fields_row_impl.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/impl/thin/copyable.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/impl/thin/copyable_writable.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/thin/cache/query/query_fields_cursor.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/thin/cache/query/query_fields_row.h
 create mode 100644 modules/platforms/cpp/thin-client/include/ignite/thin/cache/query/query_sql_fields.h
 create mode 100644 modules/platforms/cpp/thin-client/src/cache/query/query_fields_cursor.cpp
 create mode 100644 modules/platforms/cpp/thin-client/src/cache/query/query_fields_row.cpp
 create mode 100644 modules/platforms/cpp/thin-client/src/impl/cache/query/cursor_page.h
 create mode 100644 modules/platforms/cpp/thin-client/src/impl/cache/query/query_fields_cursor_impl.h
 create mode 100644 modules/platforms/cpp/thin-client/src/impl/cache/query/query_fields_row_impl.h
 create mode 100644 modules/platforms/cpp/thin-client/src/impl/transactions/transaction_impl.cpp
 copy modules/platforms/dotnet/{Apache.Ignite.Benchmarks/Apache.Ignite.Benchmarks.snk => Apache.Ignite.BenchmarkDotNet/Apache.Ignite.BenchmarkDotNet.snk} (100%)
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.BenchmarkDotNet/Binary/BinarySystemTypeReadBenchmark.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.BenchmarkDotNet/DataStreamer/DataStreamerBenchmark.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll2/Account.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll2/Address.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll2/Apache.Ignite.Core.Tests.TestDll2.csproj
 copy modules/platforms/dotnet/{Apache.Ignite.Core.Tests.TestDll/Apache.Ignite.Core.Tests.TestDll.snk => Apache.Ignite.Core.Tests.TestDll2/Apache.Ignite.Core.Tests.TestDll2.snk} (100%)
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests.TestDll2/Properties/AssemblyInfo.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheTestAsyncAwait.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/Linq/CacheLinqTest.GroupBy.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Binary/BinaryConfigurationRetrievalTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Compute/ComputeApiTypeAutoRegisterTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Compute/ComputeTestAsyncAwait.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/binary-custom-name-mapper.xml
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/binary-custom-name-mapper2.xml
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplePaths.cs
 delete mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExamplesTestBase.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/AtomicLong.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/AtomicLong_ExternalNode.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/AtomicReference.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/AtomicSequence.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/AtomicSequence_ExternalNode.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/BinaryMode.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/BinaryModeThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/ClientReconnect.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/DataStreamer.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Ddl.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/DdlThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Dml.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/DmlThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/EntryProcessor.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Events.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Events_ExternalNode.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Func.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Lifecycle.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Linq.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/LinqThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Messaging.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/MultiTieredCache.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/OptimisticTransaction.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/OptimisticTransactionThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/PeerAssemblyLoading.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/PutGet.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/PutGetThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/QueryContinuous.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/QueryContinuousThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/QueryFullText.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/QueryScan.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/QueryScanThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Services.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/ServicesThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Sql.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/SqlThin.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Store.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Task.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Task_ExternalNode.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/Transaction.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/TransactionDeadlockDetection.txt
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ExpectedOutput/TransactionThin.txt
 delete mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/PathUtil.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ThickClientExamplesTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ThickExamplesExternalNodeTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ThickExamplesTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ThinExamplesTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Examples/ThinExamplesTwoServersTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/PlatformTestService.cs
 delete mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServiceTypeAutoResolveTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServicesTypeAutoResolveTest.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core/Binary/ITimestampConverter.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core/Configuration/AsyncContinuationExecutor.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Binary/BinaryConfigurationClientInternal.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Binary/BinaryNameMapperMode.cs
 create mode 100644 modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/NativeLibraryUtils.cs
 create mode 100644 modules/platforms/dotnet/examples/.template.config/template.json
 create mode 100644 modules/platforms/dotnet/examples/.vscode/launch.json
 create mode 100644 modules/platforms/dotnet/examples/.vscode/tasks.json
 copy modules/platforms/dotnet/{Apache.Ignite.DotNetCore.sln.DotSettings => examples/Apache.Ignite.Examples.sln.DotSettings} (100%)
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Apache.Ignite.Examples.snk
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/App.config
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Compute/ClosureExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Compute/PeerAssemblyLoadingExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Compute/TaskExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/DataStructures/AtomicLongExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/DataStructures/AtomicReferenceExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/DataStructures/AtomicSequenceExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/BinaryModeExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/ContinuousQueryExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/DataStreamerExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/EntryProcessorExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/MultiTieredCacheExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/NearCacheExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/OptimisticTransactionExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/PutGetExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/QueryExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/StoreExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionDeadlockDetectionExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/TransactionExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Events/EventsExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Messaging/MessagingExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Misc/ClientReconnectExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Misc/LifecycleExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Properties/AssemblyInfo.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Services/IMapService.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Services/ServicesExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Sql/LinqExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Sql/SqlDdlExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Sql/SqlDmlExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/Sql/SqlExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/ThinClient/ThinClientPutGetExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/ThinClient/ThinClientQueryExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.Examples/ThinClient/ThinClientSqlExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.csproj
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Apache.Ignite.ExamplesDll.snk
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Binary/Account.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Binary/Address.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Binary/Employee.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Binary/Organization.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Binary/OrganizationType.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Compute/AverageSalaryJob.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Compute/AverageSalaryTask.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Compute/CharacterCountClosure.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Compute/CharacterCountReducer.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/DataStructures/AtomicLongIncrementAction.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/DataStructures/AtomicReferenceModifyAction.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/DataStructures/AtomicSequenceIncrementAction.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CacheIncrementEntryProcessor.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/CachePutEntryProcessor.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/ContinuousQueryFilter.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/EmployeeStore.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/EmployeeStoreFactory.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/EmployeeStorePredicate.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Datagrid/ScanQueryFilter.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Events/LocalListener.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Messaging/LocalListener.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Messaging/RemoteOrderedListener.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Messaging/RemoteUnorderedListener.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Messaging/Topic.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Properties/AssemblyInfo.cs
 delete mode 100644 modules/platforms/dotnet/examples/Apache.Ignite.ExamplesDll/Services/MapService.cs
 create mode 100644 modules/platforms/dotnet/examples/Directory.Build.props
 create mode 100644 modules/platforms/dotnet/examples/README.md
 delete mode 100644 modules/platforms/dotnet/examples/README.txt
 create mode 100644 modules/platforms/dotnet/examples/ServerNode/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/ServerNode/ServerNode.csproj
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/CacheIncrementEntryProcessor.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/CachePutEntryProcessor.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/ContinuousQueryFilter.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/EmployeeStore.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/EmployeeStoreFactory.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/EmployeeStorePredicate.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Cache/ScanQueryFilter.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Compute/AverageSalaryJob.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Compute/AverageSalaryTask.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Compute/CharacterCountFunc.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Compute/CharacterCountReducer.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/DataStructures/AtomicLongIncrementAction.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/DataStructures/AtomicReferenceModifyAction.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/DataStructures/AtomicSequenceIncrementAction.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Messaging/LocalMessageListener.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Messaging/RemoteOrderedMessageListener.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Messaging/RemoteUnorderedMessageListener.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Messaging/Topic.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Models/Account.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Models/Address.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Models/Employee.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Models/Organization.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Models/OrganizationType.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Services/MapService.cs
 create mode 100644 modules/platforms/dotnet/examples/Shared/Shared.csproj
 create mode 100644 modules/platforms/dotnet/examples/Shared/Utils.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/BinaryMode/BinaryMode.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/BinaryMode/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/DataStreamer/DataStreamer.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/DataStreamer/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/EntryProcessor/EntryProcessor.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/EntryProcessor/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/MultiTieredCache/MultiTieredCache.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/MultiTieredCache/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/NearCache/NearCache.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/NearCache/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/OptimisticTransaction/OptimisticTransaction.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/OptimisticTransaction/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/PutGet/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/PutGet/PutGet.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryContinuous/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryContinuous/QueryContinuous.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryFullText/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryFullText/QueryFullText.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryScan/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/QueryScan/QueryScan.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/Store/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/Store/Store.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/Transaction/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/Transaction/Transaction.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/TransactionDeadlockDetection/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Cache/TransactionDeadlockDetection/TransactionDeadlockDetection.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/Func/Func.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/Func/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/PeerAssemblyLoading/PeerAssemblyLoading.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/PeerAssemblyLoading/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/Task/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Compute/Task/Task.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicLong/AtomicLong.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicLong/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicReference/AtomicReference.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicReference/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicSequence/AtomicSequence.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/DataStructures/AtomicSequence/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/ClientReconnect/ClientReconnect.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/ClientReconnect/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Events/Events.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Events/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Lifecycle/Lifecycle.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Lifecycle/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Messaging/Messaging.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Messaging/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Services/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Misc/Services/Services.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/README.md
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Ddl/Ddl.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Ddl/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Dml/Dml.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Dml/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Linq/Linq.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Linq/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Sql/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thick/Sql/Sql/Sql.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/BinaryModeThin/BinaryModeThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/BinaryModeThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/OptimisticTransactionThin/OptimisticTransactionThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/OptimisticTransactionThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/PutGetThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/PutGetThin/PutGetThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/QueryContinuousThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/QueryContinuousThin/QueryContinuousThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/QueryScanThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/QueryScanThin/QueryScanThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/TransactionThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Cache/TransactionThin/TransactionThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Misc/ServicesThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Misc/ServicesThin/ServicesThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/README.md
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/DdlThin/DdlThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/DdlThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/DmlThin/DmlThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/DmlThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/LinqThin/LinqThin.csproj
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/LinqThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/SqlThin/Program.cs
 create mode 100644 modules/platforms/dotnet/examples/Thin/Sql/SqlThin/SqlThin.csproj
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/Apache.Ignite.Examples.csproj
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/App.config
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/Employee.cs
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/LinqExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/Organization.cs
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/Program.cs
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/PutGetExample.cs
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/README.txt
 delete mode 100644 modules/platforms/dotnet/examples/dotnetcore/SqlExample.cs
 create mode 100644 modules/platforms/dotnet/examples/images/rider-sidebar.png
 create mode 100644 modules/platforms/dotnet/examples/images/rider.png
 create mode 100644 modules/platforms/dotnet/examples/images/vs-code.png
 create mode 100644 modules/platforms/dotnet/examples/images/vs.png
 delete mode 100644 modules/platforms/dotnet/run-dotnetcore-examples.bat
 create mode 100644 modules/platforms/dotnet/templates/README.md
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.Example/.template.config/template.json
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.Example/ExampleProject.csproj
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.Example/Program.cs
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.ExampleThin/.template.config/template.json
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.ExampleThin/ExampleProjectThin.csproj
 create mode 100644 modules/platforms/dotnet/templates/internal/Apache.Ignite.ExampleThin/Program.cs
 create mode 100644 modules/platforms/dotnet/templates/public/Apache.Ignite.Examples/Apache.Ignite.Examples.csproj
 delete mode 100644 modules/platforms/nodejs/README.md
 delete mode 100644 modules/platforms/nodejs/api_spec/conf.json
 delete mode 100644 modules/platforms/nodejs/examples/AuthTlsExample.js
 delete mode 100644 modules/platforms/nodejs/examples/CachePutGetExample.js
 delete mode 100644 modules/platforms/nodejs/examples/FailoverExample.js
 delete mode 100644 modules/platforms/nodejs/examples/SqlExample.js
 delete mode 100644 modules/platforms/nodejs/examples/SqlQueryEntriesExample.js
 delete mode 100644 modules/platforms/nodejs/examples/certs/ca.crt
 delete mode 100644 modules/platforms/nodejs/examples/certs/client.crt
 delete mode 100644 modules/platforms/nodejs/examples/certs/client.key
 delete mode 100644 modules/platforms/nodejs/examples/certs/keystore.jks
 delete mode 100644 modules/platforms/nodejs/examples/certs/truststore.jks
 delete mode 100644 modules/platforms/nodejs/index.js
 delete mode 100644 modules/platforms/nodejs/lib/BinaryObject.js
 delete mode 100644 modules/platforms/nodejs/lib/CacheClient.js
 delete mode 100644 modules/platforms/nodejs/lib/CacheConfiguration.js
 delete mode 100644 modules/platforms/nodejs/lib/Cursor.js
 delete mode 100644 modules/platforms/nodejs/lib/EnumItem.js
 delete mode 100644 modules/platforms/nodejs/lib/Errors.js
 delete mode 100644 modules/platforms/nodejs/lib/IgniteClient.js
 delete mode 100644 modules/platforms/nodejs/lib/IgniteClientConfiguration.js
 delete mode 100644 modules/platforms/nodejs/lib/ObjectType.js
 delete mode 100644 modules/platforms/nodejs/lib/Query.js
 delete mode 100644 modules/platforms/nodejs/lib/Timestamp.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/ArgumentChecker.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/BinaryCommunicator.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/BinaryType.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/BinaryTypeStorage.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/BinaryUtils.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/ClientFailoverSocket.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/ClientSocket.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/Logger.js
 delete mode 100644 modules/platforms/nodejs/lib/internal/MessageBuffer.js
 delete mode 100644 modules/platforms/nodejs/package.json
 delete mode 100644 modules/platforms/nodejs/spec/ExamplesExecutor.js
 delete mode 100644 modules/platforms/nodejs/spec/TestingHelper.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/BinaryObject.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/Cache.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/CacheKeyValueOps.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/CachePutGetDiffTypes.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/ComplexObject.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/cache/UUID.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/config.js
 delete mode 100644 modules/platforms/nodejs/spec/examples/AuthExample.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/examples/Examples.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/query/ScanQuery.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/query/SqlFieldsQuery.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/query/SqlQuery.spec.js
 delete mode 100644 modules/platforms/nodejs/spec/support/jasmine.json
 delete mode 100644 modules/platforms/php/.gitignore
 delete mode 100644 modules/platforms/php/README.md
 delete mode 100644 modules/platforms/php/api_docs/Doxyfile
 delete mode 100644 modules/platforms/php/composer.json
 delete mode 100644 modules/platforms/php/examples/AuthTlsExample.php
 delete mode 100644 modules/platforms/php/examples/CachePutGetExample.php
 delete mode 100644 modules/platforms/php/examples/FailoverExample.php
 delete mode 100644 modules/platforms/php/examples/SqlExample.php
 delete mode 100644 modules/platforms/php/examples/SqlQueryEntriesExample.php
 delete mode 100644 modules/platforms/php/examples/certs/ca.pem
 delete mode 100644 modules/platforms/php/examples/certs/client.pem
 delete mode 100644 modules/platforms/php/examples/certs/keystore.jks
 delete mode 100644 modules/platforms/php/examples/certs/truststore.jks
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/CacheConfiguration.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/CacheEntry.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/CacheInterface.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/CacheKeyConfiguration.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/QueryEntity.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/QueryField.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Cache/QueryIndex.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Client.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/ClientConfiguration.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Data/BinaryObject.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Data/Date.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Data/EnumItem.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Data/Time.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Data/Timestamp.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Exception/ClientException.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Exception/NoConnectionException.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Exception/OperationException.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Exception/OperationStatusUnknownException.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryCommunicator.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryField.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryObjectField.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinarySchema.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryType.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryTypeBuilder.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryTypeStorage.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/BinaryUtils.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/ClientOperation.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/MessageBuffer.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/Request.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Binary/TypeInfo.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Cache.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Connection/ClientFailoverSocket.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Connection/ClientSocket.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Connection/ProtocolVersion.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Query/Cursor.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Query/SqlFieldsCursor.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Utils/ArgumentChecker.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Internal/Utils/Logger.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/CursorInterface.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/Query.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/ScanQuery.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/SqlFieldsCursorInterface.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/SqlFieldsQuery.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Query/SqlQuery.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Type/CollectionObjectType.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Type/ComplexObjectType.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Type/MapObjectType.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Type/ObjectArrayType.php
 delete mode 100644 modules/platforms/php/src/Apache/Ignite/Type/ObjectType.php
 delete mode 100644 modules/platforms/php/tests/BinaryObjectTest.php
 delete mode 100644 modules/platforms/php/tests/CacheKeyValueOpsTest.php
 delete mode 100644 modules/platforms/php/tests/CachePutGetTest.php
 delete mode 100644 modules/platforms/php/tests/CacheTest.php
 delete mode 100644 modules/platforms/php/tests/ComplexObjectTest.php
 delete mode 100644 modules/platforms/php/tests/ScanQueryTest.php
 delete mode 100644 modules/platforms/php/tests/SqlFieldsQueryTest.php
 delete mode 100644 modules/platforms/php/tests/SqlQueryTest.php
 delete mode 100644 modules/platforms/php/tests/TestConfig.php
 delete mode 100644 modules/platforms/php/tests/TestingHelper.php
 delete mode 100644 modules/platforms/php/tests/examples/ExecuteAuthTlsExample.php
 delete mode 100644 modules/platforms/php/tests/examples/ExecuteExamples.php
 delete mode 100644 modules/platforms/python/LICENSE
 delete mode 100644 modules/platforms/python/README.md
 delete mode 100644 modules/platforms/python/docs/Makefile
 delete mode 100644 modules/platforms/python/docs/conf.py
 delete mode 100644 modules/platforms/python/docs/datatypes/cache_props.rst
 delete mode 100644 modules/platforms/python/docs/datatypes/parsers.rst
 delete mode 100644 modules/platforms/python/docs/examples.rst
 delete mode 100644 modules/platforms/python/docs/index.rst
 delete mode 100644 modules/platforms/python/docs/modules.rst
 delete mode 100644 modules/platforms/python/docs/readme.rst
 delete mode 100644 modules/platforms/python/docs/source/modules.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.binary.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.cache_config.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.key_value.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.result.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.api.sql.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.binary.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.cache.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.client.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.connection.generators.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.connection.handshake.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.connection.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.connection.ssl.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.constants.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.base.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.binary.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.cache_config.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.cache_properties.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.complex.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.internal.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.key_value.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.null_object.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.primitive.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.primitive_arrays.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.primitive_objects.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.prop_codes.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.sql.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.standard.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.datatypes.type_codes.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.exceptions.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.queries.op_codes.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.queries.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.rst
 delete mode 100644 modules/platforms/python/docs/source/pyignite.utils.rst
 delete mode 100644 modules/platforms/python/examples/binary_basics.py
 delete mode 100644 modules/platforms/python/examples/create_binary.py
 delete mode 100644 modules/platforms/python/examples/failover.py
 delete mode 100644 modules/platforms/python/examples/get_and_put.py
 delete mode 100644 modules/platforms/python/examples/migrate_binary.py
 delete mode 100644 modules/platforms/python/examples/read_binary.py
 delete mode 100644 modules/platforms/python/examples/readme.md
 delete mode 100644 modules/platforms/python/examples/scans.py
 delete mode 100644 modules/platforms/python/examples/sql.py
 delete mode 100644 modules/platforms/python/examples/type_hints.py
 delete mode 100644 modules/platforms/python/pyignite/__init__.py
 delete mode 100644 modules/platforms/python/pyignite/api/__init__.py
 delete mode 100644 modules/platforms/python/pyignite/api/binary.py
 delete mode 100644 modules/platforms/python/pyignite/api/cache_config.py
 delete mode 100644 modules/platforms/python/pyignite/api/key_value.py
 delete mode 100644 modules/platforms/python/pyignite/api/result.py
 delete mode 100644 modules/platforms/python/pyignite/api/sql.py
 delete mode 100644 modules/platforms/python/pyignite/binary.py
 delete mode 100644 modules/platforms/python/pyignite/cache.py
 delete mode 100644 modules/platforms/python/pyignite/client.py
 delete mode 100644 modules/platforms/python/pyignite/connection/__init__.py
 delete mode 100644 modules/platforms/python/pyignite/connection/generators.py
 delete mode 100644 modules/platforms/python/pyignite/connection/handshake.py
 delete mode 100644 modules/platforms/python/pyignite/connection/ssl.py
 delete mode 100644 modules/platforms/python/pyignite/constants.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/__init__.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/base.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/binary.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/cache_config.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/cache_properties.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/complex.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/internal.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/key_value.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/null_object.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/primitive.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/primitive_arrays.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/primitive_objects.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/prop_codes.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/sql.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/standard.py
 delete mode 100644 modules/platforms/python/pyignite/datatypes/type_codes.py
 delete mode 100644 modules/platforms/python/pyignite/exceptions.py
 delete mode 100644 modules/platforms/python/pyignite/queries/__init__.py
 delete mode 100644 modules/platforms/python/pyignite/queries/op_codes.py
 delete mode 100644 modules/platforms/python/pyignite/utils.py
 delete mode 100644 modules/platforms/python/requirements/docs.txt
 delete mode 100644 modules/platforms/python/requirements/install.txt
 delete mode 100644 modules/platforms/python/requirements/setup.txt
 delete mode 100644 modules/platforms/python/requirements/tests.txt
 delete mode 100644 modules/platforms/python/setup.py
 delete mode 100644 modules/platforms/python/tests/config/ssl.xml
 delete mode 100644 modules/platforms/python/tests/config/ssl/README.txt
 delete mode 100644 modules/platforms/python/tests/config/ssl/client_full.pem
 delete mode 100644 modules/platforms/python/tests/config/ssl/client_with_pass_full.pem
 delete mode 100644 modules/platforms/python/tests/config/ssl/server.jks
 delete mode 100644 modules/platforms/python/tests/config/ssl/trust.jks
 delete mode 100644 modules/platforms/python/tests/conftest.py
 delete mode 100644 modules/platforms/python/tests/test_binary.py
 delete mode 100644 modules/platforms/python/tests/test_cache_class.py
 delete mode 100644 modules/platforms/python/tests/test_cache_class_sql.py
 delete mode 100644 modules/platforms/python/tests/test_cache_config.py
 delete mode 100644 modules/platforms/python/tests/test_datatypes.py
 delete mode 100644 modules/platforms/python/tests/test_examples.py
 delete mode 100644 modules/platforms/python/tests/test_generic_object.py
 delete mode 100644 modules/platforms/python/tests/test_get_names.py
 delete mode 100644 modules/platforms/python/tests/test_handshake.py
 delete mode 100644 modules/platforms/python/tests/test_key_value.py
 delete mode 100644 modules/platforms/python/tests/test_scan.py
 delete mode 100644 modules/platforms/python/tests/test_sql.py
 create mode 100644 modules/spring/src/main/java/org/apache/ignite/IgniteClientSpringBean.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCache.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/cache/spring/package-info.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/transactions/spring/IgniteTransactionHolder.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java
 delete mode 100644 modules/spring/src/main/java/org/apache/ignite/transactions/spring/package-info.java
 delete mode 100644 modules/spring/src/test/java/config/spring-transactions-ignite-spring-bean.xml
 delete mode 100644 modules/spring/src/test/java/config/spring-transactions.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/TestInjectionLifecycleBean.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerAbstractTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerMultiJvmSelfTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSpringBeanSelfTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheTestKey.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheTestKeyGenerator.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheTestService.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringDynamicCacheTestService.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/SpringCacheManagerContextInjectionTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/SpringCacheTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching1.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching2.xml
 create mode 100644 modules/spring/src/test/java/org/apache/ignite/internal/IgniteClientSpringBeanTest.java
 create mode 100644 modules/spring/src/test/java/org/apache/ignite/internal/ignite-client-spring-bean.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/spring-injection-test.xml
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java
 delete mode 100644 modules/spring/src/test/java/org/apache/ignite/transactions/spring/SpringTransactionManagerContextInjectionTest.java
 create mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/surefire/testsuites/AssertOnOrphanedTests.java
 create mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/surefire/testsuites/CheckAllTestsInSuites.java
 create mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/surefire/testsuites/IgniteTestsProvider.java
 create mode 100644 modules/tools/src/main/java/org/apache/ignite/tools/surefire/testsuites/OrphanedTestCollection.java
 create mode 100644 modules/tools/src/main/resources/META-INF/services/org.apache.maven.surefire.providerapi.SurefireProvider
 create mode 100644 modules/urideploy/src/test/java/org/apache/ignite/internal/UriDeploymentAbsentProcessorClassTest.java
 create mode 100644 modules/yardstick/config/benchmark-cache-pagereplacements.properties
 delete mode 100644 modules/yardstick/config/benchmark-cache-pegereplacements.properties
 create mode 100644 modules/yardstick/config/ignite-localhost-pagereplacement-config.xml
 create mode 100644 modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteAbstractPageReplacementBenchmark.java
 create mode 100644 modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteGetWithPageReplacementBenchmark.java
 delete mode 100644 modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutGetWithPageReplacements.java
 create mode 100644 modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgnitePutWithPageReplacementBenchmark.java

[ignite] 01/01: Merge branch 'master' into sql-calcite

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a commit to branch sql-calcite
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 348276b51af77bb530a86b1008942355fdd368c0
Merge: c814ed2 b1529fb
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Thu May 27 10:23:00 2021 +0300

    Merge branch 'master' into sql-calcite
    
    # Conflicts:
    #	modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
    #	modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcConnectionContext.java
    #	modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
    #	modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityEx.java
    #	modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java

 .travis.yml                                        |   16 +-
 DEVNOTES.txt                                       |   17 +
 NOTICE                                             |    2 +-
 README.md                                          |    8 +-
 README.txt                                         |    3 -
 RELEASE_NOTES.txt                                  |  287 +++
 assembly/NOTICE_HADOOP                             |    2 +-
 assembly/NOTICE_IGNITE                             |    2 +-
 assembly/dependencies-apache-ignite-slim.xml       |    1 +
 assembly/libs/README.txt                           |    1 +
 assembly/release-apache-ignite-base.xml            |   76 -
 checkstyle/checkstyle-suppressions.xml             |    2 +
 checkstyle/checkstyle.xml                          |   21 +
 doap_Ignite.rdf                                    |    4 +-
 docs/Gemfile                                       |    3 +
 docs/_config.yml                                   |    7 +-
 docs/_data/toc.yaml                                |   16 +-
 docs/_docs/clustering/discovery-in-the-cloud.adoc  |   44 +-
 .../cpp/src/broadcast_jobs_to_remote_nodes.cpp     |   44 +
 .../cpp/src/predefined_cluster_groups.cpp          |   27 +
 docs/_docs/code-snippets/dotnet/ThinClient.cs      |   19 +
 docs/_docs/code-snippets/dotnet/dotnet.csproj      |    2 +-
 docs/_docs/code-snippets/java/pom.xml              |    5 +
 .../ignite/snippets/DiscoveryInTheCloud.java       |   24 +
 .../org/apache/ignite/snippets/JavaThinClient.java |   38 +-
 .../main/java/org/apache/ignite/snippets/TDE.java  |    7 +
 .../org/apache/ignite/snippets/WarmUpStrategy.java |   83 +
 .../java/org/apache/ignite/snippets/k8s/K8s.java   |   21 +
 docs/_docs/code-snippets/k8s/service.yaml          |    8 +-
 .../k8s/stateful/node-configuration.xml            |   12 +-
 .../k8s/stateless/node-configuration.xml           |    8 +-
 docs/_docs/code-snippets/xml/tde.xml               |   15 +-
 docs/_docs/code-snippets/xml/warm-up-strategy.xml  |   71 +
 .../distributed-computing/cluster-groups.adoc      |   12 +-
 docs/_docs/events/events.adoc                      |   30 +
 .../ignite-for-spark/overview.adoc                 |    2 +-
 .../performance-statistics.adoc                    |   82 +
 .../spring/spring-data.adoc                        |   79 +-
 .../spring/spring-tx.adoc                          |  466 ++++
 docs/_docs/includes/cpp-prerequisites.adoc         |    2 +-
 docs/_docs/includes/dotnet-prerequisites.adoc      |    2 +-
 docs/_docs/includes/java9.adoc                     |    6 +-
 docs/_docs/includes/partition-awareness.adoc       |    8 -
 docs/_docs/includes/prereqs.adoc                   |    2 +-
 docs/_docs/index.adoc                              |   19 +-
 docs/_docs/installation/index.adoc                 |   21 -
 .../kubernetes/generic-configuration.adoc          |   14 +-
 .../key-value-api/basic-cache-operations.adoc      |   27 +-
 docs/_docs/memory-configuration/data-regions.adoc  |  122 +
 docs/_docs/monitoring-metrics/metrics.adoc         |   36 +
 .../monitoring-metrics/new-metrics-system.adoc     |    2 -
 docs/_docs/monitoring-metrics/new-metrics.adoc     |   48 +-
 .../monitoring-metrics/performance-statistics.adoc |   97 +
 docs/_docs/monitoring-metrics/system-views.adoc    |  153 ++
 docs/_docs/monitoring-metrics/tracing.adoc         |   65 +
 docs/_docs/net-specific/net-async.adoc             |  121 +
 .../_docs/net-specific/net-deployment-options.adoc |   51 +-
 docs/_docs/net-specific/net-troubleshooting.adoc   |   19 +
 .../native-persistence-defragmentation.adoc        |   65 +
 docs/_docs/persistence/native-persistence.adoc     |    3 +
 docs/_docs/persistence/snapshot-directory.adoc     |   39 +
 docs/_docs/persistence/snapshots.adoc              |  208 --
 docs/_docs/quick-start/cpp.adoc                    |    2 +-
 docs/_docs/quick-start/dotnet.adoc                 |    4 +-
 docs/_docs/quick-start/java.adoc                   |    4 +-
 docs/_docs/quick-start/nodejs.adoc                 |    8 +-
 docs/_docs/quick-start/php.adoc                    |   19 +-
 docs/_docs/quick-start/python.adoc                 |    4 +-
 docs/_docs/quick-start/restapi.adoc                |    2 +-
 .../security/cache-encryption-key-rotation.adoc    |  145 ++
 docs/_docs/security/master-key-rotation.adoc       |    2 +-
 docs/_docs/security/tde.adoc                       |    1 -
 docs/_docs/setup.adoc                              |   62 +
 docs/_docs/snapshots/snapshots.adoc                |  208 ++
 docs/_docs/starting-nodes.adoc                     |   23 -
 docs/_docs/thin-clients/cpp-thin-client.adoc       |   57 +
 docs/_docs/thin-clients/dotnet-thin-client.adoc    |   15 +-
 docs/_docs/thin-clients/java-thin-client.adoc      |   32 +-
 docs/_docs/thin-clients/nodejs-thin-client.adoc    |    4 +-
 docs/_docs/thin-clients/php-thin-client.adoc       |   14 +-
 docs/_docs/thin-clients/python-thin-client.adoc    |    8 +-
 docs/_docs/tools/control-script.adoc               |  296 ++-
 docs/assets/css/docs.scss                          |    4 +-
 docs/assets/css/styles.scss                        |    4 +-
 examples/pom.xml                                   |    8 +-
 .../client/ClientKubernetesPutGetExample.java      |   70 +
 .../examples/encryption/EncryptedCacheExample.java |   29 +-
 .../ml/clustering/KMeansClusterizationExample.java |    3 +-
 .../dataset/AlgorithmSpecificDatasetExample.java   |   22 +-
 .../CatboostClassificationModelParserExample.java  |    3 +-
 .../KMeansClusterizationExportImportExample.java   |    3 +-
 .../modelparser/DecisionTreeFromSparkExample.java  |    9 +-
 .../DecisionTreeRegressionFromSparkExample.java    |    9 +-
 .../spark/modelparser/GBTFromSparkExample.java     |    9 +-
 .../modelparser/GBTRegressionFromSparkExample.java |    9 +-
 .../spark/modelparser/KMeansFromSparkExample.java  |    5 +-
 .../LinearRegressionFromSparkExample.java          |    8 +-
 .../spark/modelparser/LogRegFromSparkExample.java  |    9 +-
 .../modelparser/RandomForestFromSparkExample.java  |    9 +-
 .../RandomForestRegressionFromSparkExample.java    |    9 +-
 .../spark/modelparser/SVMFromSparkExample.java     |    5 +-
 .../multiclass/OneVsRestClassificationExample.java |    7 +-
 .../encoding/TargetEncoderExample.java             |    4 +-
 .../linear/BostonHousePricesPredictionExample.java |    3 +-
 ...gressionLSQRTrainerWithMinMaxScalerExample.java |    4 +-
 ...eeClassificationTrainerSQLInferenceExample.java |    4 +-
 .../RandomForestClassificationExample.java         |    4 +-
 .../hyperparametertuning/Step_13_RandomSearch.java |    6 +-
 .../Step_14_Parallel_Brute_Force_Search.java       |    6 +-
 .../Step_15_Parallel_Random_Search.java            |    6 +-
 .../Step_16_Genetic_Programming_Search.java        |    6 +-
 ...tep_17_Parallel_Genetic_Programming_Search.java |    6 +-
 .../ignite/examples/ml/util/MLSandboxDatasets.java |    9 +-
 .../spark/JavaIgniteDataFrameJoinExample.java      |    4 +-
 .../ignite/examples/spark/SharedRDDExample.java    |    2 +-
 idea/ignite_codeStyle.xml                          |    1 +
 modules/aop/pom.xml                                |   10 +-
 .../aop/aspectj/GridifySetToSetAspectJAspect.java  |    3 +-
 .../aspectj/GridifySetToValueAspectJAspect.java    |    3 +-
 .../gridify/aop/spring/GridifySpringEnhancer.java  |    3 +-
 .../org/apache/ignite/p2p/P2PGridifySelfTest.java  |    2 +
 .../ignite/testsuites/IgniteAopSelfTestSuite.java  |    5 +
 .../direct/singlesplit/SingleSplitsLoadTest.java   |    3 +
 .../gridify/GridifySingleSplitLoadTest.java        |    3 +
 modules/apache-license-gen/pom.xml                 |    2 +-
 modules/aws/pom.xml                                |   11 +-
 modules/azure/README.txt                           |   32 +
 modules/azure/pom.xml                              |  342 +++
 .../azure/TcpDiscoveryAzureBlobStoreIpFinder.java  |  382 +++
 .../spi/discovery/tcp/ipfinder/package-info.java   |   23 +
 ...TcpDiscoveryAzureBlobStoreIpFinderSelfTest.java |   91 +
 .../discovery/tcp/ipfinder/azure/package-info.java |   21 +
 .../ignite/testsuites/IgniteAzureTestSuite.java    |   61 +
 modules/benchmarks/pom.xml                         |    2 +-
 .../jmh/cache/JmhCacheAsyncListenBenchmark.java    |  162 ++
 .../GridDhtPartitionsStateValidatorBenchmark.java  |    5 +-
 .../jmh/misc/JmhSegmentedLruListBenchmark.java     |  122 +
 .../benchmarks/jmh/tree/BPlusTreeBenchmark.java    |    4 +-
 modules/calcite/pom.xml                            |    2 +-
 .../query/calcite/exec/AbstractIndexScan.java      |    6 +-
 .../query/calcite/exec/ExchangeServiceImpl.java    |    3 +-
 .../query/calcite/exec/ExecutionServiceImpl.java   |   13 +-
 .../processors/query/calcite/exec/IndexScan.java   |   14 +-
 .../query/calcite/exec/RuntimeTreeIndex.java       |    9 +-
 .../query/calcite/exec/ddl/DdlCommandHandler.java  |    5 +-
 .../calcite/exec/exp/agg/AccumulatorsFactory.java  |    4 +-
 .../query/calcite/exec/rel/MergeJoinNode.java      |    3 +-
 .../query/calcite/exec/rel/ModifyNode.java         |    4 +-
 .../query/calcite/exec/rel/NestedLoopJoinNode.java |    4 +-
 .../calcite/metadata/AffinityServiceImpl.java      |    4 +-
 .../query/calcite/metadata/ColocationGroup.java    |    9 +-
 .../calcite/metadata/IgniteMdSelectivity.java      |    3 +-
 .../query/calcite/metadata/MappingServiceImpl.java |    3 +-
 .../calcite/prepare/CalciteQueryFieldMetadata.java |   13 +-
 .../query/calcite/prepare/FieldsMetadata.java      |    3 +-
 .../processors/query/calcite/prepare/Splitter.java |    3 +-
 .../prepare/ddl/DdlSqlToCommandConverter.java      |    3 +-
 .../query/calcite/rel/AbstractIgniteJoin.java      |    3 +-
 .../rel/IgniteCorrelatedNestedLoopJoin.java        |    9 +-
 .../query/calcite/rel/IgniteNestedLoopJoin.java    |    9 +-
 .../query/calcite/rel/IgniteTableModify.java       |    3 +-
 .../calcite/rel/agg/IgniteMapHashAggregate.java    |    3 +-
 .../calcite/rel/agg/IgniteSingleHashAggregate.java |    6 +-
 .../calcite/rel/agg/IgniteSingleSortAggregate.java |    3 +-
 .../query/calcite/schema/SchemaHolderImpl.java     |    2 +-
 .../query/calcite/schema/TableDescriptorImpl.java  |   11 +-
 .../query/calcite/trait/DistributionFunction.java  |    3 +-
 .../processors/query/calcite/trait/TraitUtils.java |    5 +-
 .../processors/query/calcite/util/Commons.java     |    2 +-
 .../processors/query/calcite/util/RexUtils.java    |    3 +-
 .../CalciteBasicSecondaryIndexIntegrationTest.java |    6 +-
 .../query/calcite/CalciteQueryProcessorTest.java   |    8 +-
 .../processors/query/calcite/DateTimeTest.java     |   12 +-
 .../query/calcite/exec/rel/ExecutionTest.java      |   12 +-
 .../rel/HashAggregateSingleGroupExecutionTest.java |   36 +-
 .../calcite/exec/rel/TableSpoolExecutionTest.java  |    3 +-
 .../integration/AggregatesIntegrationTest.java     |    8 +-
 .../CalciteErrorHandlilngIntegrationTest.java      |    8 +-
 .../integration/MetadataIntegrationTest.java       |    2 +-
 .../query/calcite/jdbc/JdbcQueryTest.java          |    3 +-
 .../query/calcite/planner/AbstractPlannerTest.java |    3 +-
 .../query/calcite/planner/PlannerTest.java         |   56 +-
 .../query/calcite/planner/UnionPlannerTest.java    |    2 +
 .../ignite/testsuites/ExecutionTestSuite.java      |    4 +-
 .../ignite/testsuites/IntegrationTestSuite.java    |    2 +
 .../apache/ignite/testsuites/ScriptTestSuite.java  |    2 +
 modules/cassandra/pom.xml                          |    2 +-
 modules/cassandra/serializers/pom.xml              |   13 +-
 .../org/apache/ignite/tests/SerializerSuite.java   |   29 +
 modules/cassandra/store/pom.xml                    |   12 +-
 .../cassandra/CassandraCacheStoreFactory.java      |    5 +-
 .../persistence/KeyValuePersistenceSettings.java   |   15 +-
 .../ignite/tests/IgnitePersistentStoreTest.java    |   12 +-
 .../apache/ignite/tests/utils/CassandraHelper.java |    3 +-
 .../tests/persistence/blob/ignite-config.xml       |    6 +-
 .../tests/persistence/pojo/ignite-config.xml       |   21 +-
 .../tests/persistence/primitive/ignite-config.xml  |    6 +-
 modules/clients/pom.xml                            |   11 +-
 .../src/test/config/jdbc-security-config.xml       |   68 +
 ...eCreationDestructionWileTopologyChangeTest.java |   70 +
 .../ClientSizeCacheCreationDestructionTest.java    | 1243 ++++++++++
 .../common/RunningQueryInfoCheckInitiatorTest.java |  420 ++++
 .../client/ClientReconnectionSelfTest.java         |   23 +-
 .../internal/client/TaskSingleJobSplitAdapter.java |    3 +-
 .../client/suite/IgniteClientTestSuite.java        |    9 +-
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java    |   10 +-
 .../internal/jdbc2/JdbcBulkLoadSelfTest.java       |    2 +-
 .../internal/jdbc2/JdbcComplexQuerySelfTest.java   |    2 +-
 .../ignite/internal/jdbc2/JdbcCursorLeaksTest.java |  202 ++
 .../jdbc2/JdbcDistributedJoinsQueryTest.java       |    5 +-
 .../internal/jdbc2/JdbcMetadataSelfTest.java       |   16 +-
 .../jdbc2/JdbcNoCacheStreamingSelfTest.java        |    2 +-
 .../jdbc2/JdbcPreparedStatementSelfTest.java       |    2 +-
 .../internal/jdbc2/JdbcResultSetSelfTest.java      |    2 +-
 .../internal/jdbc2/JdbcStatementSelfTest.java      |    2 +-
 .../internal/jdbc2/JdbcStreamingSelfTest.java      |    4 +-
 .../jdbc2/JdbcStreamingToPublicCacheTest.java      |    2 +-
 ...ttyRestProcessorAuthenticationAbstractTest.java |   10 +-
 ...thenticatorUserManagementAuthorizationTest.java |  112 +
 .../ignite/jdbc/AbstractJdbcPojoQuerySelfTest.java |    2 +-
 .../apache/ignite/jdbc/JdbcAuthorizationTest.java  |   23 +-
 .../ignite/jdbc/JdbcComplexQuerySelfTest.java      |    2 +-
 .../ignite/jdbc/JdbcErrorsAbstractSelfTest.java    |    2 +-
 .../apache/ignite/jdbc/JdbcMetadataSelfTest.java   |    2 +-
 .../ignite/jdbc/JdbcPreparedStatementSelfTest.java |    2 +-
 .../apache/ignite/jdbc/JdbcStatementSelfTest.java  |    2 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java      |    4 +
 .../thin/JdbcThinAbstractDmlStatementSelfTest.java |    4 +-
 .../JdbcThinAuthenticateConnectionSelfTest.java    |   14 +-
 .../ignite/jdbc/thin/JdbcThinBatchSelfTest.java    |    3 +-
 .../ignite/jdbc/thin/JdbcThinBulkLoadSelfTest.java |    4 +-
 .../jdbc/thin/JdbcThinComplexQuerySelfTest.java    |    2 +-
 .../jdbc/thin/JdbcThinConnectionSelfTest.java      |    3 +-
 .../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java |   80 +-
 .../thin/JdbcThinPartitionAwarenessSelfTest.java   |    4 +-
 .../thin/JdbcThinPreparedStatementSelfTest.java    |    2 +-
 .../jdbc/thin/JdbcThinResultSetSelfTest.java       |    2 +-
 .../jdbc/thin/JdbcThinStatementCancelSelfTest.java |    2 +-
 .../jdbc/thin/JdbcThinStatementSelfTest.java       |    2 +-
 .../thin/JdbcThinStatementTimeoutSelfTest.java     |    2 +-
 .../thin/JdbcThinStreamingAbstractSelfTest.java    |    4 +-
 .../client/ClientMarshallerBenchmarkTest.java      |    3 +
 .../loadtests/client/ClientTcpSslLoadTest.java     |    3 +
 .../qa/query/WarningOnBigQueryResultsBaseTest.java |    7 +-
 .../src/test/resources/jetty/rest-jetty.xml        |    2 +-
 modules/cloud/pom.xml                              |   15 +-
 modules/codegen/pom.xml                            |    2 +-
 .../SystemViewRowAttributeWalkerGenerator.java     |   18 +
 modules/compatibility/pom.xml                      |    2 +-
 .../clients/AbstractClientCompatibilityTest.java   |   25 +-
 .../clients/JavaThinCompatibilityTest.java         |   26 +
 .../persistence/FoldersReuseCompatibilityTest.java |    5 +-
 .../IgnitePKIndexesMigrationToUnwrapPkTest.java    |    2 +
 .../IndexAbstractCompatibilityTest.java            |   92 +
 .../persistence/IndexTypesCompatibilityTest.java   |  334 +++
 .../InlineJavaObjectCompatibilityTest.java         |  320 +++
 .../IgniteCompatibilityBasicTestSuite.java         |    4 +
 modules/compress/pom.xml                           |   11 +-
 .../AbstractPageCompressionIntegrationTest.java    |    2 +-
 .../compress/CompressionConfigurationTest.java     |    4 +-
 .../compress/CompressionProcessorTest.java         |    6 +-
 .../DiskPageCompressionIntegrationTest.java        |   10 +-
 .../WalPageCompressionIntegrationTest.java         |    4 +-
 modules/control-utility/pom.xml                    |   15 +-
 .../internal/commandline/CommandHandler.java       |    3 +-
 .../ignite/internal/commandline/CommandList.java   |    6 +-
 .../cache/CacheIndexesForceRebuild.java            |   11 +-
 .../commandline/cache/CacheValidateIndexes.java    |   13 +-
 .../commandline/cache/CheckIndexInlineSizes.java   |    4 +-
 .../internal/commandline/cache/IdleVerify.java     |   44 +-
 .../PerformanceStatisticsCommand.java              |  107 +
 .../PerformanceStatisticsSubCommand.java           |   80 +
 .../internal/commandline/query/KillCommand.java    |    2 +-
 .../commandline/snapshot/SnapshotCommand.java      |   51 +-
 .../commandline/snapshot/SnapshotSubcommand.java   |   25 +-
 .../commandline/CommandHandlerParsingTest.java     |   95 +-
 .../testsuites/IgniteControlUtilityTestSuite.java  |    6 +-
 .../util/GridCommandHandlerAbstractTest.java       |    7 +-
 ...idCommandHandlerCheckIndexesInlineSizeTest.java |    6 +-
 .../util/GridCommandHandlerClusterByClassTest.java |   39 +-
 .../GridCommandHandlerIndexForceRebuildTest.java   |  326 ++-
 .../GridCommandHandlerIndexRebuildStatusTest.java  |   27 +-
 .../util/GridCommandHandlerIndexingTest.java       |    2 +-
 .../GridCommandHandlerInterruptCommandTest.java    |  326 +++
 .../util/GridCommandHandlerPropertiesTest.java     |   39 +
 .../apache/ignite/util/GridCommandHandlerTest.java |   64 +-
 .../util/PerformanceStatisticsCommandTest.java     |  143 ++
 modules/core/pom.xml                               |   15 +-
 modules/core/src/main/java/META-INF/NOTICE         |    2 +-
 .../java/org/apache/ignite/DataRegionMetrics.java  |   12 +-
 .../apache/ignite/DataRegionMetricsAdapter.java    |   12 +-
 .../java/org/apache/ignite/DataStorageMetrics.java |   26 +-
 .../apache/ignite/DataStorageMetricsAdapter.java   |   12 +-
 .../src/main/java/org/apache/ignite/Ignite.java    |   46 +-
 .../main/java/org/apache/ignite/IgniteCache.java   |   11 +
 .../main/java/org/apache/ignite/IgniteCluster.java |   12 +
 .../main/java/org/apache/ignite/IgniteCompute.java |    4 +
 .../java/org/apache/ignite/IgniteSemaphore.java    |   13 +
 .../src/main/java/org/apache/ignite/IgniteSet.java |    3 +-
 .../java/org/apache/ignite/IgniteSnapshot.java     |   14 +
 .../org/apache/ignite/IgniteSystemProperties.java  |   54 +-
 .../java/org/apache/ignite/IgniteTransactions.java |    2 +
 .../main/java/org/apache/ignite/MemoryMetrics.java |    3 +-
 .../java/org/apache/ignite/PersistenceMetrics.java |    3 +-
 .../ignite/binary/BinaryBasicNameMapper.java       |   24 +
 .../org/apache/ignite/binary/BinaryIdMapper.java   |    2 +-
 .../org/apache/ignite/binary/BinaryObject.java     |    6 +
 .../apache/ignite/binary/BinaryObjectBuilder.java  |    2 +-
 .../java/org/apache/ignite/cache/QueryEntity.java  |    2 +-
 .../ClusterNodeAttributeColocatedBackupFilter.java |  125 +
 .../rendezvous/RendezvousAffinityFunction.java     |   35 +-
 .../sorted/SortedEvictionPolicyFactory.java        |    2 +-
 .../apache/ignite/cache/query/SqlFieldsQuery.java  |   53 +
 .../cache/store/jdbc/CacheJdbcPojoStore.java       |    7 +-
 .../cache/store/jdbc/dialect/BasicJdbcDialect.java |    8 +-
 .../cache/store/jdbc/dialect/DB2Dialect.java       |    7 +-
 .../cache/store/jdbc/dialect/OracleDialect.java    |    7 +-
 .../cache/store/jdbc/dialect/SQLServerDialect.java |    7 +-
 .../java/org/apache/ignite/client/ClientCache.java |  150 +-
 .../ignite/client/ClientCacheConfiguration.java    |   44 +
 .../ignite/client/ClientDisconnectListener.java    |   35 +
 .../ignite/configuration/CacheConfiguration.java   |    4 +-
 .../configuration/DataRegionConfiguration.java     |   36 +-
 .../ignite/configuration/IgniteConfiguration.java  |   37 +
 .../configuration/IgniteReflectionFactory.java     |    4 +-
 .../ignite/configuration/PageReplacementMode.java  |   87 +
 .../events/CacheConsistencyViolationEvent.java     |   11 +-
 .../ignite/events/CacheQueryExecutedEvent.java     |    7 +-
 .../apache/ignite/events/CacheQueryReadEvent.java  |    7 +-
 .../org/apache/ignite/events/CheckpointEvent.java  |    7 +-
 .../org/apache/ignite/events/DeploymentEvent.java  |    7 +-
 .../org/apache/ignite/events/DiscoveryEvent.java   |    7 +-
 .../main/java/org/apache/ignite/events/Event.java  |    4 +-
 .../java/org/apache/ignite/events/EventType.java   |   23 +-
 .../ignite/events/SqlQueryExecutionEvent.java      |    7 +-
 .../java/org/apache/ignite/events/TaskEvent.java   |    7 +-
 .../ignite/internal/GridEventConsumeHandler.java   |    7 +-
 .../ignite/internal/GridJobExecuteRequest.java     |    6 +-
 .../apache/ignite/internal/GridKernalContext.java  |   26 +-
 .../ignite/internal/GridKernalContextImpl.java     |   36 +-
 .../ignite/internal/GridMessageListenHandler.java  |    5 +
 .../org/apache/ignite/internal/IgniteFeatures.java |    5 +-
 .../org/apache/ignite/internal/IgniteKernal.java   |   43 +-
 .../ignite/internal/IgniteNodeAttributes.java      |    3 -
 .../ignite/internal/IgniteSchedulerImpl.java       |    4 +-
 .../org/apache/ignite/internal/IgnitionEx.java     |   39 +-
 .../internal/TransactionMetricsMxBeanImpl.java     |   13 +-
 .../internal/binary/BinaryEnumObjectImpl.java      |   14 +
 .../ignite/internal/binary/BinaryObjectImpl.java   |    5 +
 .../internal/binary/BinaryObjectOffheapImpl.java   |    5 +
 .../ignite/internal/binary/BinaryRawReaderEx.java  |    7 +
 .../ignite/internal/binary/BinaryReaderExImpl.java |    7 +-
 .../apache/ignite/internal/binary/BinaryUtils.java |   32 +-
 .../binary/builder/BinaryBuilderReader.java        |   89 +-
 .../binary/streams/BinaryAbstractOutputStream.java |    6 +-
 .../binary/streams/BinaryHeapOutputStream.java     |    3 +-
 .../binary/streams/BinaryMemoryAllocator.java      |    3 +-
 .../binary/streams/BinaryOffheapOutputStream.java  |    3 +-
 .../internal/cache/query/index/AbstractIndex.java  |   42 +
 .../ignite/internal/cache/query/index/Index.java   |   69 +
 .../cache/query/index/IndexDefinition.java         |   28 +
 .../internal/cache/query/index/IndexFactory.java   |   34 +
 .../internal/cache/query/index/IndexName.java      |   88 +
 .../internal/cache/query/index/IndexProcessor.java |  588 +++++
 .../internal/cache/query/index/NullsOrder.java     |   29 +
 .../ignite/internal/cache/query/index/Order.java   |   45 +
 .../internal/cache/query/index/SingleCursor.java   |   58 +
 .../internal/cache/query/index/SortOrder.java      |   29 +
 .../DurableBackgroundCleanupIndexTreeTask.java     |  351 +++
 .../query/index/sorted/IndexKeyDefinition.java     |   68 +
 .../query/index/sorted/IndexKeyTypeSettings.java   |   81 +
 .../cache/query/index/sorted/IndexKeyTypes.java    |  133 ++
 .../cache/query/index/sorted/IndexRow.java         |   86 +
 .../cache/query/index/sorted/IndexRowCache.java    |  162 ++
 .../query/index/sorted/IndexRowCacheRegistry.java  |  132 ++
 .../query/index/sorted/IndexRowComparator.java     |   46 +
 .../query/index/sorted/IndexRowCompartorImpl.java  |   71 +
 .../cache/query/index/sorted/IndexRowImpl.java     |  176 ++
 .../query/index/sorted/IndexSearchRowImpl.java     |   78 +
 .../cache/query/index/sorted/IndexValueCursor.java |   72 +
 .../query/index/sorted/InlineIndexRowHandler.java  |   69 +
 .../index/sorted/InlineIndexRowHandlerFactory.java |   34 +
 .../cache/query/index/sorted/MetaPageInfo.java     |   96 +
 .../query/index/sorted/SortedIndexDefinition.java  |   62 +
 .../query/index/sorted/SortedSegmentedIndex.java   |  102 +
 .../index/sorted/ThreadLocalRowHandlerHolder.java  |   62 +
 .../sorted/defragmentation/DefragIndexFactory.java |  324 +++
 .../defragmentation/IndexingDefragmentation.java   |  269 +++
 .../index/sorted/inline/IndexQueryContext.java     |   50 +
 .../query/index/sorted/inline/InlineIndex.java     |   41 +
 .../index/sorted/inline/InlineIndexFactory.java    |  102 +
 .../query/index/sorted/inline/InlineIndexImpl.java |  478 ++++
 .../index/sorted/inline/InlineIndexKeyType.java    |   88 +
 .../sorted/inline/InlineIndexKeyTypeRegistry.java  |  188 ++
 .../query/index/sorted/inline/InlineIndexTree.java |  658 ++++++
 .../sorted/inline/InlineObjectBytesDetector.java   |  212 ++
 .../index/sorted/inline/InlineRecommender.java     |  141 ++
 .../sorted/inline/InlineTreeFilterClosure.java     |  142 ++
 .../sorted/inline/JavaObjectKeySerializer.java     |   54 +
 .../sorted/inline/io/AbstractInlineInnerIO.java    |  166 ++
 .../sorted/inline/io/AbstractInlineLeafIO.java     |  166 ++
 .../index/sorted/inline/io/AbstractInnerIO.java    |   81 +
 .../index/sorted/inline/io/AbstractLeafIO.java     |   81 +
 .../query/index/sorted/inline/io/IORowHandler.java |   71 +
 .../query/index/sorted/inline/io/InlineIO.java     |   35 +
 .../index/sorted/inline/io/InlineInnerIO.java      |   31 +
 .../query/index/sorted/inline/io/InlineLeafIO.java |   31 +
 .../query/index/sorted/inline/io/InnerIO.java      |   39 +
 .../cache/query/index/sorted/inline/io/LeafIO.java |   37 +
 .../cache/query/index/sorted/inline/io/MvccIO.java |   56 +
 .../index/sorted/inline/io/MvccInlineInnerIO.java  |   55 +
 .../index/sorted/inline/io/MvccInlineLeafIO.java   |   54 +
 .../query/index/sorted/inline/io/MvccInnerIO.java  |   58 +
 .../query/index/sorted/inline/io/MvccLeafIO.java   |   58 +
 .../inline/types/BooleanInlineIndexKeyType.java    |   59 +
 .../inline/types/ByteInlineIndexKeyType.java       |   59 +
 .../inline/types/BytesInlineIndexKeyType.java      |  154 ++
 .../inline/types/DateInlineIndexKeyType.java       |   69 +
 .../sorted/inline/types/DateValueConstants.java    |   46 +
 .../inline/types/DoubleInlineIndexKeyType.java     |   59 +
 .../inline/types/FloatInlineIndexKeyType.java      |   59 +
 .../inline/types/IntegerInlineIndexKeyType.java    |   61 +
 .../inline/types/LongInlineIndexKeyType.java       |   61 +
 .../inline/types/NullableInlineIndexKeyType.java   |  232 ++
 .../types/ObjectByteArrayInlineIndexKeyType.java   |   69 +
 .../inline/types/ObjectHashInlineIndexKeyType.java |   64 +
 .../inline/types/ShortInlineIndexKeyType.java      |   59 +
 .../types/SignedBytesInlineIndexKeyType.java       |   33 +
 .../inline/types/StringInlineIndexKeyType.java     |  279 +++
 .../types/StringNoCompareInlineIndexKeyType.java   |   55 +
 .../inline/types/TimeInlineIndexKeyType.java       |   61 +
 .../inline/types/TimestampInlineIndexKeyType.java  |   82 +
 .../inline/types/UuidInlineIndexKeyType.java       |   74 +
 .../index/sorted/keys/AbstractDateIndexKey.java    |   37 +
 .../index/sorted/keys/AbstractTimeIndexKey.java    |   36 +
 .../sorted/keys/AbstractTimestampIndexKey.java     |   40 +
 .../query/index/sorted/keys/BooleanIndexKey.java   |   48 +
 .../query/index/sorted/keys/ByteIndexKey.java      |   48 +
 .../query/index/sorted/keys/BytesCompareUtils.java |   59 +
 .../query/index/sorted/keys/BytesIndexKey.java     |   48 +
 .../index/sorted/keys/CacheJavaObjectIndexKey.java |   85 +
 .../query/index/sorted/keys/DecimalIndexKey.java   |   49 +
 .../query/index/sorted/keys/DoubleIndexKey.java    |   48 +
 .../query/index/sorted/keys/FloatIndexKey.java     |   48 +
 .../cache/query/index/sorted/keys/IndexKey.java    |   40 +
 .../query/index/sorted/keys/IndexKeyFactory.java   |   99 +
 .../query/index/sorted/keys/IntegerIndexKey.java   |   48 +
 .../index/sorted/keys/JavaObjectIndexKey.java      |  109 +
 .../query/index/sorted/keys/LongIndexKey.java      |   48 +
 .../query/index/sorted/keys/NullIndexKey.java      |   46 +
 .../index/sorted/keys/PlainJavaObjectIndexKey.java |   64 +
 .../query/index/sorted/keys/ShortIndexKey.java     |   49 +
 .../index/sorted/keys/SignedBytesIndexKey.java     |   33 +
 .../query/index/sorted/keys/StringIndexKey.java    |   49 +
 .../query/index/sorted/keys/UuidIndexKey.java      |   53 +
 .../thin/ClientCacheEntryListenerHandler.java      |  265 +++
 .../thin/ClientCacheEntryListenersRegistry.java    |   61 +
 .../ignite/internal/client/thin/ClientChannel.java |    9 +-
 .../internal/client/thin/ClientComputeImpl.java    |  249 +-
 .../client/thin/ClientContinuousQueryCursor.java   |   61 +
 .../internal/client/thin/ClientJCacheAdapter.java  |  194 ++
 .../thin/ClientJCacheEntryListenerAdapter.java     |   70 +
 .../client/thin/ClientNotificationType.java        |   45 +
 .../internal/client/thin/ClientOperation.java      |   25 +-
 .../client/thin/IgniteClientFutureImpl.java        |   54 +-
 .../internal/client/thin/NotificationListener.java |   12 +-
 .../internal/client/thin/ReliableChannel.java      |   50 +-
 .../internal/client/thin/TcpClientCache.java       |  242 +-
 .../internal/client/thin/TcpClientChannel.java     |  115 +-
 .../internal/client/thin/TcpIgniteClient.java      |   23 +-
 .../ignite/internal/cluster/IgniteClusterImpl.java |    9 +-
 .../stream/v2/DirectByteBufferStreamImplV2.java    |   15 +-
 .../internal/jdbc/thin/JdbcThinConnection.java     |    6 +-
 .../ignite/internal/jdbc2/JdbcCloseCursorTask.java |   46 +
 .../ignite/internal/jdbc2/JdbcConnection.java      |   48 +
 .../jdbc2/JdbcQueryMultipleStatementsTask.java     |   11 +
 .../jdbc2/JdbcQueryMultipleStatementsTaskV3.java   |   72 +
 .../ignite/internal/jdbc2/JdbcResultSet.java       |   20 +-
 .../ignite/internal/jdbc2/JdbcStatement.java       |   29 +-
 .../jdbc2/JdbcStreamedPreparedStatement.java       |    2 +-
 .../internal/managers/GridManagerAdapter.java      |    8 +-
 .../communication/GridIoMessageFactory.java        |    4 -
 .../deployment/GridDeploymentLocalStore.java       |  174 +-
 .../deployment/GridDeploymentPerLoaderStore.java   |    2 +-
 .../managers/discovery/GridDiscoveryManager.java   |  111 +-
 .../managers/encryption/CacheGroupPageScanner.java |  234 +-
 .../encryption/EncryptionCacheKeyProvider.java     |   42 +
 .../managers/encryption/GridEncryptionManager.java |  110 +-
 .../managers/encryption/GroupKeyChangeProcess.java |    4 +-
 .../managers/indexing/IndexesRebuildTask.java      |  170 ++
 .../systemview/walker/AtomicLongViewWalker.java    |   52 +
 .../walker/AtomicReferenceViewWalker.java          |   52 +
 .../walker/AtomicSequenceViewWalker.java           |   54 +
 .../systemview/walker/AtomicStampedViewWalker.java |   54 +
 .../walker/CountDownLatchViewWalker.java           |   56 +
 .../systemview/walker/QueueViewWalker.java         |   61 +
 .../systemview/walker/ReentrantLockViewWalker.java |   60 +
 .../systemview/walker/SemaphoreViewWalker.java     |   60 +
 .../managers/systemview/walker/SetViewWalker.java  |   57 +
 .../systemview/walker/SqlQueryViewWalker.java      |    4 +-
 .../internal/metric/IoStatisticsHolderQuery.java   |    3 +-
 .../ignite/internal/pagemem/PageIdAllocator.java   |    6 -
 .../apache/ignite/internal/pagemem/PageUtils.java  |    2 +-
 .../pagemem/store/IgnitePageStoreManager.java      |    8 +-
 .../internal/pagemem/wal/record/DataEntry.java     |    6 +-
 .../internal/pagemem/wal/record/WALRecord.java     |    6 +-
 .../delta/MetaPageUpdatePartitionDataRecordV2.java |    9 +-
 .../internal/processors/GridProcessorAdapter.java  |    5 +-
 .../affinity/GridAffinityAssignmentCache.java      |    4 +-
 .../processors/affinity/GridAffinityProcessor.java |   29 +-
 .../authentication/AuthorizationContext.java       |   89 -
 .../IgniteAuthenticationProcessor.java             |  527 +++--
 .../cache/CacheAffinitySharedManager.java          |   49 +-
 .../processors/cache/CacheEvictableEntryImpl.java  |    2 +-
 .../processors/cache/CacheGroupContext.java        |    3 +-
 .../processors/cache/CacheGroupMetricsImpl.java    |    3 +-
 .../cache/CacheGroupMetricsMXBeanImpl.java         |   12 +-
 .../internal/processors/cache/CacheLazyEntry.java  |   19 +-
 .../cache/CacheLocalMetricsMXBeanImpl.java         |   14 +-
 .../processors/cache/CacheMetricsImpl.java         |   17 +-
 .../processors/cache/ClusterCachesInfo.java        |   67 +-
 .../cache/DynamicCacheChangeRequest.java           |    2 +-
 .../internal/processors/cache/ExchangeActions.java |   28 +-
 .../cache/GatewayProtectedCacheProxy.java          |   60 +-
 .../processors/cache/GridCacheAdapter.java         |   34 +-
 .../cache/GridCacheDeploymentManager.java          |   25 +-
 .../processors/cache/GridCacheEvictionManager.java |    2 +-
 .../processors/cache/GridCacheIoManager.java       |   38 +-
 .../processors/cache/GridCacheMapEntry.java        |   23 +-
 .../processors/cache/GridCacheMvccManager.java     |    2 +-
 .../cache/GridCachePartitionExchangeManager.java   |   47 +-
 .../processors/cache/GridCachePreloader.java       |    3 +-
 .../cache/GridCachePreloaderAdapter.java           |    2 +-
 .../processors/cache/GridCacheProcessor.java       |  231 +-
 .../processors/cache/GridCacheSharedContext.java   |   12 +-
 .../cache/GridCacheSharedTtlCleanupManager.java    |   23 +-
 .../internal/processors/cache/GridCacheUtils.java  |    3 +
 .../cache/GridDeferredAckMessageSender.java        |    3 +-
 .../processors/cache/IgniteCacheFutureImpl.java    |    8 +-
 .../cache/IgniteCacheOffheapManager.java           |   15 +-
 .../cache/IgniteCacheOffheapManagerImpl.java       |   32 +-
 .../processors/cache/IgniteCacheProxyImpl.java     |   26 +-
 .../cache/IgniteFinishedCacheFutureImpl.java       |    2 +-
 .../cache/PartitionUpdateCounterErrorWrapper.java  |  182 ++
 .../cache/PartitionUpdateCounterTrackingImpl.java  |   31 +-
 .../internal/processors/cache/QueryCursorImpl.java |   81 +-
 .../cache/ValidationOnNodeJoinUtils.java           |    4 +-
 .../internal/processors/cache/WalStateManager.java |   49 +-
 .../cache/binary/BinaryMetadataTransport.java      |    3 +-
 .../binary/CacheObjectBinaryProcessorImpl.java     |   44 +-
 .../datastructures/CacheDataStructuresManager.java |   10 +
 .../distributed/GridCacheTxRecoveryFuture.java     |    5 +-
 .../cache/distributed/dht/GridDhtCacheAdapter.java |    2 +-
 .../dht/GridDhtTxAbstractEnlistFuture.java         |    3 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java    |   74 +-
 .../dht/GridPartitionedSingleGetFuture.java        |    2 +-
 .../distributed/dht/atomic/GridDhtAtomicCache.java |   86 +-
 .../atomic/GridNearAtomicSingleUpdateFuture.java   |    5 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java     |    5 +-
 .../dht/colocated/GridDhtColocatedCache.java       |    6 +-
 .../dht/colocated/GridDhtColocatedLockFuture.java  |    5 +-
 .../dht/colocated/GridDhtDetachedCacheEntry.java   |    8 +-
 .../dht/preloader/FinishPreloadingTask.java        |   21 +-
 .../dht/preloader/GridDhtPartitionDemander.java    |  155 +-
 .../dht/preloader/GridDhtPartitionFullMap.java     |    3 +-
 .../dht/preloader/GridDhtPartitionSupplier.java    |    5 +-
 .../preloader/GridDhtPartitionsExchangeFuture.java |  202 +-
 .../dht/preloader/GridDhtPreloader.java            |    8 +-
 .../dht/preloader/latch/ExchangeLatchManager.java  |    3 +-
 .../dht/topology/GridClientPartitionTopology.java  |    2 +-
 .../dht/topology/GridDhtLocalPartition.java        |    2 +-
 .../dht/topology/GridDhtPartitionTopologyImpl.java |   12 +-
 .../dht/topology/GridDhtPartitionsReservation.java |   18 +-
 .../topology/GridDhtPartitionsStateValidator.java  |  125 +-
 .../distributed/near/GridNearAtomicCache.java      |    3 +-
 .../cache/distributed/near/GridNearGetFuture.java  |    2 +-
 .../cache/distributed/near/GridNearLockFuture.java |    2 +-
 ...dNearOptimisticSerializableTxPrepareFuture.java |   18 +-
 .../near/GridNearOptimisticTxPrepareFuture.java    |    5 +-
 .../distributed/near/GridNearTxFinishFuture.java   |    2 +-
 .../cache/distributed/near/GridNearTxLocal.java    |   73 +-
 .../near/GridNearTxPrepareResponse.java            |    2 +-
 .../processors/cache/local/GridLocalCache.java     |    6 +-
 .../cache/local/atomic/GridLocalAtomicCache.java   |    9 +-
 .../processors/cache/mvcc/MvccProcessorImpl.java   |    6 +-
 .../internal/processors/cache/mvcc/MvccUtils.java  |    4 +-
 .../msg/PartitionCountersNeighborcastRequest.java  |  173 --
 .../msg/PartitionCountersNeighborcastResponse.java |  141 --
 .../internal/processors/cache/package-info.java    |    5 +-
 .../cache/persistence/CacheDataRowAdapter.java     |   77 +-
 .../cache/persistence/DataRegionMetricsImpl.java   |   10 +
 .../persistence/DataRegionMetricsMXBeanImpl.java   |   12 +-
 .../cache/persistence/DataStorageMetricsImpl.java  |  198 +-
 .../persistence/DataStorageMetricsSnapshot.java    |   30 +-
 .../GridCacheDatabaseSharedManager.java            |  166 +-
 .../cache/persistence/GridCacheOffheapManager.java |  260 +-
 .../IgniteCacheDatabaseSharedManager.java          |   59 +-
 .../processors/cache/persistence/IndexStorage.java |   12 +
 .../cache/persistence/IndexStorageImpl.java        |   13 +
 .../cache/persistence/RecoveryDebug.java           |    2 +-
 .../persistence/checkpoint/CheckpointEntry.java    |   17 +-
 .../persistence/checkpoint/CheckpointHistory.java  |   29 +-
 .../persistence/checkpoint/CheckpointManager.java  |   17 +-
 .../checkpoint/CheckpointPagesWriter.java          |    3 +-
 .../persistence/checkpoint/CheckpointWorkflow.java |    7 +-
 .../cache/persistence/checkpoint/Checkpointer.java |  114 +-
 .../checkpoint/LightweightCheckpointManager.java   |    9 +-
 .../checkpoint/PartitionDestroyQueue.java          |   18 +-
 .../CachePartitionDefragmentationManager.java      |   24 +-
 .../cache/persistence/defragmentation/LinkMap.java |   16 +-
 .../cache/persistence/file/EncryptedFileIO.java    |   98 +-
 .../cache/persistence/file/EncryptionUtil.java     |  159 ++
 .../cache/persistence/file/FilePageStore.java      |   48 +-
 .../persistence/file/FilePageStoreFactory.java     |   56 -
 .../persistence/file/FilePageStoreManager.java     |  149 +-
 .../cache/persistence/file/FilePageStoreV2.java    |   14 +-
 .../file/FileVersionCheckingFactory.java           |   67 +-
 .../cache/persistence/freelist/PagesList.java      |   41 +-
 .../cache/persistence/metastorage/MetaStorage.java |   29 +-
 .../metastorage/MetastorageRowStoreEntry.java      |    3 +-
 .../pendingtask/DurableBackgroundTask.java         |   37 +-
 .../pendingtask/DurableBackgroundTaskResult.java   |  107 +
 .../processors/cache/persistence/package-info.java |    5 +-
 .../pagemem/ClockPageReplacementFlags.java         |  154 ++
 .../pagemem/ClockPageReplacementPolicy.java        |   96 +
 .../pagemem/ClockPageReplacementPolicyFactory.java |   33 +
 .../cache/persistence/pagemem/PageMemoryImpl.java  |  545 ++---
 .../cache/persistence/pagemem/PagePool.java        |    8 +
 .../pagemem/PageReadWriteManagerImpl.java          |    8 +-
 .../persistence/pagemem/PageReplacementPolicy.java |   69 +
 .../pagemem/PageReplacementPolicyFactory.java      |   39 +
 .../pagemem/RandomLruPageReplacementPolicy.java    |  247 ++
 .../RandomLruPageReplacementPolicyFactory.java     |   33 +
 .../persistence/pagemem/SegmentedLruPageList.java  |  364 +++
 .../pagemem/SegmentedLruPageReplacementPolicy.java |  102 +
 .../SegmentedLruPageReplacementPolicyFactory.java  |   33 +
 .../cache/persistence/pagemem/package-info.java    |    5 +-
 .../snapshot/IgniteCacheSnapshotManager.java       |    3 +-
 .../snapshot/IgniteSnapshotManager.java            |  796 ++++++-
 .../snapshot/IgniteSnapshotVerifyException.java    |   48 +
 .../persistence/snapshot/SnapshotFutureTask.java   |  215 +-
 .../persistence/snapshot/SnapshotMetadata.java     |  199 ++
 .../snapshot/SnapshotMetadataCollectorTask.java    |  111 +
 .../snapshot/SnapshotOperationRequest.java         |  130 +
 .../snapshot/SnapshotPartitionsVerifyTask.java     |  327 +++
 .../snapshot/SnapshotRestoreProcess.java           |  935 ++++++++
 .../cache/persistence/tree/BPlusTree.java          |    9 +-
 .../persistence/tree/io/AbstractDataPageIO.java    |  129 +-
 .../cache/persistence/tree/io/BPlusMetaIO.java     |   31 +-
 .../cache/persistence/tree/io/PageIO.java          |    3 +-
 .../persistence/tree/io/PagePartitionMetaIO.java   |   38 +
 .../persistence/tree/io/PagePartitionMetaIOV2.java |   23 +-
 .../persistence/tree/io/PagePartitionMetaIOV3.java |   16 +-
 .../cache/persistence/tree/util/PageHandler.java   |   16 +-
 .../persistence/wal/FileWriteAheadLogManager.java  |  443 +++-
 .../cache/persistence/wal/SegmentRouter.java       |    8 +-
 .../wal/filehandle/FileHandleManagerImpl.java      |   10 +-
 .../wal/reader/StandaloneGridKernalContext.java    |   20 +-
 .../wal/reader/StandaloneWalRecordsIterator.java   |    8 +-
 .../wal/serializer/RecordDataV1Serializer.java     |    4 +-
 .../wal/serializer/RecordV1Serializer.java         |    8 +-
 .../processors/cache/query/CacheQueryEntry.java    |    2 +-
 .../query/GridCacheDistributedQueryFuture.java     |    6 +-
 .../query/GridCacheDistributedQueryManager.java    |    6 +-
 .../cache/query/GridCacheQueryManager.java         |   84 +-
 .../processors/cache/query/GridCacheSqlQuery.java  |   25 +-
 .../continuous/CacheContinuousQueryHandler.java    |   44 +-
 .../continuous/CacheContinuousQueryHandlerV3.java  |    7 +-
 .../continuous/CacheContinuousQueryManager.java    |    8 +-
 .../cache/query/jdbc/GridCacheQueryJdbcTask.java   |    6 +-
 .../cache/store/GridCacheWriteBehindStore.java     |   10 +-
 .../cache/transactions/IgniteTxAdapter.java        |   17 +-
 .../cache/transactions/IgniteTxEntry.java          |   16 +-
 .../cache/transactions/IgniteTxHandler.java        |   64 +-
 .../cache/transactions/IgniteTxLocalAdapter.java   |   11 +-
 .../cache/transactions/IgniteTxManager.java        |  133 +-
 .../PartitionCountersNeighborcastFuture.java       |  236 --
 .../cache/transactions/TxEntryValueHolder.java     |    5 +-
 .../processors/cache/tree/AbstractDataLeafIO.java  |    2 +-
 .../processors/cache/tree/CacheDataRowStore.java   |   10 +-
 .../processors/cache/tree/CacheDataTree.java       |    2 +-
 .../internal/processors/cache/tree/DataRow.java    |    7 +
 .../cache/tree/mvcc/data/MvccDataRow.java          |    2 +-
 .../cache/tree/mvcc/data/MvccUpdateDataRow.java    |    6 +-
 .../cache/verify/IdleVerifyResultV2.java           |  102 +-
 .../processors/cache/verify/IdleVerifyUtility.java |  114 +-
 .../cache/verify/PartitionHashRecordV2.java        |   10 +-
 .../verify/VerifyBackupPartitionsDumpTask.java     |    8 +-
 .../cache/verify/VerifyBackupPartitionsTask.java   |    2 +-
 .../cache/verify/VerifyBackupPartitionsTaskV2.java |  190 +-
 .../cacheobject/IgniteCacheObjectProcessor.java    |   10 +
 .../processors/closure/GridClosureProcessor.java   |    6 +-
 .../cluster/ClusterMetricsUpdateMessage.java       |    6 +-
 .../processors/cluster/ClusterProcessor.java       |   12 +-
 .../cluster/GridClusterStateProcessor.java         |   37 +-
 .../autoadjust/BaselineAutoAdjustData.java         |   11 +-
 .../autoadjust/BaselineAutoAdjustScheduler.java    |   50 +-
 .../autoadjust/BaselineTopologyUpdater.java        |  162 ++
 .../baseline/autoadjust/ChangeTopologyWatcher.java |  164 --
 .../continuous/GridContinuousProcessor.java        |   85 +-
 .../datastreamer/DataStreamProcessor.java          |    3 +-
 .../processors/datastreamer/DataStreamerImpl.java  |   48 +-
 .../datastreamer/DataStreamerRequest.java          |    6 +-
 .../datastructures/AtomicDataStructureProxy.java   |    4 +-
 .../datastructures/DataStructuresProcessor.java    |  201 +-
 .../GridCacheAtomicReferenceImpl.java              |    4 +-
 .../datastructures/GridCacheLockImpl.java          |    2 +-
 .../datastructures/GridCacheQueueProxy.java        |   10 +
 .../datastructures/GridCacheSemaphoreImpl.java     |   35 +
 .../datastructures/GridCacheSemaphoreState.java    |    4 +-
 .../datastructures/GridCacheSetProxy.java          |   10 +
 .../processors/diagnostic/DiagnosticProcessor.java |  222 +-
 .../diagnostic/PageHistoryDiagnoster.java          |  350 ---
 .../processors/failure/FailureProcessor.java       |    2 +-
 .../internal/processors/job/GridJobProcessor.java  |   15 +-
 .../internal/processors/job/GridJobWorker.java     |    5 +
 .../processors/jobmetrics/GridJobMetrics.java      |   12 +-
 .../jobmetrics/GridJobMetricsProcessor.java        |   12 +-
 .../jobmetrics/GridJobMetricsSnapshot.java         |   12 +-
 .../localtask/DurableBackgroundTaskState.java      |  147 ++
 .../localtask/DurableBackgroundTasksProcessor.java |  439 ++--
 .../marshaller/GridMarshallerMappingProcessor.java |    3 +-
 .../marshaller/MarshallerMappingTransport.java     |    5 +-
 .../persistence/DistributedMetaStorageImpl.java    |  151 +-
 .../persistence/DmsDataWriterWorker.java           |  233 +-
 .../metastorage/persistence/DmsWorkerStatus.java   |   30 -
 .../processors/metric/GridMetricManager.java       |   10 +-
 .../internal/processors/metric/MetricRegistry.java |    8 +-
 .../ClientListenerAbstractConnectionContext.java   |   80 +-
 .../odbc/ClientListenerConnectionContext.java      |    8 -
 .../processors/odbc/ClientListenerNioListener.java |   22 +-
 .../processors/odbc/ClientListenerProcessor.java   |   14 +-
 .../internal/processors/odbc/SqlListenerUtils.java |    2 +-
 .../odbc/jdbc/JdbcConnectionContext.java           |   13 +-
 .../processors/odbc/jdbc/JdbcRequestHandler.java   |   16 +-
 .../processors/odbc/odbc/OdbcColumnMeta.java       |   39 +-
 .../odbc/odbc/OdbcConnectionContext.java           |   18 +-
 .../processors/odbc/odbc/OdbcMessageParser.java    |    4 +-
 .../processors/odbc/odbc/OdbcRequestHandler.java   |   30 +-
 .../processors/odbc/odbc/OdbcResultSet.java        |    2 +-
 .../internal/processors/odbc/odbc/OdbcUtils.java   |    7 +-
 .../processors/offheap/GridOffHeapProcessor.java   |    7 +-
 .../ignite/internal/processors/package-info.java   |    4 +-
 .../FilePerformanceStatisticsReader.java           |   57 +
 .../FilePerformanceStatisticsWriter.java           |   78 +-
 .../performancestatistics/OperationType.java       |   18 +-
 .../PerformanceStatisticsHandler.java              |   44 +
 .../PerformanceStatisticsMBeanImpl.java            |    5 +
 .../PerformanceStatisticsProcessor.java            |  168 +-
 .../processors/platform/PlatformProcessorImpl.java |    6 +-
 .../platform/binary/PlatformBinaryProcessor.java   |    3 +-
 .../platform/client/ClientBitmaskFeature.java      |    7 +-
 .../platform/client/ClientConnectionContext.java   |   17 +-
 .../platform/client/ClientMessageParser.java       |    7 +
 .../platform/client/ClientRequestHandler.java      |    8 +-
 .../ClientBinaryConfigurationGetRequest.java       |   76 +
 .../ClientBinaryConfigurationGetResponse.java      |   54 +
 .../cache/ClientCacheSqlFieldsQueryRequest.java    |    4 +-
 .../platform/cluster/PlatformClusterGroup.java     |    2 +-
 .../platform/services/PlatformServices.java        |   26 +-
 .../transactions/PlatformTransactions.java         |    6 +-
 .../platform/utils/PlatformConfigurationUtils.java |   40 +
 .../processors/platform/utils/PlatformUtils.java   |    3 +
 .../internal/processors/query/GridIndex.java       |    6 +-
 .../processors/query/GridQueryFieldMetadata.java   |    9 +
 .../processors/query/GridQueryIndexing.java        |   78 +-
 .../processors/query/GridQueryProcessor.java       |  243 +-
 .../processors/query/GridQueryRowCacheCleaner.java |    2 +-
 .../processors/query/GridRunningQueryInfo.java     |   15 +-
 .../processors/query/IndexRebuildAware.java        |  145 ++
 .../internal/processors/query/NoOpQueryEngine.java |    3 +-
 .../internal/processors/query/QueryEntityEx.java   |   26 +-
 .../processors/query/QueryTypeDescriptorImpl.java  |    4 +-
 .../internal/processors/query/QueryUtils.java      |   61 +-
 .../processors/query/RunningQueryManager.java      |   16 +-
 .../schema/SchemaIndexCacheCompoundFuture.java     |   49 +
 .../query/schema/SchemaIndexCacheFuture.java       |   46 +
 .../schema/SchemaIndexCachePartitionWorker.java    |   20 +-
 .../query/schema/SchemaIndexCacheVisitorImpl.java  |    7 +-
 .../SchemaIndexOperationCancellationException.java |   36 +
 .../processors/rest/GridRestProcessor.java         |   66 +-
 .../handlers/cache/GridCacheCommandHandler.java    |   67 +-
 .../DataStructuresCommandHandler.java              |    6 +-
 .../handlers/probe/GridProbeCommandHandler.java    |    6 +-
 .../rest/handlers/query/QueryCommandHandler.java   |    8 +-
 .../handlers/user/UserActionCommandHandler.java    |   13 +-
 .../rest/protocols/tcp/GridTcpRestNioListener.java |  104 +-
 .../processors/rest/request/GridRestRequest.java   |   16 +-
 .../processors/security/GridSecurityProcessor.java |   32 +
 .../processors/security/IgniteSecurity.java        |   26 +
 .../security/IgniteSecurityProcessor.java          |   20 +
 .../security/NoOpIgniteSecurityProcessor.java      |   22 +-
 .../processors/security/SecurityUtils.java         |    2 +-
 .../processors/service/GridServiceProcessor.java   |    3 +-
 .../processors/service/GridServiceProxy.java       |   14 +-
 .../processors/service/ServiceDeploymentTask.java  |    3 +-
 .../GridInternalSubscriptionProcessor.java         |    3 +-
 .../internal/processors/task/GridTaskWorker.java   |    5 +-
 .../internal/processors/tracing/SpanTags.java      |    9 +
 .../processors/tracing/TraceableIterator.java      |   11 +-
 .../GridTracingConfigurationManager.java           |    8 +-
 .../apache/ignite/internal/sql/SqlParserUtils.java |    2 +-
 .../suggestions/JvmConfigurationSuggestions.java   |    6 -
 .../suggestions/OsConfigurationSuggestions.java    |   38 +-
 .../apache/ignite/internal/util/GridCleaner.java   |    2 +-
 .../org/apache/ignite/internal/util/GridDebug.java |    4 +-
 .../ignite/internal/util/GridJavaProcess.java      |    9 +-
 .../apache/ignite/internal/util/GridLeanSet.java   |    2 +-
 .../ignite/internal/util/GridMutableLong.java      |   64 +
 .../apache/ignite/internal/util/GridUnsafe.java    |    7 +-
 .../ignite/internal/util/HostAndPortRange.java     |  133 +-
 .../apache/ignite/internal/util/IgniteUtils.java   |   82 +-
 .../ignite/internal/util/collection/IntMap.java    |   30 +
 .../util/distributed/DistributedProcess.java       |   24 +-
 .../internal/util/future/IgniteFutureImpl.java     |   24 +-
 .../util/ipc/loopback/IpcServerTcpEndpoint.java    |    2 +-
 .../ipc/shmem/IpcSharedMemoryServerEndpoint.java   |    2 +-
 .../apache/ignite/internal/util/lang/GridFunc.java |   10 +
 .../ignite/internal/util/nio/GridNioServer.java    |   11 +
 .../internal/util/nio/GridNioSessionImpl.java      |    2 +-
 .../internal/util/nio/ssl/GridNioSslHandler.java   |   12 +
 .../util/offheap/unsafe/GridUnsafeMap.java         |    2 +-
 .../util/tostring/CircularStringBuilder.java       |    2 +-
 .../util/tostring/GridToStringBuilder.java         |    7 +-
 .../apache/ignite/internal/util/typedef/CIX1.java  |    7 +-
 .../apache/ignite/internal/util/typedef/CIX2.java  |    7 +-
 .../apache/ignite/internal/util/typedef/COX.java   |    7 +-
 .../apache/ignite/internal/util/typedef/CX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/CX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/PX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/PX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/R2.java    |    7 +-
 .../apache/ignite/internal/util/typedef/R3.java    |    7 +-
 .../apache/ignite/internal/util/typedef/RX1.java   |    7 +-
 .../apache/ignite/internal/util/typedef/RX2.java   |    7 +-
 .../apache/ignite/internal/util/typedef/RX3.java   |    7 +-
 .../ignite/internal/util/worker/CycleThread.java   |    2 +-
 .../ignite/internal/util/worker/GridWorker.java    |    4 +-
 .../visor/annotation/InterruptibleVisorTask.java   |   32 +
 ...VisorFindAndDeleteGarbageInPersistenceTask.java |   17 +-
 .../visor/cache/index/IndexForceRebuildTask.java   |  135 +-
 .../visor/cache/index/IndexRebuildStatusTask.java  |    7 +-
 .../diagnostic/VisorPageLocksTrackerArgs.java      |    2 +-
 .../node/VisorCacheRebalanceCollectorTask.java     |    3 +-
 .../VisorPerformanceStatisticsOperation.java       |   48 +
 .../VisorPerformanceStatisticsTask.java            |   93 +
 .../VisorPerformanceStatisticsTaskArg.java         |   64 +
 .../internal/visor/query/VisorQueryUtils.java      |    5 +-
 .../query/VisorRunningQueriesCollectorTask.java    |    4 +-
 .../visor/snapshot/VisorSnapshotCheckTask.java     |   60 +
 .../VisorTracingConfigurationTask.java             |    3 +-
 .../ignite/internal/visor/util/VisorMimeTypes.java |    9 +-
 .../internal/visor/verify/VisorIdleVerifyJob.java  |   13 +
 .../java/org/apache/ignite/lang/IgniteBiTuple.java |    2 +-
 .../java/org/apache/ignite/lang/IgniteFuture.java  |   10 +-
 .../org/apache/ignite/lang/IgniteProducer.java     |   34 +
 .../ignite/mxbean/CacheGroupMetricsMXBean.java     |   10 +-
 .../apache/ignite/mxbean/CacheMetricsMXBean.java   |   70 +-
 .../ignite/mxbean/DataRegionMetricsMXBean.java     |   34 +-
 .../ignite/mxbean/DataStorageMetricsMXBean.java    |   20 +-
 .../ignite/mxbean/DefragmentationMXBean.java       |    4 +-
 .../org/apache/ignite/mxbean/IgniteMXBean.java     |   74 +-
 .../ignite/mxbean/PerformanceStatisticsMBean.java  |    8 +-
 .../org/apache/ignite/mxbean/ThreadPoolMXBean.java |   20 +-
 .../ignite/mxbean/TransactionMetricsMxBean.java    |   12 +-
 .../plugin/security/AuthenticationContext.java     |   21 -
 .../ignite/plugin/security/SecurityPermission.java |    2 +-
 .../org/apache/ignite/spi/IgniteSpiContext.java    |    9 +-
 .../ignite/spi/checkpoint/CheckpointSpi.java       |    8 +-
 .../checkpoint/sharedfs/SharedFsCheckpointSpi.java |    2 +-
 .../jobstealing/JobStealingCollisionSpi.java       |    4 +-
 .../priorityqueue/PriorityQueueCollisionSpi.java   |    2 +-
 .../spi/communication/tcp/TcpCommunicationSpi.java |   29 +-
 .../tcp/internal/CommunicationTcpUtils.java        |   40 +-
 .../tcp/internal/CommunicationWorker.java          |    4 +-
 .../tcp/internal/ConnectionClientPool.java         |   93 +-
 .../tcp/internal/GridNioServerWrapper.java         |  328 +--
 .../tcp/internal/HandshakeTimeoutObject.java       |   55 +-
 .../tcp/internal/InboundConnectionHandler.java     |    2 +-
 .../TcpCommunicationConfigInitializer.java         |    3 +-
 .../TcpCommunicationConnectionCheckFuture.java     |    3 +-
 .../tcp/internal/TcpHandshakeExecutor.java         |  284 +++
 .../spi/deployment/local/LocalDeploymentSpi.java   |  100 +-
 .../ignite/spi/discovery/tcp/ClientImpl.java       |   19 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java       |  116 +-
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java  |   69 +-
 .../spi/discovery/tcp/TcpDiscoverySpiMBean.java    |   15 +-
 .../tcp/internal/TcpDiscoveryStatistics.java       |   12 +-
 .../multicast/TcpDiscoveryMulticastIpFinder.java   |    4 +-
 .../tcp/ipfinder/vm/TcpDiscoveryVmIpFinder.java    |  104 +-
 .../ignite/spi/encryption/EncryptionSpi.java       |   37 +-
 .../encryption/keystore/KeystoreEncryptionSpi.java |   94 +-
 .../spi/encryption/noop/NoopEncryptionSpi.java     |   15 +
 .../apache/ignite/spi/failover/FailoverSpi.java    |    3 +-
 .../jobstealing/JobStealingFailoverSpi.java        |    6 +-
 .../spi/indexing/IndexingQueryFilterImpl.java      |   34 +-
 .../apache/ignite/spi/indexing/IndexingSpi.java    |    2 +-
 .../ignite/spi/indexing/noop/NoopIndexingSpi.java  |    2 +-
 .../ignite/spi/metric/MetricExporterSpi.java       |   11 +-
 .../ignite/spi/metric/ReadOnlyMetricRegistry.java  |   32 +
 .../spi/metric/jmx/JmxMetricExporterSpi.java       |   55 +-
 .../spi/systemview/view/ClientConnectionView.java  |   10 +-
 .../spi/systemview/view/ContinuousQueryView.java   |   11 +-
 .../ignite/spi/systemview/view/SqlQueryView.java   |    6 +
 .../datastructures/AbstractDataStructureView.java  |   58 +
 .../view/datastructures/AtomicLongView.java        |   48 +
 .../view/datastructures/AtomicReferenceView.java   |   50 +
 .../view/datastructures/AtomicSequenceView.java    |   57 +
 .../view/datastructures/AtomicStampedView.java     |   59 +
 .../view/datastructures/CountDownLatchView.java    |   64 +
 .../systemview/view/datastructures/QueueView.java  |   89 +
 .../view/datastructures/ReentrantLockView.java     |   83 +
 .../view/datastructures/SemaphoreView.java         |   83 +
 .../systemview/view/datastructures/SetView.java    |   78 +
 .../apache/ignite/stream/StreamTransformer.java    |    2 +-
 .../java/org/jsr166/ConcurrentLinkedHashMap.java   |    8 +-
 .../main/resources/META-INF/classnames.properties  |    2 +
 modules/core/src/main/resources/ignite.properties  |    2 +-
 .../src/test/config/class_list_test_excluded.txt   |   17 +
 .../test/java/org/apache/ignite/GridTestJob.java   |    2 +-
 ...finityFunctionBackupFilterAbstractSelfTest.java |   24 +-
 ...tyFunctionExcludeNeighborsAbstractSelfTest.java |    2 +-
 ...NodeAttributeColocatedBackupFilterSelfTest.java |  250 ++
 ...usAffinityFunctionExcludeNeighborsSelfTest.java |   64 +-
 .../RendezvousAffinityFunctionSimpleBenchmark.java |    3 +
 ...nerRWThroughDisabledTransactionalCacheTest.java |    3 +-
 ...CacheStoreSessionListenerLifecycleSelfTest.java |    5 +-
 .../store/StoreResourceInjectionSelfTest.java      |    4 +-
 ...hallerStoreKeepBinaryWithSqlEscapeSelfTest.java |    3 +-
 .../cache/store/jdbc/CacheJdbcPojoStoreTest.java   |    6 +-
 ...JdbcPojoWriteBehindStoreWithCoalescingTest.java |   12 +-
 .../jdbc/JdbcTypesDefaultTransformerTest.java      |    7 +-
 .../store/jdbc/dialect/OracleDialectTest.java      |   49 +
 .../TestJdbcPojoStoreFactoryWithHangWriteAll.java  |    9 +-
 .../org/apache/ignite/client/ConnectionTest.java   |   31 +-
 .../org/apache/ignite/client/FunctionalTest.java   |   93 +-
 .../apache/ignite/client/LocalIgniteCluster.java   |   14 +-
 .../apache/ignite/client/PersonBinarylizable.java  |   31 +-
 .../org/apache/ignite/client/ReliabilityTest.java  |   14 -
 .../failure/FailureHandlerTriggeredTest.java       |    2 +-
 .../internal/ClusterNodeMetricsSelfTest.java       |    5 +-
 ...dCachePartitionExchangeManagerWarningsTest.java |  216 +-
 .../internal/GridContinuousTaskSelfTest.java       |    6 +-
 .../internal/GridJobMasterLeaveAwareSelfTest.java  |    3 +-
 .../GridMultipleVersionsDeploymentSelfTest.java    |    2 +-
 .../GridMultithreadedJobStealingSelfTest.java      |   12 +-
 .../internal/GridNodeMetricsLogPdsSelfTest.java    |   11 +-
 .../internal/GridNodeMetricsLogSelfTest.java       |   18 +-
 .../ignite/internal/GridSpiExceptionSelfTest.java  |    3 +-
 .../internal/GridStopWithCollisionSpiTest.java     |   66 +
 ...ientCheckClusterGroupLocalIdAfterReconnect.java |  142 ++
 .../ignite/internal/IgniteClientFailuresTest.java  |  100 +-
 .../IgniteExplicitImplicitDeploymentSelfTest.java  |  178 +-
 .../RaceOnDeployClassesWithSameAliases.java        |  147 --
 .../binary/BinaryBasicNameMapperSelfTest.java      |   21 +
 .../binary/BinaryClassLoaderMultiJvmTest.java      |    3 +-
 .../internal/binary/BinaryClassLoaderTest.java     |    3 +-
 .../internal/binary/BinaryEnumsSelfTest.java       |    1 +
 .../BinaryFooterOffsetsAbstractSelfTest.java       |    2 +
 .../internal/binary/BinaryMarshallerSelfTest.java  |  182 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java     |   11 +-
 .../BinaryObjectBuilderDefaultMappersSelfTest.java |    3 +-
 .../AbstractBinaryStreamByteOrderSelfTest.java     |    5 +
 .../streams/BinaryAbstractOutputStreamTest.java    |    9 +
 .../inline/InlineIndexKeyTypeRegistryTest.java     |   97 +
 .../client/thin/AbstractThinClientTest.java        |   22 +
 .../internal/client/thin/CacheAsyncTest.java       |   28 +-
 .../client/thin/CacheEntryListenersTest.java       |  774 ++++++
 .../internal/client/thin/ComputeTaskTest.java      |   29 +-
 .../internal/client/thin/ReliableChannelTest.java  |   10 +-
 .../ignite/internal/client/thin/ServicesTest.java  |   29 +-
 ...ClientPartitionAwarenessStableTopologyTest.java |   12 +
 .../internal/cluster/IgniteClusterIdTagTest.java   |    2 +-
 ...ectByteBufferStreamImplV2ByteOrderSelfTest.java |   63 +-
 .../encryption/AbstractEncryptionTest.java         |   10 +-
 .../encryption/CacheGroupKeyChangeTest.java        |    2 +-
 .../encryption/CacheGroupReencryptionTest.java     |   17 +-
 .../encryption/EncryptedCacheBigEntryTest.java     |    4 +-
 .../encryption/EncryptedCacheCreateTest.java       |    2 +-
 .../encryption/EncryptedCacheDestroyTest.java      |    2 +-
 .../encryption/EncryptedCacheGroupCreateTest.java  |    4 +-
 .../encryption/EncryptedCacheRestartTest.java      |    4 +-
 .../internal/encryption/EncryptionMXBeanTest.java  |    4 +-
 ...GridManagerMxBeanIllegalArgumentHandleTest.java |    4 +-
 .../managers/IgniteDiagnosticMessagesTest.java     |    5 +-
 .../IgniteCommunicationBalanceTest.java            |    3 +-
 .../GridDeploymentManagerStopSelfTest.java         |    4 +-
 .../GridDifferentLocalDeploymentSelfTest.java      |  162 ++
 .../P2PCacheOperationIntoComputeTest.java          |    5 +-
 .../IgniteTopologyPrintFormatSelfTest.java         |  212 +-
 .../optimized/OptimizedMarshallerTest.java         |   12 +-
 .../ignite/internal/metric/MetricsSelfTest.java    |   14 +-
 .../ignite/internal/metric/SystemMetricsTest.java  |   66 +
 .../ignite/internal/metric/SystemViewSelfTest.java |  677 ++++++
 .../wal/record/WALRecordSerializationTest.java     |    3 +-
 .../Authentication1kUsersNodeRestartTest.java      |   38 +-
 .../AuthenticationConfigurationClusterTest.java    |   80 +-
 .../AuthenticationOnNotActiveClusterTest.java      |   22 +-
 .../AuthenticationProcessorNodeRestartTest.java    |   58 +-
 .../AuthenticationProcessorSelfTest.java           |  324 +--
 .../cache/CacheAsyncContinuationExecutorTest.java  |  254 ++
 ...heAsyncContinuationSynchronousExecutorTest.java |   42 +
 .../cache/CacheEntryProcessorCopySelfTest.java     |    4 +
 .../cache/CacheGroupsMetricsRebalanceTest.java     |   52 +-
 ...InterceptorPartitionCounterLocalSanityTest.java |   12 +-
 .../processors/cache/CacheMetricsManageTest.java   |    6 +-
 .../processors/cache/CacheRebalancingSelfTest.java |    2 +-
 .../cache/CacheSerializableTransactionsTest.java   |   15 +-
 .../cache/CacheStopAndDestroySelfTest.java         |   20 +-
 .../ClientFastReplyCoordinatorFailureTest.java     |  100 +
 .../processors/cache/ClusterStateTestUtils.java    |    5 +-
 .../cache/GridCacheAffinityRoutingSelfTest.java    |    3 +
 .../GridCacheAsyncOperationsLimitSelfTest.java     |    4 +-
 .../GridCacheConfigurationConsistencySelfTest.java |    3 +-
 .../cache/GridCacheEntryMemorySizeSelfTest.java    |    3 +
 .../cache/GridCacheEntryVersionSelfTest.java       |    2 +-
 .../processors/cache/GridCacheMvccSelfTest.java    |    3 +
 .../cache/GridCacheNestedTxAbstractTest.java       |    2 +-
 .../cache/GridCacheOffheapUpdateSelfTest.java      |    2 +-
 .../cache/GridCacheOnCopyFlagAtomicSelfTest.java   |    2 +
 .../cache/GridCacheOnCopyFlagLocalSelfTest.java    |    2 +
 .../GridCacheOnCopyFlagReplicatedSelfTest.java     |    2 +
 .../GridCacheOnCopyFlagTxPartitionedSelfTest.java  |    2 +
 .../cache/GridCacheP2PUndeploySelfTest.java        |    2 +
 .../cache/GridCachePartitionedWritesTest.java      |    4 +-
 .../cache/GridCacheReferenceCleanupSelfTest.java   |    7 +
 .../cache/GridCacheTtlManagerEvictionSelfTest.java |    2 +
 .../cache/GridCacheTtlManagerLoadTest.java         |    2 +-
 .../IgniteAbstractDynamicCacheStartFailTest.java   |    6 +-
 .../IgniteCacheClusterReadOnlyModeSelfTest.java    |   10 +-
 .../processors/cache/IgniteCacheGroupsTest.java    |    2 +-
 .../cache/IgniteCacheInterceptorSelfTestSuite.java |    9 +-
 .../cache/IgniteClientCacheStartFailoverTest.java  |    8 +-
 .../cache/IgniteDynamicCacheStartSelfTest.java     |    8 +-
 .../cache/IgniteOutOfMemoryPropagationTest.java    |    3 +
 .../RebalanceIteratorLargeEntriesOOMTest.java      |  137 ++
 .../cache/RestorePartitionStateTest.java           |  220 ++
 .../SetTxTimeoutOnPartitionMapExchangeTest.java    |    2 +-
 ...aryObjectsAtomicNearDisabledOnheapSelfTest.java |    6 +
 ...GridCacheBinaryObjectsAtomicOnheapSelfTest.java |    6 +
 ...jectsPartitionedNearDisabledOnheapSelfTest.java |    6 +
 ...acheBinaryObjectsPartitionedOnheapSelfTest.java |    6 +
 .../GridCacheBinaryObjectsLocalOnheapSelfTest.java |    6 +
 ...acheAbstractDataStructuresFailoverSelfTest.java |    2 +-
 .../GridCacheAtomicStampedApiSelfAbstractTest.java |    2 +-
 .../GridCacheQueueClientDisconnectTest.java        |    2 +-
 .../IgniteAtomicStampedClusterReadOnlyTest.java    |    2 +-
 .../IgniteDataStructuresNoClassOnServerTest.java   |    2 +
 ...iteExchangeLatchManagerCoordinatorFailTest.java |    4 +-
 .../datastructures/IgniteLockAbstractSelfTest.java |    2 +-
 .../IgniteSemaphoreAbstractSelfTest.java           |  101 +-
 .../SemaphoreFailoverNoWaitingAcquirerTest.java    |    2 +-
 ...chePartitionedAtomicReferenceMultiNodeTest.java |    2 +
 .../GridCachePartitionedNodeRestartTxSelfTest.java |    5 +-
 .../partitioned/IgnitePartitionedLockSelfTest.java |    2 +
 ...acheReplicatedAtomicReferenceMultiNodeTest.java |    2 +
 .../distributed/CacheBaselineTopologyTest.java     |    8 +-
 .../distributed/CacheBlockOnReadAbstractTest.java  |    2 +-
 .../CacheClientsConcurrentStartTest.java           |   32 +-
 .../cache/distributed/CacheStartOnJoinTest.java    |    7 +-
 .../GridCacheMultiNodeLockAbstractTest.java        |   12 +-
 ...GridCacheMultithreadedFailoverAbstractTest.java |  593 -----
 .../GridCacheMultithreadedFailoverTest.java        |  595 +++++
 ...PartitionEvictionDuringReadThroughSelfTest.java |    7 +-
 ...GridExchangeFreeCellularSwitchAbstractTest.java |  134 +-
 ...ngeFreeCellularSwitchComplexOperationsTest.java |   76 +-
 ...ridExchangeFreeCellularSwitchIsolationTest.java |  535 +++--
 ...changeFreeCellularSwitchTxContinuationTest.java |  264 +++
 ...idExchangeFreeCellularSwitchTxCountersTest.java |  242 ++
 .../distributed/GridExchangeFreeSwitchTest.java    |    8 +-
 .../IgniteBinaryMetadataUpdateNodeRestartTest.java |    2 +
 ...CacheClientMultiNodeUpdateTopologyLockTest.java |    2 +
 .../IgniteCacheNearRestartRollbackSelfTest.java    |    2 +
 .../IgniteCachePartitionLossPolicySelfTest.java    |    4 +-
 .../distributed/IgniteCacheSizeFailoverTest.java   |    2 +-
 .../distributed/IgniteTxTimeoutAbstractTest.java   |    2 +-
 ...sabledAtomicOnheapMultiNodeFullApiSelfTest.java |    3 +-
 .../GridCachePartitionsStateValidationTest.java    |   25 +-
 .../GridCachePartitionsStateValidatorSelfTest.java |    3 +-
 ...idCachePartitionsUpdateCountersAndSizeTest.java |  246 ++
 .../dht/GridCacheTxNodeFailureSelfTest.java        |    2 +-
 .../dht/IgniteCacheConcurrentPutGetRemove.java     |  165 --
 .../dht/IgniteCacheConcurrentPutGetRemoveTest.java |  165 ++
 .../dht/IgniteCacheMultiTxLockSelfTest.java        |    2 +-
 .../dht/IgniteCacheStartWithLoadTest.java          |    7 +-
 ...lanceIsProcessingWhenAssignmentIsEmptyTest.java |    2 +-
 .../dht/atomic/GridCacheAtomicPreloadSelfTest.java |    2 +
 .../dht/topology/BlockedEvictionsTest.java         |    7 +-
 ...MovingPartitionIsEvictedDuringClearingTest.java |    7 +-
 .../dht/topology/PartitionEvictionOrderTest.java   |  159 ++
 ...reloadingRestartWhileClearingPartitionTest.java |    7 +-
 .../GridCachePartitionedFilteredPutSelfTest.java   |    3 +-
 .../near/IgniteTxExceptionNodeFailTest.java        |  239 +-
 .../CacheRebalanceWithRemovedWalSegment.java       |  174 ++
 .../GridCacheRebalancingOrderingTest.java          |    2 +
 .../GridCacheRebalancingSyncSelfTest.java          |    2 +-
 .../rebalancing/RebalanceMetricsTest.java          |  112 +
 .../rebalancing/RebalanceStatisticsTest.java       |    3 +-
 .../GridCacheReplicatedMarshallerTxTest.java       |    2 +
 .../GridCacheReplicatedOnheapFullApiSelfTest.java  |    6 +
 ...heReplicatedOnheapMultiNodeFullApiSelfTest.java |    6 +
 .../GridCacheReplicatedTxConcurrentGetTest.java    |    2 +
 .../replicated/GridCacheReplicatedTxReadTest.java  |    2 +
 .../IgniteCacheAtomicLocalExpiryPolicyTest.java    |    3 +
 ...niteCacheAtomicLocalOnheapExpiryPolicyTest.java |    6 +
 .../IgniteCacheAtomicOnheapExpiryPolicyTest.java   |    6 +
 .../expiry/IgniteCacheExpiryPolicyTestSuite.java   |    4 +-
 ...teCacheStoreSessionWriteBehindAbstractTest.java |    4 +-
 .../GridCacheFastNodeLeftForTransactionTest.java   |    2 +-
 ...isabledAtomicOnheapMultiJvmFullApiSelfTest.java |    3 +-
 ...dNearDisabledOnheapMultiJvmFullApiSelfTest.java |    3 +-
 ...heMvccAbstractBasicCoordinatorFailoverTest.java |    7 +-
 .../cache/mvcc/CacheMvccAbstractTest.java          |    6 +-
 .../mvcc/CacheMvccConfigurationValidationTest.java |    6 +-
 .../cache/mvcc/CacheMvccTxFailoverTest.java        |    3 +-
 .../CorruptedTreeFailureHandlingTest.java          |   40 +-
 .../IgniteDataStorageMetricsSelfTest.java          |  238 +-
 ...gnitePdsBinaryMetadataOnClusterRestartTest.java |   12 +-
 ...sCacheObjectBinaryProcessorOnDiscoveryTest.java |    2 +-
 .../IgnitePdsCacheRebalancingAbstractTest.java     |    2 +-
 ...itePdsCacheStartStopWithFreqCheckpointTest.java |    2 +-
 .../persistence/IgnitePdsCorruptedStoreTest.java   |    3 +-
 .../persistence/IgnitePdsDefragmentationTest.java  |   68 +-
 .../IgnitePdsNoSpaceLeftOnDeviceTest.java          |    3 +-
 .../IgnitePdsSporadicDataRecordsOnBackupTest.java  |    2 +-
 ...IgnitePdsSpuriousRebalancingOnNodeJoinTest.java |   10 +-
 .../persistence/IgnitePdsTaskCancelingTest.java    |    2 +-
 .../persistence/MaintenanceRegistrySimpleTest.java |   14 +-
 ...hangingBaselineDownCacheRemoveFailoverTest.java |    5 +-
 ...eChangingBaselineUpCacheRemoveFailoverTest.java |    5 +-
 ...gniteStableBaselineCachePutAllFailoverTest.java |    2 +
 ...gniteStableBaselineCacheRemoveFailoverTest.java |    7 +-
 .../db/CheckpointBufferDeadlockTest.java           |   62 +-
 .../persistence/db/IgniteLogicalRecoveryTest.java  |    9 +-
 .../db/IgniteLogicalRecoveryWithParamsTest.java    |  368 +++
 .../db/IgnitePdsDataRegionMetricsTest.java         |   23 +-
 ...gnitePdsRebalancingOnNotStableTopologyTest.java |    2 +-
 .../db/IgnitePdsTransactionsHangTest.java          |    4 +-
 .../db/SlowCheckpointFileIOFactory.java            |   86 +
 .../db/checkpoint/CheckpointFreeListTest.java      |    6 +-
 .../db/checkpoint/IgniteMassLoadSandboxTest.java   |    3 +
 .../db/file/IgnitePdsCheckpointSimpleTest.java     |  144 +-
 ...CheckpointSimulationWithRealCpDisabledTest.java |    7 +-
 .../db/file/IgnitePdsDiskErrorsRecoveringTest.java |   10 +-
 .../db/file/IgnitePdsThreadInterruptionTest.java   |    2 +-
 .../persistence/db/wal/IgniteLocalWalSizeTest.java |   31 +-
 .../wal/IgniteNodeStoppedDuringDisableWALTest.java |    4 +-
 .../persistence/db/wal/IgniteWalRebalanceTest.java |  195 +-
 .../db/wal/WalArchiveSizeConfigurationTest.java    |  132 ++
 .../db/wal/WalCompactionAfterRestartTest.java      |    2 +
 .../db/wal/WalDeletionArchiveAbstractTest.java     |   98 +-
 .../db/wal/WalRecoveryTxLogicalRecordsTest.java    |   56 +-
 .../db/wal/WriteAheadLogManagerSelfTest.java       |  302 +++
 .../db/wal/crc/IgniteDataIntegrityTests.java       |    4 +-
 .../db/wal/reader/IgniteWalReaderTest.java         |    9 +-
 .../defragmentation/DefragmentationMXBeanTest.java |    1 -
 .../pagelocktracker/PageLockTrackerTestSuit.java   |    1 +
 .../pagelocktracker/log/PageLockLogTest.java       |    6 +-
 .../pagemem/BPlusTreePageMemoryImplTest.java       |    9 +-
 .../BPlusTreeReuseListPageMemoryImplTest.java      |    9 +-
 .../pagemem/ClockPageReplacementFlagsTest.java     |  119 +
 .../IgnitePageMemReplaceDelayedWriteUnitTest.java  |   12 +-
 .../pagemem/IgniteThrottlingUnitTest.java          |   10 +-
 .../pagemem/IndexStoragePageMemoryImplTest.java    |    9 +-
 .../persistence/pagemem/NoOpPageStoreManager.java  |    8 +-
 .../cache/persistence/pagemem/NoOpWALManager.java  |    5 +-
 .../pagemem/PageMemoryImplNoLoadTest.java          |    9 +-
 .../persistence/pagemem/PageMemoryImplTest.java    |   14 +-
 .../pagemem/PagesWriteThrottleSandboxTest.java     |    3 +-
 .../pagemem/PagesWriteThrottleSmokeTest.java       |   56 +-
 .../pagemem/SegmentedLruPageListTest.java          |  366 +++
 .../snapshot/AbstractSnapshotSelfTest.java         |   55 +-
 .../snapshot/IgniteClusterSnapshotCheckTest.java   |  542 +++++
 .../IgniteClusterSnapshotRestoreBaseTest.java      |  100 +
 .../IgniteClusterSnapshotRestoreSelfTest.java      |  770 ++++++
 .../snapshot/IgniteClusterSnapshotSelfTest.java    |   12 +-
 .../snapshot/IgniteSnapshotManagerSelfTest.java    |  187 +-
 .../IgniteSnapshotWithMetastorageTest.java         |  196 ++
 .../IgniteChangeGlobalStateCacheTest.java          |    4 +-
 .../IgniteChangeGlobalStateDataStructureTest.java  |    2 +
 .../IgniteChangeGlobalStateServiceTest.java        |    1 +
 .../IgniteChangeGlobalStateTest.java               |    1 +
 .../extended/GridActivateExtensionTest.java        |    2 +
 ...inActiveNodeToActiveClusterWithPersistence.java |    6 +-
 ...InActiveNodeToActiveClusterWithPersistence.java |    6 +-
 .../persistence/tree/io/TrackingPageIOTest.java    |    2 +-
 .../wal/AbstractWalDeltaConsistencyTest.java       |    2 +-
 .../wal/SegmentedRingByteBufferTest.java           |    4 +-
 .../persistence/wal/WalArchiveConsistencyTest.java |  273 +++
 .../wal/WalEnableDisableWithNodeShutdownTest.java  |  314 +++
 .../wal/WalEnableDisableWithRestartsTest.java      |  203 ++
 .../wal/memtracker/PageMemoryTracker.java          |    2 +-
 .../reader/StandaloneWalRecordsIteratorTest.java   |   38 +-
 .../cache/query/CacheDataPageScanQueryTest.java    |   10 +-
 .../cache/query/IndexingSpiQuerySelfTest.java      |    2 +-
 .../CacheContinuousQueryCounterAbstractTest.java   |    4 +-
 ...CacheContinuousQueryDeploymentToClientTest.java |  128 +
 ...cheContinuousQueryFailoverAbstractSelfTest.java |    9 +-
 .../CacheContinuousQueryRandomOperationsTest.java  |   28 +-
 ...CacheContinuousWithTransformerFailoverTest.java |   13 +-
 .../continuous/CacheKeepBinaryIterationTest.java   |    4 +-
 .../GridCacheContinuousQueryAbstractSelfTest.java  |   16 +-
 .../IgniteCacheContinuousQueryClientTest.java      |   45 +
 .../GridCacheWriteBehindStoreAbstractSelfTest.java |    2 +-
 ...iteBehindStorePartitionedMultiNodeSelfTest.java |    2 +-
 .../store/GridCacheWriteBehindStoreSelfTest.java   |    5 +-
 .../AbstractTransactionIntergrityTest.java         |   19 +-
 .../transactions/PartitionUpdateCounterTest.java   |    9 +-
 .../TxCrossCacheMapOnInvalidTopologyTest.java      |    5 +-
 .../cache/transactions/TxDeadlockCauseTest.java    |   11 +-
 .../TxDeadlockOnEntryToStringTest.java             |   24 +-
 .../cache/transactions/TxOnCachesStopTest.java     |    2 +-
 .../TxPartitionCounterStateConsistencyTest.java    |    6 +-
 ...ounterStateOnePrimaryTwoBackupsFailAllTest.java |    4 +-
 ...teOnePrimaryTwoBackupsHistoryRebalanceTest.java |  160 ++
 ...titionCounterStateOnePrimaryTwoBackupsTest.java |   21 +-
 ...titionCounterStateTwoPrimaryTwoBackupsTest.java |    7 +-
 .../TxRecoveryOnCoordniatorFailTest.java           |  116 +
 .../TxRecoveryWithConcurrentRollbackTest.java      |  140 +-
 .../cache/transactions/TxRollbackAsyncTest.java    |   14 +-
 .../TxRollbackOnTimeoutOnePhaseCommitTest.java     |    8 +-
 .../transactions/TxRollbackOnTimeoutTest.java      |  101 +-
 .../TxRollbackOnTopologyChangeTest.java            |    2 +-
 .../warmup/LoadAllWarmUpStrategySelfTest.java      |    3 +-
 .../processors/cluster/BaselineAutoAdjustTest.java |  219 +-
 .../cluster/ClusterNameBeforeActivation.java       |  106 +
 .../processors/database/BPlusTreeSelfTest.java     |   24 +-
 .../processors/database/CacheFreeListSelfTest.java |    9 +-
 .../database/DataRegionMetricsSelfTest.java        |   10 +-
 .../database/IgniteDbMemoryLeakAbstractTest.java   |    5 +-
 .../DataStreamerCommunicationSpiExceptionTest.java |  143 ++
 .../IgniteDataStreamerPerformanceTest.java         |    2 +-
 .../diagnostic/DiagnosticProcessorTest.java        |  313 ++-
 .../failure/FailureProcessorLoggingTest.java       |    4 +-
 .../DurableBackgroundTasksProcessorSelfTest.java   |  523 ++++
 .../localtask/ObservingCheckpointListener.java     |  128 +
 .../internal/processors/localtask/SimpleTask.java  |  102 +
 .../IgniteMessagingConfigVariationFullApiTest.java |    6 +-
 .../DistributedMetaStorageClassloadingTest.java    |  205 ++
 .../DistributedMetaStoragePersistentTest.java      |    2 +-
 .../metastorage/DistributedMetaStorageTest.java    |   48 +-
 .../persistence/DmsDataWriterWorkerTest.java       |   43 +-
 .../AbstractPerformanceStatisticsTest.java         |   58 +-
 .../performancestatistics/CheckpointTest.java      |  228 ++
 .../PerformanceStatisticsRotateFileTest.java       |  118 +
 .../processors/query/DummyQueryIndexing.java       |   55 +-
 .../cache/GridCacheMetadataCommandTest.java        |  113 +
 .../client/ThinClientPermissionCheckTest.java      |    9 +-
 .../client/ThinClientSslPermissionCheckTest.java   |    7 +-
 .../compute/ComputePermissionCheckTest.java        |    2 +-
 ...ridServiceDeploymentCompoundFutureSelfTest.java |    3 +-
 .../ServiceDeploymentProcessIdSelfTest.java        |    6 +-
 .../internal/sql/SqlParserCreateIndexSelfTest.java |   68 +-
 .../internal/sql/SqlParserKillQuerySelfTest.java   |    6 +-
 .../ignite/internal/util/GridArraysSelfTest.java   |   20 +-
 .../ignite/internal/util/GridMutableLongTest.java  |   61 +
 .../ignite/internal/util/HostAndPortRangeTest.java |  181 ++
 .../util/IgniteUtilsWorkDirectoryTest.java         |    3 +-
 .../internal/util/collection/IntHashMapTest.java   |   27 +
 .../util/future/IgniteCacheFutureImplTest.java     |    2 +-
 .../util/nio/impl/GridNioFilterChainSelfTest.java  |   14 +-
 .../GridOffHeapMapPerformanceAbstractTest.java     |    2 +-
 .../GridOffHeapPartitionedMapAbstractSelfTest.java |    2 -
 .../util/tostring/GridToStringBuilderSelfTest.java |    2 +-
 .../GridBoundedConcurrentOrderedMapSelfTest.java   |    4 +-
 .../loadtests/colocation/GridTestCacheStore.java   |    3 +-
 .../communication/GridIoManagerBenchmark0.java     |    3 +
 .../GridContinuousOperationsLoadTest.java          |   10 +-
 .../ignite/loadtests/job/GridJobLoadTest.java      |    3 +-
 .../lang/GridConcurrentLinkedHashMapBenchmark.java |   11 +-
 .../marshaller/GridMarshallerAbstractTest.java     |    2 +-
 .../marshaller/MarshallerContextTestImpl.java      |    7 +-
 .../ignite/messaging/GridMessagingSelfTest.java    |   12 +-
 .../messaging/IgniteMessagingSendAsyncTest.java    |    2 +-
 ...2PContinuousDeploymentClientDisconnectTest.java |  344 +++
 .../ignite/p2p/GridP2PLocalDeploymentSelfTest.java |    2 +-
 .../java/org/apache/ignite/p2p/GridP2PTestJob.java |    2 +-
 .../apache/ignite/p2p/GridP2PUndeploySelfTest.java |   41 +-
 .../java/org/apache/ignite/platform/Address.java   |   47 -
 .../org/apache/ignite/platform/Department.java     |   34 -
 .../java/org/apache/ignite/platform/Employee.java  |   47 -
 .../test/java/org/apache/ignite/platform/Key.java  |   51 -
 .../platform/PlatformComputeEchoArgTask.java       |   60 +
 .../ignite/platform/PlatformComputeEchoTask.java   |   14 +
 .../PlatformCustomBinaryBasicNameMapper.java       |   35 +
 .../platform/PlatformCustomBinaryNameMapper.java   |   35 +
 .../ignite/platform/PlatformDeployServiceTask.java |  127 +
 .../platform/PlatformEventsWriteEventTask.java     |    2 +-
 .../ignite/platform/PlatformTestExecutor.java      |   30 +
 .../ignite/platform/PlatformThreadUtils.java       |    9 +
 .../java/org/apache/ignite/platform/Value.java     |   51 -
 .../java/org/apache/ignite/platform/model/ACL.java |   23 +
 .../org/apache/ignite/platform/model/Account.java  |   71 +
 .../org/apache/ignite/platform/model/Address.java  |   47 +
 .../apache/ignite/platform/model/Department.java   |   34 +
 .../org/apache/ignite/platform/model/Employee.java |   47 +
 .../java/org/apache/ignite/platform/model/Key.java |   51 +
 .../apache/ignite/platform/model/ParamValue.java   |   43 +
 .../apache/ignite/platform/model/Parameter.java    |   43 +
 .../org/apache/ignite/platform/model/Role.java     |   39 +
 .../org/apache/ignite/platform/model/User.java     |   67 +
 .../java/org/apache/ignite/platform/model/V1.java  |   34 +
 .../java/org/apache/ignite/platform/model/V2.java  |   34 +
 .../java/org/apache/ignite/platform/model/V3.java  |   34 +
 .../java/org/apache/ignite/platform/model/V4.java  |   34 +
 .../org/apache/ignite/platform/model/Value.java    |   51 +
 .../session/GridSessionWaitAttributeSelfTest.java  |    5 +-
 ...unicationInverseConnectionEstablishingTest.java |   67 +-
 .../tcp/GridTcpCommunicationSpiConfigSelfTest.java |  158 ++
 .../tcp/GridTcpCommunicationSpiLogTest.java        |    5 +-
 ...municationSpiSkipWaitHandshakeOnClientTest.java |    2 +-
 .../IgniteTcpCommunicationConnectOnInitTest.java   |   32 +-
 .../tcp/TcpCommunicationHandshakeTimeoutTest.java  |  151 ++
 .../tcp/TcpCommunicationSpiDropNodesTest.java      |    2 +-
 ...cpCommunicationSpiHalfOpenedConnectionTest.java |   76 +-
 .../tcp/TcpCommunicationStatisticsTest.java        |    7 +-
 .../local/GridLocalDeploymentSpiSelfTest.java      |   54 +-
 .../discovery/DiscoverySpiDataExchangeTest.java    |  267 +++
 .../FilterDataForClientNodeDiscoveryTest.java      |    4 +-
 .../spi/discovery/tcp/IgniteClientConnectTest.java |    8 +-
 ...cpClientDiscoverySpiFailureTimeoutSelfTest.java |    9 +-
 .../tcp/TcpClientDiscoverySpiSelfTest.java         |   18 +-
 .../tcp/TcpClientDiscoveryUnresolvedHostTest.java  |    2 +-
 .../tcp/TcpDiscoveryCoordinatorFailureTest.java    |   11 +-
 .../tcp/TcpDiscoveryIpFinderFailureTest.java       |  399 ++++
 .../tcp/TcpDiscoveryNodeJoinAndFailureTest.java    |   10 +-
 .../TcpDiscoveryPendingMessageDeliveryTest.java    |    3 +-
 .../tcp/TcpDiscoverySslParametersTest.java         |    7 +-
 .../tcp/TcpDiscoveryWithAddressFilterTest.java     |   86 +
 .../tcp/TcpDiscoveryWithWrongServerTest.java       |   20 +-
 .../spi/discovery/tcp/TestDynamicIpFinder.java     |   55 +
 .../vm/TcpDiscoveryVmIpFinderDnsResolveTest.java   |  631 +++++
 .../GridInternalTasksLoadBalancingSelfTest.java    |    3 +-
 .../ignite/spi/metric/jmx/DummyMBeanServer.java    |    7 +-
 .../startup/servlet/GridServletLoaderTest.java     |    3 +-
 .../ignite/testframework/GridSpiTestContext.java   |   14 +
 .../apache/ignite/testframework/GridTestUtils.java |   40 +-
 .../testframework/junits/GridAbstractTest.java     |   77 +-
 .../testframework/junits/IgniteTestResources.java  |    6 +-
 .../junits/common/GridCommonAbstractTest.java      |  137 +-
 .../testframework/test/VariationsIteratorTest.java |   10 +-
 .../testframework/wal/record/RecordUtils.java      |    3 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java    |   18 +
 .../IgniteBasicWithPersistenceTestSuite.java       |   18 +-
 .../testsuites/IgniteBinaryCacheTestSuite.java     |   12 +-
 .../testsuites/IgniteBinaryObjectsTestSuite.java   |   15 +-
 .../IgniteCacheDataStructuresSelfTestSuite.java    |   13 +-
 .../testsuites/IgniteCacheFailoverTestSuite2.java  |    6 +-
 .../IgniteCacheFullApiSelfTestSuite.java           |    3 +-
 .../testsuites/IgniteCacheMvccTestSuite1.java      |    2 +
 .../testsuites/IgniteCacheMvccTestSuite2.java      |    5 +-
 .../testsuites/IgniteCacheMvccTestSuite5.java      |    4 +
 .../testsuites/IgniteCacheMvccTestSuite6.java      |    6 +-
 .../testsuites/IgniteCacheMvccTestSuite7.java      |    4 +-
 .../testsuites/IgniteCacheRestartTestSuite.java    |    5 +-
 .../testsuites/IgniteCacheRestartTestSuite2.java   |    4 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java    |   25 +-
 .../ignite/testsuites/IgniteCacheTestSuite2.java   |    5 +
 .../ignite/testsuites/IgniteCacheTestSuite3.java   |   15 +-
 .../ignite/testsuites/IgniteCacheTestSuite5.java   |    9 +-
 .../ignite/testsuites/IgniteCacheTestSuite6.java   |   13 +-
 .../ignite/testsuites/IgniteCacheTestSuite9.java   |    7 +
 .../testsuites/IgniteClientReconnectTestSuite.java |    2 +
 .../testsuites/IgniteKernalSelfTestSuite.java      |    4 +-
 .../ignite/testsuites/IgniteP2PSelfTestSuite.java  |    8 +-
 .../ignite/testsuites/IgnitePdsMvccTestSuite.java  |    2 +
 .../ignite/testsuites/IgnitePdsTestSuite.java      |   14 +
 .../ignite/testsuites/IgnitePdsTestSuite2.java     |   11 +-
 .../ignite/testsuites/IgnitePdsTestSuite4.java     |    4 +
 .../testsuites/IgniteRestHandlerTestSuite.java     |    2 +
 .../IgniteSpiCommunicationSelfTestSuite.java       |    2 +
 .../IgniteSpiDiscoverySelfTestSuite.java           |   13 +-
 .../testsuites/IgniteStandByClusterSuite.java      |   12 +-
 .../ignite/testsuites/IgniteUtilSelfTestSuite.java |    7 +-
 .../apache/ignite/util/GridLongListSelfTest.java   |   10 +-
 ...mandHandlerClusterByClassTest_cache_help.output |    4 +-
 ...ridCommandHandlerClusterByClassTest_help.output |   20 +-
 ...dlerClusterByClassWithSSLTest_cache_help.output |    4 +-
 ...andHandlerClusterByClassWithSSLTest_help.output |   20 +-
 modules/dev-utils/ignite-modules-test/build.gradle |    2 +-
 modules/dev-utils/pom.xml                          |    2 +-
 .../ignite/development/utils/DataEntryWrapper.java |  120 +-
 .../development/utils/IgniteWalConverter.java      |  234 +-
 .../utils/IgniteWalConverterArguments.java         |  626 +++++
 .../utils/MetastoreDataRecordWrapper.java          |   13 +-
 .../development/utils/DevUtilsTestSuite.java       |    2 +
 .../utils/IgniteWalConverterArgumentsTest.java     |  570 +++++
 .../utils/IgniteWalConverterSensitiveDataTest.java |   69 +-
 .../development/utils/IgniteWalConverterTest.java  |  606 +++++
 .../apache/ignite/development/utils/Person.java    |   65 +
 .../apache/ignite/development/utils/PersonEx.java  |   79 +
 .../apache/ignite/development/utils/PersonKey.java |   61 +
 modules/direct-io/pom.xml                          |   15 +-
 .../cache/persistence/file/IgniteNativeIoLib.java  |    3 +-
 .../testsuites/IgnitePdsNativeIoTestSuite.java     |    2 +
 modules/extdata/p2p/pom.xml                        |    2 +-
 .../ignite/tests/p2p/AlwaysTruePredicate.java      |    2 +-
 ...dP2PEventRemoteFilterWithStaticInitializer.java |   34 +
 ...MessageRemoteListenerWithStaticInitializer.java |   34 +
 .../GridP2PRemoteFilterWithStaticInitializer.java  |   36 +
 ...2PRemoteFilterWithStaticInitializerFactory.java |   31 +
 ...dP2PRemoteTransformerWithStaticInitializer.java |   34 +
 ...oteTransformerWithStaticInitializerFactory.java |   33 +
 ...ializableRemoteFilterWithStaticInitializer.java |   35 +
 .../GridP2PTestObjectWithStaticInitializer.java    |   36 +
 .../tests/p2p/compute/ExternalEntryProcessor.java  |   44 +
 modules/extdata/platform/pom.xml                   |    2 +-
 modules/extdata/uri/modules/uri-dependency/pom.xml |    2 +-
 modules/extdata/uri/pom.xml                        |    2 +-
 modules/gce/pom.xml                                |   10 +-
 modules/geospatial/pom.xml                         |    4 +-
 .../processors/query/h2/opt/GeoSpatialIndex.java   |   65 +
 .../query/h2/opt/GeoSpatialIndexDefinition.java    |   58 +
 .../query/h2/opt/GeoSpatialIndexFactory.java       |   69 +
 .../query/h2/opt/GeoSpatialIndexImpl.java          |  395 ++++
 .../processors/query/h2/opt/GeoSpatialUtils.java   |   71 +
 .../processors/query/h2/opt/GeometryIndexKey.java  |   49 +
 .../query/h2/opt/GridH2SpatialIndex.java           |  371 +--
 modules/hibernate-4.2/pom.xml                      |    3 +-
 modules/hibernate-5.1/pom.xml                      |    3 +-
 .../cache/hibernate/HibernateEntityRegion.java     |    9 +-
 modules/hibernate-5.3/pom.xml                      |    3 +-
 .../hibernate/IgniteCachedDomainDataAccess.java    |   15 +-
 .../cache/hibernate/IgniteEntityDataAccess.java    |    9 +-
 .../cache/hibernate/IgniteNaturalIdDataAccess.java |    7 +-
 .../HibernateL2CacheConfigurationSelfTest.java     |   10 +-
 .../HibernateL2CacheStrategySelfTest.java          |   10 +-
 modules/hibernate-core/pom.xml                     |   11 +-
 .../cache/hibernate/HibernateCacheProxy.java       |    4 +-
 modules/ignored-tests/pom.xml                      |    2 +-
 modules/indexing/pom.xml                           |   12 +-
 .../cache/query/GridCacheTwoStepQuery.java         |   15 +-
 .../processors/query/h2/CommandProcessor.java      |   22 +-
 .../processors/query/h2/ConnectionManager.java     |   13 +
 .../h2/DurableBackgroundCleanupIndexTreeTask.java  |  195 --
 .../query/h2/H2JavaObjectSerializer.java           |   27 +-
 .../internal/processors/query/h2/H2RowCache.java   |  163 --
 .../processors/query/h2/H2RowCacheRegistry.java    |  132 --
 .../processors/query/h2/H2SqlFieldMetadata.java    |   11 +-
 .../processors/query/h2/H2TableDescriptor.java     |   22 +-
 .../processors/query/h2/H2TableEngine.java         |   11 +-
 .../internal/processors/query/h2/H2Utils.java      |   45 +-
 .../processors/query/h2/IgniteH2Indexing.java      |  460 ++--
 .../query/h2/IndexRebuildFullClosure.java          |   49 -
 .../query/h2/IndexRebuildPartialClosure.java       |   91 -
 .../processors/query/h2/QueryDescriptor.java       |   14 +-
 .../internal/processors/query/h2/QueryParser.java  |    8 +-
 .../processors/query/h2/SchemaManager.java         |   16 +-
 .../query/h2/database/H2PkHashIndex.java           |   53 +-
 .../processors/query/h2/database/H2Tree.java       |  928 --------
 .../query/h2/database/H2TreeClientIndex.java       |   47 +-
 .../query/h2/database/H2TreeFilterClosure.java     |  141 --
 .../processors/query/h2/database/H2TreeIndex.java  |  622 +----
 .../query/h2/database/H2TreeIndexBase.java         |   92 -
 .../query/h2/database/InlineIndexColumn.java       |  101 -
 .../inlinecolumn/AbstractInlineIndexColumn.java    |  246 --
 .../inlinecolumn/BooleanInlineIndexColumn.java     |   68 -
 .../inlinecolumn/ByteInlineIndexColumn.java        |   68 -
 .../inlinecolumn/BytesInlineIndexColumn.java       |  148 --
 .../inlinecolumn/DateInlineIndexColumn.java        |   69 -
 .../inlinecolumn/DoubleInlineIndexColumn.java      |   68 -
 .../inlinecolumn/FixedStringInlineIndexColumn.java |   39 -
 .../inlinecolumn/FloatInlineIndexColumn.java       |   68 -
 .../inlinecolumn/InlineIndexColumnFactory.java     |  238 --
 .../inlinecolumn/IntegerInlineIndexColumn.java     |   68 -
 .../inlinecolumn/LongInlineIndexColumn.java        |   68 -
 .../inlinecolumn/ObjectBytesInlineIndexColumn.java |   40 -
 .../inlinecolumn/ObjectHashInlineIndexColumn.java  |  175 --
 .../inlinecolumn/ShortInlineIndexColumn.java       |   68 -
 .../StringIgnoreCaseInlineIndexColumn.java         |   39 -
 .../inlinecolumn/StringInlineIndexColumn.java      |  311 ---
 .../inlinecolumn/TimeInlineIndexColumn.java        |   69 -
 .../inlinecolumn/TimestampInlineIndexColumn.java   |   83 -
 .../inlinecolumn/UuidInlineIndexColumn.java        |   81 -
 .../h2/database/io/AbstractH2ExtrasInnerIO.java    |  169 --
 .../h2/database/io/AbstractH2ExtrasLeafIO.java     |  166 --
 .../query/h2/database/io/AbstractH2InnerIO.java    |   79 -
 .../query/h2/database/io/AbstractH2LeafIO.java     |   81 -
 .../query/h2/database/io/H2ExtrasInnerIO.java      |   33 -
 .../query/h2/database/io/H2ExtrasLeafIO.java       |   32 -
 .../processors/query/h2/database/io/H2IOUtils.java |   92 -
 .../processors/query/h2/database/io/H2InnerIO.java |   37 -
 .../processors/query/h2/database/io/H2LeafIO.java  |   37 -
 .../query/h2/database/io/H2MvccExtrasInnerIO.java  |   55 -
 .../query/h2/database/io/H2MvccExtrasLeafIO.java   |   54 -
 .../query/h2/database/io/H2MvccInnerIO.java        |   58 -
 .../query/h2/database/io/H2MvccLeafIO.java         |   58 -
 .../query/h2/database/io/H2RowLinkIO.java          |   69 -
 .../defragmentation/IndexingDefragmentation.java   |  482 ----
 .../processors/query/h2/dml/DmlAstUtils.java       |    2 +-
 .../processors/query/h2/index/H2RowComparator.java |  135 ++
 .../query/h2/index/QueryIndexDefinition.java       |  206 ++
 .../h2/index/QueryIndexKeyDefinitionProvider.java  |   80 +
 .../query/h2/index/QueryIndexRowHandler.java       |  172 ++
 .../query/h2/index/QueryRowHandlerFactory.java     |   48 +
 .../h2/index/client/ClientIndexDefinition.java     |   79 +
 .../query/h2/index/client/ClientIndexFactory.java  |   57 +
 .../query/h2/index/client/ClientInlineIndex.java   |  153 ++
 .../query/h2/index/keys/DateIndexKey.java          |   58 +
 .../query/h2/index/keys/H2ValueWrapperMixin.java   |   44 +
 .../query/h2/index/keys/TimeIndexKey.java          |   58 +
 .../query/h2/index/keys/TimestampIndexKey.java     |   63 +
 .../processors/query/h2/opt/GridH2IndexBase.java   |    5 +-
 .../processors/query/h2/opt/GridH2MetaTable.java   |    2 +-
 .../processors/query/h2/opt/GridH2ProxyIndex.java  |    9 +-
 .../processors/query/h2/opt/GridH2Table.java       |  210 +-
 .../processors/query/h2/opt/H2CacheRow.java        |    2 +-
 .../internal/processors/query/h2/opt/H2Row.java    |    3 +-
 .../query/h2/opt/join/CollocationModel.java        |    2 +-
 .../query/h2/opt/join/DistributedJoinContext.java  |    2 +-
 .../query/h2/opt/join/DistributedLookupBatch.java  |    2 +-
 .../processors/query/h2/opt/join/RangeSource.java  |   12 +-
 .../processors/query/h2/sql/GridSqlConst.java      |    5 +
 .../query/h2/sql/GridSqlCreateTable.java           |    4 +-
 .../processors/query/h2/sql/GridSqlDelete.java     |   10 +-
 .../processors/query/h2/sql/GridSqlInsert.java     |   18 +-
 .../processors/query/h2/sql/GridSqlJoin.java       |    8 +-
 .../processors/query/h2/sql/GridSqlMerge.java      |   16 +-
 .../processors/query/h2/sql/GridSqlQuery.java      |    4 +-
 .../query/h2/sql/GridSqlQuerySplitter.java         |   19 +-
 .../processors/query/h2/sql/GridSqlSelect.java     |   16 +-
 .../processors/query/h2/sql/GridSqlUnion.java      |   14 +-
 .../processors/query/h2/sql/GridSqlUpdate.java     |   12 +-
 .../processors/query/h2/sql/SplitterUtils.java     |   29 +
 .../query/h2/twostep/AbstractReducer.java          |    4 +-
 .../query/h2/twostep/GridMapQueryExecutor.java     |   60 +-
 .../query/h2/twostep/GridReduceQueryExecutor.java  |   14 +-
 .../h2/twostep/PartitionReservationManager.java    |   10 +
 .../processors/query/h2/twostep/ReduceIndex.java   |    4 +-
 .../query/h2/twostep/ReducePartitionMapper.java    |   10 +-
 .../query/h2/twostep/SortedReduceIndexAdapter.java |   36 +
 .../query/h2/twostep/UnsortedBaseReducer.java      |  108 +
 .../query/h2/twostep/UnsortedOneWayReducer.java    |  118 +
 .../query/h2/twostep/UnsortedReducer.java          |   81 +-
 .../query/h2/twostep/msg/GridH2QueryRequest.java   |   11 +-
 .../visor/verify/ValidateIndexesClosure.java       |  263 ++-
 .../visor/verify/ValidateIndexesContext.java       |   30 +
 .../visor/verify/VisorValidateIndexesTask.java     |   18 +
 .../org/apache/ignite/client/ClientTestSuite.java  |    2 +
 .../apache/ignite/client/FunctionalQueryTest.java  |    3 +-
 ...finityKeyNameAndValueFieldNameConflictTest.java |    3 +-
 .../cache/BinaryTypeMismatchLoggingTest.java       |    5 +-
 .../CacheGroupMetricsWithIndexBuildFailTest.java   |   22 +-
 .../cache/CacheGroupMetricsWithIndexTest.java      |  204 +-
 .../cache/CacheRegisterMetadataLocallyTest.java    |    4 +-
 ...eckIndexesInlineSizeOnNodeJoinMultiJvmTest.java |   13 +-
 .../cache/GridCacheCrossCacheQuerySelfTest.java    |    4 +-
 .../cache/GridCacheDynamicLoadOnClientTest.java    |    4 +-
 .../processors/cache/GridCacheOffHeapSelfTest.java |    2 +-
 .../cache/GridCacheQuerySimpleBenchmark.java       |    7 +-
 .../cache/GridIndexingWithNoopSwapSelfTest.java    |    2 +-
 .../IgniteCacheAbstractFieldsQuerySelfTest.java    |   17 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java    |    9 +-
 .../cache/IgniteCacheCollocatedQuerySelfTest.java  |    8 +-
 ...teCacheConfigurationPrimitiveTypesSelfTest.java |    3 +-
 .../cache/IgniteCacheDistributedJoinTest.java      |   12 +-
 .../IgniteCacheFieldsQueryNoDataSelfTest.java      |    2 +-
 ...gniteCacheJoinPartitionedAndReplicatedTest.java |   64 +-
 .../cache/IgniteCacheLargeResultSelfTest.java      |    2 +-
 .../cache/IgniteCacheOffheapEvictQueryTest.java    |    4 +-
 .../cache/IgniteCacheOffheapIndexScanTest.java     |    2 +-
 .../IgniteCacheParallelismQuerySortOrderTest.java  |  257 ++
 .../cache/IgniteCacheQueryLoadSelfTest.java        |    2 +-
 .../IgniteCacheQueryMultiThreadedSelfTest.java     |    2 +-
 .../IgniteCacheSqlInsertValidationSelfTest.java    |   47 +-
 .../IgniteCacheSqlQueryMultiThreadedSelfTest.java  |    2 +-
 .../cache/IgniteDynamicSqlRestoreTest.java         |    3 +-
 .../QueryJoinWithDifferentNodeFiltersTest.java     |    4 +-
 .../authentication/SqlUserCommandSelfTest.java     |   55 +-
 ...heClientQueryReplicatedNodeRestartSelfTest.java |    8 +-
 .../near/IgniteCacheQueryNodeRestartSelfTest.java  |    2 +-
 .../near/IgniteCacheQueryNodeRestartSelfTest2.java |    2 +-
 .../encryption/EncryptedSqlTemplateTableTest.java  |   79 +
 .../cache/index/AbstractIndexingCommonTest.java    |   11 +-
 .../processors/cache/index/BasicIndexTest.java     |   60 +-
 .../index/ComplexSecondaryKeyUnwrapSelfTest.java   |    2 +
 .../DynamicEnableIndexingConcurrentSelfTest.java   |   21 +-
 .../index/DynamicIndexAbstractBasicSelfTest.java   |    2 +-
 .../cache/index/ForceRebuildIndexTest.java         |  317 +++
 .../cache/index/H2ConnectionLeaksSelfTest.java     |    2 +-
 .../cache/index/H2DynamicTableSelfTest.java        |    2 +-
 .../cache/index/H2RowCachePageEvictionTest.java    |   14 +-
 .../processors/cache/index/H2RowCacheSelfTest.java |   26 +-
 .../cache/index/H2RowExpireTimeIndexSelfTest.java  |    6 +-
 .../index/H2TreeCorruptedTreeExceptionTest.java    |    5 +-
 .../cache/index/IgniteDecimalSelfTest.java         |    2 +-
 .../processors/cache/index/IndexMetricsTest.java   |   16 +-
 .../cache/index/IndexesRebuildTaskEx.java          |  207 ++
 .../cache/index/QueryEntityValidationSelfTest.java |    6 +-
 .../cache/index/SqlTransactionsSelfTest.java       |    2 +
 .../cache/index/StopRebuildIndexTest.java          |  311 +++
 ...niteCacheLocalQueryCancelOrTimeoutSelfTest.java |   77 +-
 ...acheMvccAbstractSqlCoordinatorFailoverTest.java |   10 +-
 .../cache/mvcc/CacheMvccBackupsAbstractTest.java   |    6 +-
 .../mvcc/CacheMvccBasicContinuousQueryTest.java    |    9 +-
 ...eMvccPartitionedSqlCoordinatorFailoverTest.java |   10 +-
 .../CacheMvccSqlConfigurationValidationTest.java   |    7 +-
 .../mvcc/CacheMvccSqlQueriesAbstractTest.java      |    8 +-
 .../cache/mvcc/CacheMvccSqlTxModesTest.java        |    2 +-
 .../mvcc/CacheMvccSqlTxQueriesAbstractTest.java    |    9 +-
 ...cheMvccSqlTxQueriesWithReducerAbstractTest.java |   38 +-
 .../cache/mvcc/MvccRepeatableReadBulkOpsTest.java  |    2 +-
 .../IgnitePdsIndexingDefragmentationTest.java      |   34 +-
 ...xingMultithreadedLoadContinuousRestartTest.java |    4 +-
 .../db/LongDestroyDurableBackgroundTaskTest.java   |  250 +-
 .../MultipleParallelCacheDeleteDeadlockTest.java   |  157 +-
 .../persistence/db/wal/IgniteWalRecoveryTest.java  |    3 +-
 .../IgniteClusterSnapshotCheckWithIndexesTest.java |  127 +
 ...niteClusterSnapshotRestoreWithIndexingTest.java |  211 ++
 .../IgniteClusterSnapshotWithIndexesTest.java      |    3 +-
 .../IgniteDbSingleNodeWithIndexingPutGetTest.java  |   14 +-
 .../processors/database/RebuildIndexTest.java      |    2 +-
 .../RebuildIndexWithHistoricalRebalanceTest.java   |    7 +-
 ...ngingBaselineCacheQueryNodeRestartSelfTest.java |    5 +-
 ...ableBaselineCacheQueryNodeRestartsSelfTest.java |    5 +-
 .../PerformanceStatisticsQueryTest.java            |    4 +-
 .../CleanupIndexTreeCheckpointFailoverTest.java    |  127 +
 .../query/IgniteCacheGroupsCompareQueryTest.java   |    2 +-
 .../query/IgniteSqlKeyValueFieldsTest.java         |    3 +-
 .../query/IgniteSqlParameterizedQueryTest.java     |    2 +-
 .../processors/query/IgniteSqlRoutingTest.java     |    2 +-
 .../query/IgniteSqlSplitterSelfTest.java           |   35 +-
 .../query/KillQueryOnClientDisconnectTest.java     |   11 +-
 .../processors/query/LocalQueryLazyTest.java       |    4 +-
 .../query/MemLeakOnSqlWithClientReconnectTest.java |    2 +-
 .../processors/query/ReducerRowsBufferTest.java    |  114 +
 .../query/RemoveConstantsFromQueryTest.java        |  235 ++
 .../processors/query/RunningQueriesTest.java       |    2 +-
 .../query/SqlFieldTypeValidationTypesTest.java     |   12 +-
 .../processors/query/SqlSystemViewsSelfTest.java   |   53 +-
 .../query/WrongQueryEntityFieldTypeTest.java       |    3 +
 .../query/h2/GridIndexRebuildSelfTest.java         |   31 +-
 .../h2/GridSubqueryJoinOptimizerSelfTest.java      |   54 +
 .../H2ResultSetIteratorNullifyOnEndSelfTest.java   |    5 +-
 .../query/h2/IgniteSqlQueryMinMaxTest.java         |   70 +-
 .../processors/query/h2/QueryDataPageScanTest.java |   38 +-
 .../inlinecolumn/InlineIndexColumnTest.java        |  258 +-
 .../query/h2/sql/AbstractH2CompareQueryTest.java   |    6 +-
 .../query/h2/sql/BaseH2CompareQueryTest.java       |   17 +-
 .../query/h2/sql/GridQueryParsingTest.java         |    4 +-
 .../query/h2/sql/H2CompareBigQueryTest.java        |   16 +-
 .../DisappearedCacheCauseRetryMessageSelfTest.java |    5 +-
 ...neOrSinglePartitionsQueryOptimizationsTest.java |    4 +-
 .../h2/twostep/RetryCauseMessageSelfTest.java      |    9 +-
 .../h2/twostep/TableViewSubquerySelfTest.java      |    2 +-
 .../ReplicatedSqlCustomPartitionsTest.java         |   76 +
 .../apache/ignite/sqltests/ReplicatedSqlTest.java  |   43 +-
 .../IgniteBinaryCacheQueryTestSuite.java           |   22 +-
 .../IgniteBinaryCacheQueryTestSuite2.java          |    3 +
 .../testsuites/IgniteCacheMvccSqlTestSuite.java    |    3 +-
 .../testsuites/IgniteCacheQuerySelfTestSuite6.java |    5 +-
 ...teCacheWithIndexingAndPersistenceTestSuite.java |    4 +-
 .../IgnitePdsWithIndexingCoreTestSuite.java        |    2 +
 .../testsuites/IgnitePdsWithIndexingTestSuite.java |   10 +-
 modules/jcl/pom.xml                                |   12 +-
 modules/jta/pom.xml                                |   12 +-
 modules/kubernetes/DEVNOTES.md                     |   69 +
 modules/kubernetes/DEVNOTES.txt                    |   69 -
 modules/kubernetes/{README.txt => README.md}       |    0
 modules/kubernetes/config/Dockerfile               |   18 +-
 .../config/example-kube-persistence-and-wal.xml    |    9 +-
 .../kubernetes/config/example-kube-persistence.xml |    9 +-
 modules/kubernetes/config/example-kube-rbac.xml    |   10 +-
 modules/kubernetes/config/example-kube.xml         |    5 +-
 modules/kubernetes/pom.xml                         |   14 +-
 .../ignite/client/TestClusterClientConnection.java |  157 --
 .../discovery/KubernetesDiscoveryAbstractTest.java |  151 ++
 .../discovery/TestClusterClientConnection.java     |   52 +
 .../TestKubernetesIpFinderDisconnection.java       |  123 +
 .../testsuites/IgniteKubernetesTestSuite.java      |    4 +-
 modules/log4j/pom.xml                              |   13 +-
 modules/log4j2/pom.xml                             |   12 +-
 modules/mesos/pom.xml                              |   12 +-
 modules/ml/catboost-model-parser/pom.xml           |   11 +-
 modules/ml/h2o-model-parser/pom.xml                |   11 +-
 modules/ml/pom.xml                                 |   11 +-
 modules/ml/spark-model-parser/pom.xml              |   12 +-
 .../ml/sparkmodelparser/SparkModelParser.java      |    5 +-
 .../ml/sparkmodelparser/SparkModelParserTest.java  |    5 +-
 .../ignite/ml/clustering/kmeans/KMeansModel.java   |    6 +-
 .../ignite/ml/composition/ModelsComposition.java   |    4 +-
 .../ml/composition/bagging/BaggedTrainer.java      |    4 +-
 .../apache/ignite/ml/dataset/DatasetBuilder.java   |    2 +-
 .../bootstrapping/BootstrappedDatasetBuilder.java  |    2 +-
 .../ml/dataset/impl/cache/CacheBasedDataset.java   |    3 +-
 .../impl/cache/CacheBasedDatasetBuilder.java       |   14 +-
 .../ml/dataset/impl/local/LocalDatasetBuilder.java |    5 +-
 .../ignite/ml/environment/logging/MLLogger.java    |    2 +-
 .../ignite/ml/knn/ann/ANNClassificationModel.java  |    6 +-
 .../ml/knn/ann/ANNClassificationTrainer.java       |    9 +-
 .../preprocessing/IllegalFeatureTypeException.java |    3 +-
 .../preprocessing/IllegalLabelTypeException.java   |    3 +-
 .../ignite/ml/multiclass/MultiClassModel.java      |    3 +-
 .../ignite/ml/multiclass/OneVsRestTrainer.java     |    3 +-
 .../compound/CompoundNaiveBayesTrainer.java        |   12 +-
 .../apache/ignite/ml/nn/MultilayerPerceptron.java  |    3 +-
 .../updatecalculators/SimpleGDParameterUpdate.java |    3 +-
 .../ml/preprocessing/PreprocessingTrainer.java     |    2 +-
 .../ml/preprocessing/encoding/EncoderTrainer.java  |    4 +-
 .../onehotencoder/OneHotEncoderPreprocessor.java   |    6 +-
 .../stringencoder/StringEncoderPreprocessor.java   |    3 +-
 .../preprocessing/imputing/ImputingStrategy.java   |    5 +-
 .../normalization/NormalizationPreprocessor.java   |    2 +-
 .../linear/LinearRegressionLSQRTrainer.java        |    3 +-
 .../linear/LinearRegressionSGDTrainer.java         |    3 +-
 .../logistic/LogisticRegressionSGDTrainer.java     |    3 +-
 .../ml/selection/cv/AbstractCrossValidation.java   |    3 +-
 ...assificationPointwiseMetricStatsAggregator.java |    3 +-
 .../ClassificationMetricsAggregator.java           |    3 +-
 .../RegressionMetricStatsAggregator.java           |    3 +-
 .../BinaryClassificationEvaluationContext.java     |    3 +-
 .../classification/BinaryClassificationMetric.java |    3 +-
 .../selection/split/TrainTestDatasetSplitter.java  |    2 +-
 .../split/mapper/SHA256UniformMapper.java          |    2 +-
 .../ml/svm/SVMLinearClassificationTrainer.java     |    3 +-
 .../ml/trainers/AdaptableDatasetTrainer.java       |   15 +-
 .../apache/ignite/ml/trainers/DatasetTrainer.java  |    9 +-
 .../java/org/apache/ignite/ml/tree/NodeData.java   |    8 +-
 .../ignite/ml/util/genetic/GeneticAlgorithm.java   |    3 +-
 .../test/java/org/apache/ignite/ml/TestUtils.java  |    6 +-
 .../ignite/ml/clustering/KMeansTrainerTest.java    |    3 +-
 .../apache/ignite/ml/common/LocalModelsTest.java   |    9 +-
 .../ml/composition/CompositionTestSuite.java       |    6 +-
 .../ml/composition/boosting/GDBTrainerTest.java    |    3 +-
 .../apache/ignite/ml/dataset/DatasetTestSuite.java |    6 +-
 .../impl/local/LocalDatasetBuilderTest.java        |    2 +-
 .../primitive/SimpleLabeledDatasetTest.java        |    3 +-
 .../LearningEnvironmentBuilderTest.java            |   16 +-
 .../ml/environment/LearningEnvironmentTest.java    |   11 +-
 .../ml/environment/deploy/MLDeployingTest.java     |    4 +-
 .../java/org/apache/ignite/ml/math/BlasTest.java   |    4 +-
 .../ignite/ml/math/MathImplLocalTestSuite.java     |    5 +
 .../ml/math/distances/DistancesTestSuite.java      |   35 +
 .../ignite/ml/math/isolve/lsqr/LSQROnHeapTest.java |    9 +-
 .../primitives/matrix/MatrixStorageFixtures.java   |    3 +-
 .../matrix/MatrixStorageImplementationTest.java    |    9 +-
 .../math/primitives/vector/AbstractVectorTest.java |   25 +-
 .../vector/VectorImplementationsFixtures.java      |    2 +-
 .../ml/math/primitives/vector/VectorNormTest.java  |    3 +-
 .../ignite/ml/multiclass/OneVsRestTrainerTest.java |    3 +-
 .../ignite/ml/naivebayes/NaiveBayesTestSuite.java  |   48 +
 .../discrete/DiscreteNaiveBayesModelTest.java      |    2 +-
 .../discrete/DiscreteNaiveBayesTrainerTest.java    |    2 +-
 .../gaussian/GaussianNaiveBayesTrainerTest.java    |    3 +-
 .../test/java/org/apache/ignite/ml/nn/MLPTest.java |    6 +-
 .../org/apache/ignite/ml/nn/MLPTrainerTest.java    |   12 +-
 .../ignite/ml/nn/performance/MnistMLPTestUtil.java |    7 +-
 .../ml/preprocessing/PreprocessingTestSuite.java   |   13 +-
 .../preprocessing/encoding/EncoderTrainerTest.java |   48 +-
 .../preprocessing/imputing/ImputerTrainerTest.java |   30 +-
 .../linear/LinearRegressionLSQRTrainerTest.java    |    3 +-
 .../logistic/LogisticRegressionSGDTrainerTest.java |    3 +-
 .../ignite/ml/selection/SelectionTestSuite.java    |    8 +-
 .../ml/selection/cv/CrossValidationTest.java       |   84 +-
 .../cursor/CacheBasedLabelPairCursorTest.java      |    3 +-
 .../scoring/cursor/LocalLabelPairCursorTest.java   |    3 +-
 .../apache/ignite/ml/svm/SVMBinaryTrainerTest.java |    3 +-
 .../ignite/ml/tree/DecisionTreeTestSuite.java      |    4 +-
 .../gini/GiniImpurityMeasureCalculatorTest.java    |   26 +-
 .../mse/MSEImpurityMeasureCalculatorTest.java      |   18 +-
 .../RandomForestClassifierTrainerTest.java         |    3 +-
 .../RandomForestRegressionTrainerTest.java         |    3 +-
 .../randomforest/RandomForestTreeTestSuite.java    |    4 +-
 .../data/impurity/GiniFeatureHistogramTest.java    |    4 +-
 .../data/impurity/ImpurityHistogramTest.java       |    4 +-
 .../ml/util/genetic/GeneticAlgorithmTest.java      |    3 +-
 modules/ml/xgboost-model-parser/pom.xml            |   11 +-
 modules/opencensus/pom.xml                         |   11 +-
 .../monitoring/opencensus/AbstractTracingTest.java |   57 +-
 .../opencensus/OpenCensusSqlJdbcTracingTest.java   |   62 +-
 .../opencensus/OpenCensusSqlNativeTracingTest.java |  200 +-
 .../opencensus/OpenCensusTracingSpiTest.java       |   12 +-
 modules/osgi-karaf/pom.xml                         |   11 +-
 modules/osgi-paxlogging/pom.xml                    |   12 +-
 modules/osgi/pom.xml                               |   11 +-
 modules/platforms/cpp/CMakeLists.txt               |    6 +-
 .../include/ignite/binary/binary_raw_reader.h      |    2 +-
 .../include/ignite/binary/binary_raw_writer.h      |    2 +-
 .../binary/include/ignite/binary/binary_reader.h   |    2 +-
 .../binary/include/ignite/binary/binary_writer.h   |    2 +-
 .../ignite/impl/binary/binary_reader_impl.h        |  161 +-
 .../ignite/impl/interop/interop_input_stream.h     |   27 +-
 .../include/ignite/impl/interop/interop_memory.h   |   18 +-
 .../binary/src/impl/binary/binary_reader_impl.cpp  |  284 ++-
 .../cpp/binary/src/impl/interop/interop_memory.cpp |   28 +-
 modules/platforms/cpp/core-test/CMakeLists.txt     |    3 +-
 .../cpp/core-test/config/affinity-test-32.xml      |   52 +
 .../cpp/core-test/config/affinity-test-default.xml |   79 +
 .../cpp/core-test/config/affinity-test.xml         |   34 +
 .../cpp/core-test/config/cache-test-default.xml    |    4 -
 .../cpp/core-test/include/ignite/test_utils.h      |   30 +
 .../cpp/core-test/project/vs/core-test.vcxproj     |    1 +
 .../core-test/project/vs/core-test.vcxproj.filters |    3 +
 .../platforms/cpp/core-test/src/affinity_test.cpp  |  123 +-
 .../platforms/cpp/core-test/src/compute_test.cpp   |  363 +--
 modules/platforms/cpp/core-test/src/test_utils.cpp |   36 +-
 modules/platforms/cpp/core/CMakeLists.txt          |    3 +-
 .../cpp/core/include/ignite/cache/cache.h          |    4 +-
 .../core/include/ignite/cache/query/query_cursor.h |    4 +-
 .../ignite/cache/query/query_fields_cursor.h       |    4 +-
 .../include/ignite/cache/query/query_fields_row.h  |    4 +-
 modules/platforms/cpp/core/include/ignite/ignite.h |    4 +-
 .../core/include/ignite/transactions/transaction.h |    4 +-
 .../include/ignite/transactions/transactions.h     |    4 +-
 .../cluster-compute-example/CMakeLists.txt         |    3 +-
 .../cpp/examples/compute-example/CMakeLists.txt    |    3 +-
 .../continuous-query-example/CMakeLists.txt        |    3 +-
 .../cpp/examples/include/ignite/examples/person.h  |    2 +-
 .../cpp/examples/odbc-example/CMakeLists.txt       |    3 +-
 .../cpp/examples/put-get-example/CMakeLists.txt    |    3 +-
 .../cpp/examples/query-example/CMakeLists.txt      |    3 +-
 .../examples/query-example/src/query_example.cpp   |    4 +-
 .../thin-client-put-get-example/CMakeLists.txt     |    3 +-
 modules/platforms/cpp/ignite/CMakeLists.txt        |    2 +-
 modules/platforms/cpp/jni/CMakeLists.txt           |    3 +-
 modules/platforms/cpp/odbc-test/CMakeLists.txt     |    3 +-
 .../cpp/odbc-test/src/attributes_test.cpp          |   24 +
 .../cpp/odbc-test/src/meta_queries_test.cpp        |   44 +-
 modules/platforms/cpp/odbc-test/src/test_utils.cpp |   34 +-
 modules/platforms/cpp/odbc/CMakeLists.txt          |    3 +-
 .../odbc/include/ignite/odbc/meta/column_meta.h    |   41 +-
 .../odbc/include/ignite/odbc/protocol_version.h    |    3 +
 .../cpp/odbc/install/ignite-odbc-amd64.wxs         |    2 +-
 .../platforms/cpp/odbc/install/ignite-odbc-x86.wxs |    2 +-
 .../platforms/cpp/odbc/src/meta/column_meta.cpp    |   28 +-
 .../platforms/cpp/odbc/src/protocol_version.cpp    |    6 +-
 .../platforms/cpp/thin-client-test/CMakeLists.txt  |    4 +-
 .../cpp/thin-client-test/config/log/log4j-0.xml    |   42 +
 .../config/sql-query-fields-32.xml                 |   52 +
 .../config/sql-query-fields-default.xml            |  125 +
 .../thin-client-test/config/sql-query-fields.xml   |   35 +
 .../cpp/thin-client-test/config/with-logging-0.xml |   36 +
 .../thin-client-test/config/with-logging-base.xml  |   70 +
 .../thin-client-test/include/ignite/test_type.h    |  183 ++
 .../cpp/thin-client-test/include/test_utils.h      |    8 +
 .../project/vs/thin-client-test.vcxproj            |    5 +
 .../project/vs/thin-client-test.vcxproj.filters    |   15 +
 .../thin-client-test/src/ignite_client_test.cpp    |   68 +-
 .../thin-client-test/src/sql_fields_query_test.cpp |  467 ++++
 .../cpp/thin-client-test/src/test_utils.cpp        |   51 +-
 .../platforms/cpp/thin-client-test/src/tx_test.cpp |   85 +-
 modules/platforms/cpp/thin-client/CMakeLists.txt   |    5 +-
 .../ignite/impl/thin/cache/cache_client_proxy.h    |   12 +
 .../thin/cache/query/query_fields_cursor_impl.h    |  147 ++
 .../impl/thin/cache/query/query_fields_row_impl.h  |  197 ++
 .../include/ignite/impl/thin/copyable.h            |  106 +
 .../include/ignite/impl/thin/copyable_writable.h   |  175 ++
 .../include/ignite/thin/cache/cache_client.h       |   30 +-
 .../ignite/thin/cache/query/query_fields_cursor.h  |   94 +
 .../ignite/thin/cache/query/query_fields_row.h     |  104 +
 .../ignite/thin/cache/query/query_sql_fields.h     |  465 ++++
 .../include/ignite/thin/ignite_client.h            |    6 +-
 .../ignite/thin/ignite_client_configuration.h      |   37 +-
 .../include/ignite/thin/transactions/transaction.h |    6 +-
 .../ignite/thin/transactions/transactions.h        |    6 +-
 .../cpp/thin-client/project/vs/thin-client.vcxproj |   13 +
 .../project/vs/thin-client.vcxproj.filters         |   60 +
 .../src/cache/query/query_fields_cursor.cpp        |   69 +
 .../src/cache/query/query_fields_row.cpp           |   59 +
 .../src/impl/cache/cache_client_impl.cpp           |  168 +-
 .../thin-client/src/impl/cache/cache_client_impl.h |   51 +-
 .../src/impl/cache/cache_client_proxy.cpp          |    8 +
 .../thin-client/src/impl/cache/query/cursor_page.h |  127 +
 .../impl/cache/query/query_fields_cursor_impl.h    |  229 ++
 .../src/impl/cache/query/query_fields_row_impl.h   |  129 +
 .../cpp/thin-client/src/impl/data_router.cpp       |   10 +
 .../cpp/thin-client/src/impl/data_router.h         |   25 +-
 .../platforms/cpp/thin-client/src/impl/message.cpp |   69 +
 .../platforms/cpp/thin-client/src/impl/message.h   |  221 +-
 .../src/impl/transactions/transaction_impl.cpp     |  151 ++
 .../src/impl/transactions/transaction_impl.h       |   50 +-
 .../src/impl/transactions/transactions_impl.cpp    |  135 +-
 .../src/impl/transactions/transactions_impl.h      |   48 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.AspNet.nuspec                    |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.BenchmarkDotNet.csproj           |    4 +
 .../Apache.Ignite.BenchmarkDotNet.snk              |  Bin 0 -> 596 bytes
 .../Binary/BinarySystemTypeReadBenchmark.cs        |  124 +
 .../DataStreamer/DataStreamerBenchmark.cs          |  106 +
 .../Apache.Ignite.BenchmarkDotNet/Program.cs       |    4 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.Core.Tests.TestDll2/Account.cs   |   57 +
 .../Apache.Ignite.Core.Tests.TestDll2/Address.cs   |   57 +
 .../Apache.Ignite.Core.Tests.TestDll2.csproj       |   58 +
 .../Apache.Ignite.Core.Tests.TestDll2.snk          |  Bin 0 -> 596 bytes
 .../Properties/AssemblyInfo.cs                     |   41 +
 .../Apache.Ignite.Core.Tests.DotNetCore.csproj     |   13 +-
 .../Apache.Ignite.Core.Tests.csproj                |   32 +-
 .../Binary/BinaryDateTimeTest.cs                   |  213 +-
 .../Binary/BinaryDynamicRegistrationTest.cs        |   57 +-
 .../Binary/BinaryNameMapperTest.cs                 |  140 ++
 .../Binary/BinarySelfTest.cs                       |   69 +-
 .../Binary/JavaBinaryInteropTest.cs                |  283 ++-
 .../Binary/TypeResolverTest.cs                     |    2 +-
 .../Cache/Affinity/AffinityTest.cs                 |   40 +
 .../Cache/CacheAbstractTest.cs                     |    2 +-
 .../Cache/CacheLocalAtomicTest.cs                  |    3 +
 .../Cache/CacheLocalTest.cs                        |    3 +
 .../Cache/CacheTestAsyncAwait.cs                   |  115 +
 .../Cache/PartitionPreloadTest.cs                  |    2 +-
 .../Cache/PersistenceTest.cs                       |    1 +
 .../Cache/Platform/PlatformCacheTest.cs            |    2 +-
 .../Platform/PlatformCacheTopologyChangeTest.cs    |    1 +
 .../Cache/Query/CacheDmlQueriesTestSimpleName.cs   |    1 +
 .../Query/CacheQueriesCodeConfigurationTest.cs     |  130 +-
 .../Cache/Query/CacheQueriesTestSimpleName.cs      |    1 +
 .../Cache/Query/Continuous/ContinuousQueryTest.cs  |    1 +
 .../Cache/Query/Linq/CacheLinqTest.Base.cs         |   31 +
 .../Cache/Query/Linq/CacheLinqTest.Functions.cs    |   98 -
 .../Cache/Query/Linq/CacheLinqTest.GroupBy.cs      |  294 +++
 .../Cache/Query/Linq/CacheLinqTest.Misc.cs         |  151 ++
 .../Cache/Query/Linq/CacheLinqTest.Strings.cs      |   71 +
 .../Cache/Query/Linq/CacheLinqTestSimpleName.cs    |    1 +
 .../Cache/Query/Linq/CacheLinqTestSqlEscapeAll.cs  |    1 +
 .../Binary/BinaryConfigurationRetrievalTest.cs     |  341 +++
 .../Client/Cache/CacheTestAsync.cs                 |    1 +
 .../Client/Cache/CacheTestAsyncAwait.cs            |    2 +-
 .../Client/Cache/CacheTestNoMeta.cs                |    3 +-
 .../Client/Cache/CacheTestSsl.cs                   |    1 +
 .../Client/Cache/ContinuousQueryTest.cs            |    2 +
 .../Client/ClientFeaturesTest.cs                   |   15 +-
 .../Client/Cluster/ClientClusterDiscoveryTests.cs  |    1 +
 .../ClientClusterDiscoveryTestsBaselineTopology.cs |    1 +
 .../ClientClusterDiscoveryTestsNoLocalhost.cs      |    1 +
 .../Cluster/ClientClusterDiscoveryTestsSsl.cs      |    1 +
 .../ClientReconnectCompatibilityTest.cs            |    2 -
 .../Client/Compute/ComputeClientTests.cs           |    1 +
 .../Compute/CancellationTest.cs                    |    2 +-
 .../Compute/ComputeApiTest.JavaTask.cs             |    3 +
 .../Compute/ComputeApiTest.cs                      |   14 +-
 .../Compute/ComputeApiTestFullFooter.cs            |    1 +
 .../Compute/ComputeApiTypeAutoRegisterTest.cs      |   98 +
 .../Compute/ComputeTestAsyncAwait.cs               |   50 +
 .../Config/binary-custom-name-mapper.xml           |   56 +
 .../Config/binary-custom-name-mapper2.xml          |   56 +
 .../Config/full-config.xml                         |    2 +-
 .../Config/spring-test.xml                         |    4 +
 .../Dataload/DataStreamerTest.cs                   |  314 ++-
 .../Dataload/DataStreamerTestTopologyChange.cs     |   39 +-
 .../Deployment/GetAddressFunc.cs                   |    6 +-
 .../Deployment/PeerAssemblyLoadingAllApisTest.cs   |    4 +-
 .../Deployment/PeerAssemblyLoadingTest.cs          |    4 +-
 .../Apache.Ignite.Core.Tests/Examples/Example.cs   |  158 +-
 .../Examples/ExamplePaths.cs                       |   74 +
 .../Examples/ExamplesTest.cs                       |  264 ---
 .../Examples/ExamplesTestBase.cs                   |  172 ++
 .../Examples/ExpectedOutput/AtomicLong.txt         |   24 +
 .../ExpectedOutput/AtomicLong_ExternalNode.txt     |   44 +
 .../Examples/ExpectedOutput/AtomicReference.txt    |    1 +
 .../Examples/ExpectedOutput/AtomicSequence.txt     |   23 +
 .../ExpectedOutput/AtomicSequence_ExternalNode.txt |   44 +
 .../Examples/ExpectedOutput/BinaryMode.txt         |   21 +
 .../Examples/ExpectedOutput/BinaryModeThin.txt     |   18 +
 .../Examples/ExpectedOutput/ClientReconnect.txt    |   19 +
 .../Examples/ExpectedOutput/DataStreamer.txt       |   51 +
 .../Examples/ExpectedOutput/Ddl.txt                |    9 +
 .../Examples/ExpectedOutput/DdlThin.txt            |   13 +
 .../Examples/ExpectedOutput/Dml.txt                |   17 +
 .../Examples/ExpectedOutput/DmlThin.txt            |   17 +
 .../Examples/ExpectedOutput/EntryProcessor.txt     |   45 +
 .../Examples/ExpectedOutput/Events.txt             |   10 +
 .../ExpectedOutput/Events_ExternalNode.txt         |   10 +
 .../Examples/ExpectedOutput/Func.txt               |   15 +
 .../Examples/ExpectedOutput/Lifecycle.txt          |   17 +
 .../Examples/ExpectedOutput/Linq.txt               |   32 +
 .../Examples/ExpectedOutput/LinqThin.txt           |   32 +
 .../Examples/ExpectedOutput/Messaging.txt          |   28 +
 .../Examples/ExpectedOutput/MultiTieredCache.txt   |   34 +
 .../ExpectedOutput/OptimisticTransaction.txt       |    7 +
 .../ExpectedOutput/OptimisticTransactionThin.txt   |    7 +
 .../ExpectedOutput/PeerAssemblyLoading.txt         |    4 +
 .../Examples/ExpectedOutput/PutGet.txt             |   13 +
 .../Examples/ExpectedOutput/PutGetThin.txt         |   13 +
 .../Examples/ExpectedOutput/QueryContinuous.txt    |    6 +
 .../ExpectedOutput/QueryContinuousThin.txt         |    6 +
 .../Examples/ExpectedOutput/QueryFullText.txt      |    5 +
 .../Examples/ExpectedOutput/QueryScan.txt          |    5 +
 .../Examples/ExpectedOutput/QueryScanThin.txt      |    5 +
 .../Examples/ExpectedOutput/Services.txt           |    7 +
 .../Examples/ExpectedOutput/ServicesThin.txt       |    3 +
 .../Examples/ExpectedOutput/Sql.txt                |   15 +
 .../Examples/ExpectedOutput/SqlThin.txt            |   15 +
 .../Examples/ExpectedOutput/Store.txt              |   21 +
 .../Examples/ExpectedOutput/Task.txt               |   15 +
 .../Examples/ExpectedOutput/Task_ExternalNode.txt  |   16 +
 .../Examples/ExpectedOutput/Transaction.txt        |   26 +
 .../TransactionDeadlockDetection.txt               |   17 +
 .../Examples/ExpectedOutput/TransactionThin.txt    |   26 +
 .../Apache.Ignite.Core.Tests/Examples/PathUtil.cs  |   56 -
 .../Examples/ProjectFilesTest.cs                   |  154 +-
 .../Examples/ThickClientExamplesTest.cs            |   63 +
 .../Examples/ThickExamplesExternalNodeTest.cs      |   63 +
 .../Examples/ThickExamplesTest.cs                  |   47 +
 .../Examples/ThinExamplesTest.cs                   |  102 +
 .../Examples/ThinExamplesTwoServersTest.cs         |   37 +
 .../IgniteConfigurationSerializerTest.cs           |    5 +-
 .../IgniteConfigurationTest.cs                     |    5 +
 .../Apache.Ignite.Core.Tests/IgniteLockTests.cs    |    1 +
 .../dotnet/Apache.Ignite.Core.Tests/JavaServer.cs  |    4 +-
 .../Apache.Ignite.Core.Tests/LifecycleTest.cs      |    4 +-
 .../Log/CustomLoggerTest.cs                        |  100 +-
 .../Apache.Ignite.Core.Tests/MessagingTest.cs      |  128 +-
 .../Apache.Ignite.Core.Tests/ProjectFilesTest.cs   |   74 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Services/IJavaService.cs                       |   23 +-
 .../Services/JavaServiceDynamicProxy.cs            |   44 +-
 .../Apache.Ignite.Core.Tests/Services/Model.cs     |  106 +-
 .../Services/PlatformTestService.cs                |  620 +++++
 .../Services/ServiceProxyTest.cs                   |    6 +-
 .../Services/ServiceTypeAutoResolveTest.cs         |  193 --
 .../Services/ServicesTest.cs                       |  480 +++-
 .../Services/ServicesTestAsync.cs                  |    5 +-
 .../Services/ServicesTestFullFooter.cs             |    4 +
 .../Services/ServicesTypeAutoResolveTest.cs        |  296 +++
 .../Apache.Ignite.Core.Tests/TestUtilsJni.cs       |   21 +
 .../Apache.Ignite.Core.Schema.nuspec               |    2 +-
 .../Apache.Ignite.Core/Apache.Ignite.Core.csproj   |    5 +
 .../Apache.Ignite.Core/Apache.Ignite.Core.nuspec   |   18 +-
 .../Binary/BinaryBasicNameMapper.cs                |   61 +-
 .../Binary/BinaryConfiguration.cs                  |   12 +-
 .../Binary/BinaryReflectiveSerializer.cs           |    2 +-
 .../Binary/ITimestampConverter.cs                  |   38 +
 .../Configuration/AsyncContinuationExecutor.cs     |   60 +
 .../Apache.Ignite.Core/Datastream/IDataStreamer.cs |  150 +-
 .../IgniteClientConfigurationSection.xsd           |   12 +
 .../Apache.Ignite.Core/IgniteConfiguration.cs      |   19 +-
 .../IgniteConfigurationSection.xsd                 |   26 +-
 .../dotnet/Apache.Ignite.Core/Ignition.cs          |   42 +-
 .../Impl/Binary/BinaryProcessor.cs                 |   21 +-
 .../Impl/Binary/BinaryProcessorClient.cs           |   23 +-
 .../Apache.Ignite.Core/Impl/Binary/BinaryReader.cs |   36 +-
 .../Impl/Binary/BinarySystemHandlers.cs            |  412 ++--
 .../Apache.Ignite.Core/Impl/Binary/BinaryUtils.cs  |  105 +-
 .../Apache.Ignite.Core/Impl/Binary/BinaryWriter.cs |   40 +-
 .../Impl/Binary/IBinaryProcessor.cs                |    9 +-
 .../Apache.Ignite.Core/Impl/Binary/JavaTypes.cs    |    2 +-
 .../Apache.Ignite.Core/Impl/Binary/Marshaller.cs   |   73 +-
 .../Impl/Binary/TypeNameParser.cs                  |   18 +-
 .../Apache.Ignite.Core/Impl/Binary/TypeResolver.cs |    9 +-
 .../Binary/BinaryConfigurationClientInternal.cs    |   68 +
 .../Impl/Client/Binary/BinaryNameMapperMode.cs     |   42 +
 .../Impl/Client/ClientBitmaskFeature.cs            |    3 +-
 .../Impl/Client/ClientFailoverSocket.cs            |  112 +-
 .../Impl/Client/ClientFeatures.cs                  |   30 +-
 .../Apache.Ignite.Core/Impl/Client/ClientOp.cs     |    1 +
 .../Apache.Ignite.Core/Impl/Client/IgniteClient.cs |    2 +-
 .../Impl/Common/FutureConverter.cs                 |   22 +-
 .../Apache.Ignite.Core/Impl/Common/TaskRunner.cs   |   57 +-
 .../Apache.Ignite.Core/Impl/Compute/ComputeImpl.cs |   10 +
 .../Impl/Compute/ComputeTaskHolder.cs              |   20 +-
 .../Impl/Datastream/DataStreamerBatch.cs           |   58 +-
 .../Impl/Datastream/DataStreamerImpl.cs            |  212 +-
 .../Impl/IPlatformTargetInternal.cs                |    3 +-
 .../Impl/PlatformDisposableTargetAdapter.cs        |   24 +-
 .../Apache.Ignite.Core/Impl/PlatformJniTarget.cs   |    5 +-
 .../Impl/PlatformTargetAdapter.cs                  |   53 +-
 .../Impl/Plugin/PluginProcessor.cs                 |   34 +-
 .../Impl/Services/ServiceProxySerializer.cs        |   49 +-
 .../Apache.Ignite.Core/Impl/Services/Services.cs   |   26 +-
 .../Impl/Unmanaged/Jni/DllLoader.cs                |   10 +-
 .../Apache.Ignite.Core/Impl/Unmanaged/Jni/Env.cs   |    2 +-
 .../Impl/Unmanaged/NativeLibraryUtils.cs           |  108 +
 .../Impl/Unmanaged/UnmanagedThread.cs              |   20 +-
 .../Apache.Ignite.Core/Properties/AssemblyInfo.cs  |    9 +-
 .../Properties/AssemblyInfo.cs                     |    6 +-
 .../Apache.Ignite.EntityFramework.nuspec           |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.Linq/Apache.Ignite.Linq.nuspec   |    2 +-
 .../Apache.Ignite.Linq/Impl/AliasDictionary.cs     |   43 +-
 .../Impl/CacheQueryExpressionVisitor.cs            |    5 +-
 .../Impl/CacheQueryModelVisitor.cs                 |    2 +-
 .../Apache.Ignite.Linq/Impl/ExpressionWalker.cs    |  130 +-
 .../Apache.Ignite.Linq/Impl/MethodVisitor.cs       |   54 +
 .../Apache.Ignite.Linq/Properties/AssemblyInfo.cs  |    8 +-
 .../Apache.Ignite.Log4Net.nuspec                   |    2 +-
 .../Properties/AssemblyInfo.cs                     |    8 +-
 .../Apache.Ignite.NLog/Apache.Ignite.NLog.nuspec   |    2 +-
 .../Apache.Ignite.NLog/Properties/AssemblyInfo.cs  |    8 +-
 modules/platforms/dotnet/Apache.Ignite.sln         |   25 +-
 modules/platforms/dotnet/Apache.Ignite/App.config  |    2 +-
 .../Apache.Ignite/Properties/AssemblyInfo.cs       |    8 +-
 modules/platforms/dotnet/DEVNOTES.txt              |   14 +-
 modules/platforms/dotnet/build.ps1                 |   84 +-
 modules/platforms/dotnet/docfx/index.md            |    9 +-
 .../dotnet/examples/.template.config/template.json |   17 +
 .../platforms/dotnet/examples/.vscode/launch.json  |  445 ++++
 .../platforms/dotnet/examples/.vscode/tasks.json   |   17 +
 .../dotnet/examples/Apache.Ignite.Examples.sln     |  665 +++++-
 .../Apache.Ignite.Examples.sln.DotSettings         |   17 +
 .../Apache.Ignite.Examples.csproj                  |  107 -
 .../Apache.Ignite.Examples.snk                     |  Bin 596 -> 0 bytes
 .../examples/Apache.Ignite.Examples/App.config     |   41 -
 .../Compute/ClosureExample.cs                      |   78 -
 .../Compute/PeerAssemblyLoadingExample.cs          |   96 -
 .../Apache.Ignite.Examples/Compute/TaskExample.cs  |  134 --
 .../DataStructures/AtomicLongExample.cs            |   65 -
 .../DataStructures/AtomicReferenceExample.cs       |   65 -
 .../DataStructures/AtomicSequenceExample.cs        |   70 -
 .../Datagrid/BinaryModeExample.cs                  |  261 --
 .../Datagrid/ContinuousQueryExample.cs             |  100 -
 .../Datagrid/DataStreamerExample.cs                |   94 -
 .../Datagrid/EntryProcessorExample.cs              |   94 -
 .../Datagrid/MultiTieredCacheExample.cs            |  116 -
 .../Datagrid/NearCacheExample.cs                   |   87 -
 .../Datagrid/OptimisticTransactionExample.cs       |  110 -
 .../Datagrid/PutGetExample.cs                      |  213 --
 .../Datagrid/QueryExample.cs                       |  163 --
 .../Datagrid/StoreExample.cs                       |  119 -
 .../TransactionDeadlockDetectionExample.cs         |  121 -
 .../Datagrid/TransactionExample.cs                 |  146 --
 .../Apache.Ignite.Examples/Events/EventsExample.cs |   98 -
 .../Messaging/MessagingExample.cs                  |  110 -
 .../Misc/ClientReconnectExample.cs                 |  173 --
 .../Misc/LifecycleExample.cs                       |  115 -
 .../Properties/AssemblyInfo.cs                     |   34 -
 .../Apache.Ignite.Examples/Services/IMapService.cs |   56 -
 .../Services/ServicesExample.cs                    |   74 -
 .../Apache.Ignite.Examples/Sql/LinqExample.cs      |  345 ---
 .../Apache.Ignite.Examples/Sql/SqlDdlExample.cs    |  112 -
 .../Apache.Ignite.Examples/Sql/SqlDmlExample.cs    |  161 --
 .../Apache.Ignite.Examples/Sql/SqlExample.cs       |  281 ---
 .../ThinClient/ThinClientPutGetExample.cs          |   89 -
 .../ThinClient/ThinClientQueryExample.cs           |  144 --
 .../ThinClient/ThinClientSqlExample.cs             |  198 --
 .../Apache.Ignite.ExamplesDll.csproj               |   86 -
 .../Apache.Ignite.ExamplesDll.snk                  |  Bin 596 -> 0 bytes
 .../Apache.Ignite.ExamplesDll/Binary/Account.cs    |   59 -
 .../Apache.Ignite.ExamplesDll/Binary/Address.cs    |   82 -
 .../Apache.Ignite.ExamplesDll/Binary/Employee.cs   |  104 -
 .../Binary/Organization.cs                         |   77 -
 .../Binary/OrganizationType.cs                     |   40 -
 .../Compute/AverageSalaryJob.cs                    |   64 -
 .../Compute/AverageSalaryTask.cs                   |   84 -
 .../Compute/CharacterCountClosure.cs               |   42 -
 .../Compute/CharacterCountReducer.cs               |   51 -
 .../DataStructures/AtomicLongIncrementAction.cs    |   50 -
 .../DataStructures/AtomicReferenceModifyAction.cs  |   62 -
 .../AtomicSequenceIncrementAction.cs               |   50 -
 .../Datagrid/CacheIncrementEntryProcessor.cs       |   45 -
 .../Datagrid/CachePutEntryProcessor.cs             |   45 -
 .../Datagrid/ContinuousQueryFilter.cs              |   48 -
 .../Datagrid/EmployeeStore.cs                      |  120 -
 .../Datagrid/EmployeeStoreFactory.cs               |   38 -
 .../Datagrid/EmployeeStorePredicate.cs             |   38 -
 .../Datagrid/ScanQueryFilter.cs                    |   50 -
 .../Events/LocalListener.cs                        |   54 -
 .../Messaging/LocalListener.cs                     |   59 -
 .../Messaging/RemoteOrderedListener.cs             |   53 -
 .../Messaging/RemoteUnorderedListener.cs           |   53 -
 .../Apache.Ignite.ExamplesDll/Messaging/Topic.cs   |   28 -
 .../Properties/AssemblyInfo.cs                     |   34 -
 .../Services/MapService.cs                         |  116 -
 .../dotnet/examples/Directory.Build.props          |   42 +
 modules/platforms/dotnet/examples/README.md        |   57 +
 modules/platforms/dotnet/examples/README.txt       |    8 -
 .../dotnet/examples/ServerNode/Program.cs          |   39 +
 .../dotnet/examples/ServerNode/ServerNode.csproj   |   13 +
 .../Shared/Cache/CacheIncrementEntryProcessor.cs   |   45 +
 .../Shared/Cache/CachePutEntryProcessor.cs         |   45 +
 .../examples/Shared/Cache/ContinuousQueryFilter.cs |   48 +
 .../dotnet/examples/Shared/Cache/EmployeeStore.cs  |  116 +
 .../examples/Shared/Cache/EmployeeStoreFactory.cs  |   38 +
 .../Shared/Cache/EmployeeStorePredicate.cs         |   38 +
 .../examples/Shared/Cache/ScanQueryFilter.cs       |   50 +
 .../examples/Shared/Compute/AverageSalaryJob.cs    |   64 +
 .../examples/Shared/Compute/AverageSalaryTask.cs   |   84 +
 .../examples/Shared/Compute/CharacterCountFunc.cs  |   42 +
 .../Shared/Compute/CharacterCountReducer.cs        |   51 +
 .../DataStructures/AtomicLongIncrementAction.cs    |   50 +
 .../DataStructures/AtomicReferenceModifyAction.cs  |   62 +
 .../AtomicSequenceIncrementAction.cs               |   50 +
 .../Shared/Messaging/LocalMessageListener.cs       |   59 +
 .../Messaging/RemoteOrderedMessageListener.cs      |   52 +
 .../Messaging/RemoteUnorderedMessageListener.cs    |   52 +
 .../dotnet/examples/Shared/Messaging/Topic.cs      |   28 +
 .../dotnet/examples/Shared/Models/Account.cs       |   59 +
 .../dotnet/examples/Shared/Models/Address.cs       |   82 +
 .../dotnet/examples/Shared/Models/Employee.cs      |  104 +
 .../dotnet/examples/Shared/Models/Organization.cs  |   77 +
 .../examples/Shared/Models/OrganizationType.cs     |   40 +
 .../dotnet/examples/Shared/Services/MapService.cs  |  117 +
 .../platforms/dotnet/examples/Shared/Shared.csproj |   15 +
 modules/platforms/dotnet/examples/Shared/Utils.cs  |  191 ++
 .../Thick/Cache/BinaryMode/BinaryMode.csproj       |   13 +
 .../examples/Thick/Cache/BinaryMode/Program.cs     |  246 ++
 .../Thick/Cache/DataStreamer/DataStreamer.csproj   |   13 +
 .../examples/Thick/Cache/DataStreamer/Program.cs   |   76 +
 .../Cache/EntryProcessor/EntryProcessor.csproj     |   13 +
 .../examples/Thick/Cache/EntryProcessor/Program.cs |   74 +
 .../Cache/MultiTieredCache/MultiTieredCache.csproj |   13 +
 .../Thick/Cache/MultiTieredCache/Program.cs        |  113 +
 .../Thick/Cache/NearCache/NearCache.csproj         |   13 +
 .../examples/Thick/Cache/NearCache/Program.cs      |   78 +
 .../OptimisticTransaction.csproj                   |   13 +
 .../Thick/Cache/OptimisticTransaction/Program.cs   |  101 +
 .../dotnet/examples/Thick/Cache/PutGet/Program.cs  |  195 ++
 .../examples/Thick/Cache/PutGet/PutGet.csproj      |   13 +
 .../Thick/Cache/QueryContinuous/Program.cs         |   85 +
 .../Cache/QueryContinuous/QueryContinuous.csproj   |   13 +
 .../examples/Thick/Cache/QueryFullText/Program.cs  |   62 +
 .../Thick/Cache/QueryFullText/QueryFullText.csproj |   13 +
 .../examples/Thick/Cache/QueryScan/Program.cs      |   65 +
 .../Thick/Cache/QueryScan/QueryScan.csproj         |   13 +
 .../dotnet/examples/Thick/Cache/Store/Program.cs   |  104 +
 .../dotnet/examples/Thick/Cache/Store/Store.csproj |   13 +
 .../examples/Thick/Cache/Transaction/Program.cs    |  131 ++
 .../Thick/Cache/Transaction/Transaction.csproj     |   13 +
 .../Cache/TransactionDeadlockDetection/Program.cs  |  101 +
 .../TransactionDeadlockDetection.csproj            |   13 +
 .../dotnet/examples/Thick/Compute/Func/Func.csproj |   13 +
 .../dotnet/examples/Thick/Compute/Func/Program.cs  |   64 +
 .../PeerAssemblyLoading/PeerAssemblyLoading.csproj |   16 +
 .../Thick/Compute/PeerAssemblyLoading/Program.cs   |   87 +
 .../dotnet/examples/Thick/Compute/Task/Program.cs  |   61 +
 .../dotnet/examples/Thick/Compute/Task/Task.csproj |   13 +
 .../DataStructures/AtomicLong/AtomicLong.csproj    |   13 +
 .../Thick/DataStructures/AtomicLong/Program.cs     |   56 +
 .../AtomicReference/AtomicReference.csproj         |   13 +
 .../DataStructures/AtomicReference/Program.cs      |   57 +
 .../AtomicSequence/AtomicSequence.csproj           |   13 +
 .../Thick/DataStructures/AtomicSequence/Program.cs |   57 +
 .../Misc/ClientReconnect/ClientReconnect.csproj    |   13 +
 .../examples/Thick/Misc/ClientReconnect/Program.cs |  143 ++
 .../examples/Thick/Misc/Events/Events.csproj       |   13 +
 .../dotnet/examples/Thick/Misc/Events/Program.cs   |  114 +
 .../examples/Thick/Misc/Lifecycle/Lifecycle.csproj |   13 +
 .../examples/Thick/Misc/Lifecycle/Program.cs       |   94 +
 .../examples/Thick/Misc/Messaging/Messaging.csproj |   13 +
 .../examples/Thick/Misc/Messaging/Program.cs       |  100 +
 .../dotnet/examples/Thick/Misc/Services/Program.cs |   78 +
 .../examples/Thick/Misc/Services/Services.csproj   |   13 +
 modules/platforms/dotnet/examples/Thick/README.md  |    4 +
 .../dotnet/examples/Thick/Sql/Ddl/Ddl.csproj       |   13 +
 .../dotnet/examples/Thick/Sql/Ddl/Program.cs       |   99 +
 .../dotnet/examples/Thick/Sql/Dml/Dml.csproj       |   13 +
 .../dotnet/examples/Thick/Sql/Dml/Program.cs       |  145 ++
 .../dotnet/examples/Thick/Sql/Linq/Linq.csproj     |   13 +
 .../dotnet/examples/Thick/Sql/Linq/Program.cs      |  311 +++
 .../dotnet/examples/Thick/Sql/Sql/Program.cs       |  244 ++
 .../dotnet/examples/Thick/Sql/Sql/Sql.csproj       |   13 +
 .../Cache/BinaryModeThin/BinaryModeThin.csproj     |   13 +
 .../examples/Thin/Cache/BinaryModeThin/Program.cs  |  232 ++
 .../OptimisticTransactionThin.csproj               |   13 +
 .../Cache/OptimisticTransactionThin/Program.cs     |  108 +
 .../examples/Thin/Cache/PutGetThin/Program.cs      |  202 ++
 .../Thin/Cache/PutGetThin/PutGetThin.csproj        |   13 +
 .../Thin/Cache/QueryContinuousThin/Program.cs      |   93 +
 .../QueryContinuousThin/QueryContinuousThin.csproj |   13 +
 .../examples/Thin/Cache/QueryScanThin/Program.cs   |   71 +
 .../Thin/Cache/QueryScanThin/QueryScanThin.csproj  |   13 +
 .../examples/Thin/Cache/TransactionThin/Program.cs |  137 ++
 .../Cache/TransactionThin/TransactionThin.csproj   |   13 +
 .../examples/Thin/Misc/ServicesThin/Program.cs     |   79 +
 .../Thin/Misc/ServicesThin/ServicesThin.csproj     |   13 +
 modules/platforms/dotnet/examples/Thin/README.md   |    3 +
 .../examples/Thin/Sql/DdlThin/DdlThin.csproj       |   13 +
 .../dotnet/examples/Thin/Sql/DdlThin/Program.cs    |  104 +
 .../examples/Thin/Sql/DmlThin/DmlThin.csproj       |   13 +
 .../dotnet/examples/Thin/Sql/DmlThin/Program.cs    |  152 ++
 .../examples/Thin/Sql/LinqThin/LinqThin.csproj     |   13 +
 .../dotnet/examples/Thin/Sql/LinqThin/Program.cs   |  319 +++
 .../dotnet/examples/Thin/Sql/SqlThin/Program.cs    |  249 ++
 .../examples/Thin/Sql/SqlThin/SqlThin.csproj       |   13 +
 .../dotnetcore/Apache.Ignite.Examples.csproj       |   29 -
 .../dotnet/examples/dotnetcore/App.config          |   38 -
 .../dotnet/examples/dotnetcore/Employee.cs         |   67 -
 .../dotnet/examples/dotnetcore/LinqExample.cs      |  239 --
 .../dotnet/examples/dotnetcore/Organization.cs     |   58 -
 .../dotnet/examples/dotnetcore/Program.cs          |  109 -
 .../dotnet/examples/dotnetcore/PutGetExample.cs    |  122 -
 .../dotnet/examples/dotnetcore/README.txt          |    8 -
 .../dotnet/examples/dotnetcore/SqlExample.cs       |  191 --
 .../dotnet/examples/images/rider-sidebar.png       |  Bin 0 -> 48065 bytes
 modules/platforms/dotnet/examples/images/rider.png |  Bin 0 -> 21953 bytes
 .../platforms/dotnet/examples/images/vs-code.png   |  Bin 0 -> 29808 bytes
 modules/platforms/dotnet/examples/images/vs.png    |  Bin 0 -> 8262 bytes
 modules/platforms/dotnet/release/verify-nuget.ps1  |    2 +-
 .../platforms/dotnet/run-dotnetcore-examples.bat   |   27 -
 modules/platforms/dotnet/templates/README.md       |   32 +
 .../.template.config/template.json                 |   16 +
 .../Apache.Ignite.Example/ExampleProject.csproj    |   13 +
 .../internal/Apache.Ignite.Example/Program.cs      |   50 +
 .../.template.config/template.json                 |   16 +
 .../ExampleProjectThin.csproj                      |   13 +
 .../internal/Apache.Ignite.ExampleThin/Program.cs  |   57 +
 .../Apache.Ignite.Examples.csproj                  |   32 +
 modules/platforms/nodejs/README.md                 |   32 -
 modules/platforms/nodejs/api_spec/conf.json        |   12 -
 .../platforms/nodejs/examples/AuthTlsExample.js    |  128 -
 .../nodejs/examples/CachePutGetExample.js          |  186 --
 .../platforms/nodejs/examples/FailoverExample.js   |   59 -
 modules/platforms/nodejs/examples/SqlExample.js    |  242 --
 .../nodejs/examples/SqlQueryEntriesExample.js      |  136 --
 modules/platforms/nodejs/examples/certs/ca.crt     |   32 -
 modules/platforms/nodejs/examples/certs/client.crt |   30 -
 modules/platforms/nodejs/examples/certs/client.key |   51 -
 .../platforms/nodejs/examples/certs/keystore.jks   |  Bin 3828 -> 0 bytes
 .../platforms/nodejs/examples/certs/truststore.jks |  Bin 1477 -> 0 bytes
 modules/platforms/nodejs/index.js                  |   43 -
 modules/platforms/nodejs/lib/BinaryObject.js       |  530 -----
 modules/platforms/nodejs/lib/CacheClient.js        |  759 ------
 modules/platforms/nodejs/lib/CacheConfiguration.js | 1734 --------------
 modules/platforms/nodejs/lib/Cursor.js             |  307 ---
 modules/platforms/nodejs/lib/EnumItem.js           |  212 --
 modules/platforms/nodejs/lib/Errors.js             |  133 --
 modules/platforms/nodejs/lib/IgniteClient.js       |  290 ---
 .../nodejs/lib/IgniteClientConfiguration.js        |  112 -
 modules/platforms/nodejs/lib/ObjectType.js         |  600 -----
 modules/platforms/nodejs/lib/Query.js              |  508 ----
 modules/platforms/nodejs/lib/Timestamp.js          |   76 -
 .../nodejs/lib/internal/ArgumentChecker.js         |   83 -
 .../nodejs/lib/internal/BinaryCommunicator.js      |  409 ----
 .../platforms/nodejs/lib/internal/BinaryType.js    |  483 ----
 .../nodejs/lib/internal/BinaryTypeStorage.js       |  112 -
 .../platforms/nodejs/lib/internal/BinaryUtils.js   |  602 -----
 .../nodejs/lib/internal/ClientFailoverSocket.js    |  134 --
 .../platforms/nodejs/lib/internal/ClientSocket.js  |  454 ----
 modules/platforms/nodejs/lib/internal/Logger.js    |   45 -
 .../platforms/nodejs/lib/internal/MessageBuffer.js |  293 ---
 modules/platforms/nodejs/package.json              |   40 -
 modules/platforms/nodejs/spec/ExamplesExecutor.js  |   28 -
 modules/platforms/nodejs/spec/TestingHelper.js     |  391 ---
 .../nodejs/spec/cache/BinaryObject.spec.js         |  176 --
 modules/platforms/nodejs/spec/cache/Cache.spec.js  |  262 ---
 .../nodejs/spec/cache/CacheKeyValueOps.spec.js     | 1022 --------
 .../nodejs/spec/cache/CachePutGetDiffTypes.spec.js |  686 ------
 .../nodejs/spec/cache/ComplexObject.spec.js        |  540 -----
 modules/platforms/nodejs/spec/cache/UUID.spec.js   |  105 -
 modules/platforms/nodejs/spec/config.js            |   27 -
 .../nodejs/spec/examples/AuthExample.spec.js       |   33 -
 .../nodejs/spec/examples/Examples.spec.js          |   45 -
 .../platforms/nodejs/spec/query/ScanQuery.spec.js  |  207 --
 .../nodejs/spec/query/SqlFieldsQuery.spec.js       |  266 ---
 .../platforms/nodejs/spec/query/SqlQuery.spec.js   |  247 --
 modules/platforms/nodejs/spec/support/jasmine.json |   11 -
 modules/platforms/php/.gitignore                   |    2 -
 modules/platforms/php/README.md                    |   37 -
 modules/platforms/php/api_docs/Doxyfile            | 2487 --------------------
 modules/platforms/php/composer.json                |   27 -
 modules/platforms/php/examples/AuthTlsExample.php  |  129 -
 .../platforms/php/examples/CachePutGetExample.php  |  184 --
 modules/platforms/php/examples/FailoverExample.php |   67 -
 modules/platforms/php/examples/SqlExample.php      |  237 --
 .../php/examples/SqlQueryEntriesExample.php        |  127 -
 modules/platforms/php/examples/certs/ca.pem        |   32 -
 modules/platforms/php/examples/certs/client.pem    |   81 -
 modules/platforms/php/examples/certs/keystore.jks  |  Bin 3828 -> 0 bytes
 .../platforms/php/examples/certs/truststore.jks    |  Bin 1477 -> 0 bytes
 .../src/Apache/Ignite/Cache/CacheConfiguration.php | 1011 --------
 .../php/src/Apache/Ignite/Cache/CacheEntry.php     |   60 -
 .../php/src/Apache/Ignite/Cache/CacheInterface.php |  379 ---
 .../Apache/Ignite/Cache/CacheKeyConfiguration.php  |  107 -
 .../php/src/Apache/Ignite/Cache/QueryEntity.php    |  315 ---
 .../php/src/Apache/Ignite/Cache/QueryField.php     |  279 ---
 .../php/src/Apache/Ignite/Cache/QueryIndex.php     |  191 --
 modules/platforms/php/src/Apache/Ignite/Client.php |  243 --
 .../php/src/Apache/Ignite/ClientConfiguration.php  |  294 ---
 .../php/src/Apache/Ignite/Data/BinaryObject.php    |  469 ----
 .../platforms/php/src/Apache/Ignite/Data/Date.php  |   83 -
 .../php/src/Apache/Ignite/Data/EnumItem.php        |  155 --
 .../platforms/php/src/Apache/Ignite/Data/Time.php  |   58 -
 .../php/src/Apache/Ignite/Data/Timestamp.php       |   66 -
 .../Apache/Ignite/Exception/ClientException.php    |   35 -
 .../Ignite/Exception/NoConnectionException.php     |   35 -
 .../Apache/Ignite/Exception/OperationException.php |   35 -
 .../Exception/OperationStatusUnknownException.php  |   35 -
 .../Ignite/Internal/Binary/BinaryCommunicator.php  |  493 ----
 .../Apache/Ignite/Internal/Binary/BinaryField.php  |   78 -
 .../Ignite/Internal/Binary/BinaryObjectField.php   |  113 -
 .../Apache/Ignite/Internal/Binary/BinarySchema.php |  145 --
 .../Apache/Ignite/Internal/Binary/BinaryType.php   |  233 --
 .../Ignite/Internal/Binary/BinaryTypeBuilder.php   |  207 --
 .../Ignite/Internal/Binary/BinaryTypeStorage.php   |  123 -
 .../Apache/Ignite/Internal/Binary/BinaryUtils.php  |  450 ----
 .../Ignite/Internal/Binary/ClientOperation.php     |   64 -
 .../Ignite/Internal/Binary/MessageBuffer.php       |  307 ---
 .../src/Apache/Ignite/Internal/Binary/Request.php  |   85 -
 .../src/Apache/Ignite/Internal/Binary/TypeInfo.php |  312 ---
 .../php/src/Apache/Ignite/Internal/Cache.php       |  387 ---
 .../Internal/Connection/ClientFailoverSocket.php   |  134 --
 .../Ignite/Internal/Connection/ClientSocket.php    |  247 --
 .../Ignite/Internal/Connection/ProtocolVersion.php |   82 -
 .../src/Apache/Ignite/Internal/Query/Cursor.php    |  166 --
 .../Ignite/Internal/Query/SqlFieldsCursor.php      |   75 -
 .../Ignite/Internal/Utils/ArgumentChecker.php      |   87 -
 .../src/Apache/Ignite/Internal/Utils/Logger.php    |   62 -
 .../src/Apache/Ignite/Query/CursorInterface.php    |   56 -
 .../php/src/Apache/Ignite/Query/Query.php          |   70 -
 .../php/src/Apache/Ignite/Query/ScanQuery.php      |   88 -
 .../Ignite/Query/SqlFieldsCursorInterface.php      |   82 -
 .../php/src/Apache/Ignite/Query/SqlFieldsQuery.php |  206 --
 .../php/src/Apache/Ignite/Query/SqlQuery.php       |  225 --
 .../Apache/Ignite/Type/CollectionObjectType.php    |  142 --
 .../src/Apache/Ignite/Type/ComplexObjectType.php   |  165 --
 .../php/src/Apache/Ignite/Type/MapObjectType.php   |  123 -
 .../php/src/Apache/Ignite/Type/ObjectArrayType.php |   68 -
 .../php/src/Apache/Ignite/Type/ObjectType.php      |  442 ----
 modules/platforms/php/tests/BinaryObjectTest.php   |  196 --
 .../platforms/php/tests/CacheKeyValueOpsTest.php   |  763 ------
 modules/platforms/php/tests/CachePutGetTest.php    |  765 ------
 modules/platforms/php/tests/CacheTest.php          |  240 --
 modules/platforms/php/tests/ComplexObjectTest.php  |  428 ----
 modules/platforms/php/tests/ScanQueryTest.php      |  167 --
 modules/platforms/php/tests/SqlFieldsQueryTest.php |  224 --
 modules/platforms/php/tests/SqlQueryTest.php       |  204 --
 modules/platforms/php/tests/TestConfig.php         |   37 -
 modules/platforms/php/tests/TestingHelper.php      |  363 ---
 .../php/tests/examples/ExecuteAuthTlsExample.php   |   36 -
 .../php/tests/examples/ExecuteExamples.php         |   61 -
 modules/platforms/python/LICENSE                   |  202 --
 modules/platforms/python/README.md                 |   75 -
 modules/platforms/python/docs/Makefile             |   20 -
 modules/platforms/python/docs/conf.py              |  176 --
 .../python/docs/datatypes/cache_props.rst          |  163 --
 .../platforms/python/docs/datatypes/parsers.rst    |  175 --
 modules/platforms/python/docs/examples.rst         |  624 -----
 modules/platforms/python/docs/index.rst            |   33 -
 modules/platforms/python/docs/modules.rst          |   31 -
 modules/platforms/python/docs/readme.rst           |  202 --
 modules/platforms/python/docs/source/modules.rst   |    7 -
 .../python/docs/source/pyignite.api.binary.rst     |    7 -
 .../docs/source/pyignite.api.cache_config.rst      |    7 -
 .../python/docs/source/pyignite.api.key_value.rst  |    7 -
 .../python/docs/source/pyignite.api.result.rst     |    7 -
 .../platforms/python/docs/source/pyignite.api.rst  |   19 -
 .../python/docs/source/pyignite.api.sql.rst        |    7 -
 .../python/docs/source/pyignite.binary.rst         |    7 -
 .../python/docs/source/pyignite.cache.rst          |    7 -
 .../python/docs/source/pyignite.client.rst         |    7 -
 .../docs/source/pyignite.connection.generators.rst |    7 -
 .../docs/source/pyignite.connection.handshake.rst  |    7 -
 .../python/docs/source/pyignite.connection.rst     |   17 -
 .../python/docs/source/pyignite.connection.ssl.rst |    7 -
 .../python/docs/source/pyignite.constants.rst      |    7 -
 .../python/docs/source/pyignite.datatypes.base.rst |    7 -
 .../docs/source/pyignite.datatypes.binary.rst      |    7 -
 .../source/pyignite.datatypes.cache_config.rst     |    7 -
 .../source/pyignite.datatypes.cache_properties.rst |    7 -
 .../docs/source/pyignite.datatypes.complex.rst     |    7 -
 .../docs/source/pyignite.datatypes.internal.rst    |    7 -
 .../docs/source/pyignite.datatypes.key_value.rst   |    7 -
 .../docs/source/pyignite.datatypes.null_object.rst |    7 -
 .../docs/source/pyignite.datatypes.primitive.rst   |    7 -
 .../source/pyignite.datatypes.primitive_arrays.rst |    7 -
 .../pyignite.datatypes.primitive_objects.rst       |    7 -
 .../docs/source/pyignite.datatypes.prop_codes.rst  |    7 -
 .../python/docs/source/pyignite.datatypes.rst      |   29 -
 .../python/docs/source/pyignite.datatypes.sql.rst  |    7 -
 .../docs/source/pyignite.datatypes.standard.rst    |    7 -
 .../docs/source/pyignite.datatypes.type_codes.rst  |    7 -
 .../python/docs/source/pyignite.exceptions.rst     |    7 -
 .../docs/source/pyignite.queries.op_codes.rst      |    7 -
 .../python/docs/source/pyignite.queries.rst        |   15 -
 modules/platforms/python/docs/source/pyignite.rst  |   30 -
 .../python/docs/source/pyignite.utils.rst          |    7 -
 modules/platforms/python/examples/binary_basics.py |   53 -
 modules/platforms/python/examples/create_binary.py |  103 -
 modules/platforms/python/examples/failover.py      |   61 -
 modules/platforms/python/examples/get_and_put.py   |   41 -
 .../platforms/python/examples/migrate_binary.py    |  190 --
 modules/platforms/python/examples/read_binary.py   |  275 ---
 modules/platforms/python/examples/readme.md        |   17 -
 modules/platforms/python/examples/scans.py         |   55 -
 modules/platforms/python/examples/sql.py           |  298 ---
 modules/platforms/python/examples/type_hints.py    |   51 -
 modules/platforms/python/pyignite/__init__.py      |   17 -
 modules/platforms/python/pyignite/api/__init__.py  |   71 -
 modules/platforms/python/pyignite/api/binary.py    |  209 --
 .../platforms/python/pyignite/api/cache_config.py  |  279 ---
 modules/platforms/python/pyignite/api/key_value.py |  995 --------
 modules/platforms/python/pyignite/api/result.py    |   38 -
 modules/platforms/python/pyignite/api/sql.py       |  475 ----
 modules/platforms/python/pyignite/binary.py        |  136 --
 modules/platforms/python/pyignite/cache.py         |  595 -----
 modules/platforms/python/pyignite/client.py        |  406 ----
 .../python/pyignite/connection/__init__.py         |  333 ---
 .../python/pyignite/connection/generators.py       |   48 -
 .../python/pyignite/connection/handshake.py        |   91 -
 .../platforms/python/pyignite/connection/ssl.py    |   49 -
 modules/platforms/python/pyignite/constants.py     |   52 -
 .../python/pyignite/datatypes/__init__.py          |   27 -
 .../platforms/python/pyignite/datatypes/base.py    |   24 -
 .../platforms/python/pyignite/datatypes/binary.py  |   45 -
 .../python/pyignite/datatypes/cache_config.py      |  153 --
 .../python/pyignite/datatypes/cache_properties.py  |  287 ---
 .../platforms/python/pyignite/datatypes/complex.py |  526 -----
 .../python/pyignite/datatypes/internal.py          |  472 ----
 .../python/pyignite/datatypes/key_value.py         |   24 -
 .../python/pyignite/datatypes/null_object.py       |   64 -
 .../python/pyignite/datatypes/primitive.py         |  106 -
 .../python/pyignite/datatypes/primitive_arrays.py  |  208 --
 .../python/pyignite/datatypes/primitive_objects.py |  158 --
 .../python/pyignite/datatypes/prop_codes.py        |   51 -
 modules/platforms/python/pyignite/datatypes/sql.py |   23 -
 .../python/pyignite/datatypes/standard.py          |  739 ------
 .../python/pyignite/datatypes/type_codes.py        |   57 -
 modules/platforms/python/pyignite/exceptions.py    |   80 -
 .../platforms/python/pyignite/queries/__init__.py  |  339 ---
 .../platforms/python/pyignite/queries/op_codes.py  |   65 -
 modules/platforms/python/pyignite/utils.py         |  172 --
 modules/platforms/python/requirements/docs.txt     |    6 -
 modules/platforms/python/requirements/install.txt  |    4 -
 modules/platforms/python/requirements/setup.txt    |    3 -
 modules/platforms/python/requirements/tests.txt    |    5 -
 modules/platforms/python/setup.py                  |  104 -
 modules/platforms/python/tests/config/ssl.xml      |   58 -
 .../platforms/python/tests/config/ssl/README.txt   |    3 -
 .../python/tests/config/ssl/client_full.pem        |   52 -
 .../tests/config/ssl/client_with_pass_full.pem     |   54 -
 .../platforms/python/tests/config/ssl/server.jks   |  Bin 2380 -> 0 bytes
 .../platforms/python/tests/config/ssl/trust.jks    |  Bin 1346 -> 0 bytes
 modules/platforms/python/tests/conftest.py         |  227 --
 modules/platforms/python/tests/test_binary.py      |  280 ---
 modules/platforms/python/tests/test_cache_class.py |  221 --
 .../platforms/python/tests/test_cache_class_sql.py |  103 -
 .../platforms/python/tests/test_cache_config.py    |   75 -
 modules/platforms/python/tests/test_datatypes.py   |  176 --
 modules/platforms/python/tests/test_examples.py    |   57 -
 .../platforms/python/tests/test_generic_object.py  |   33 -
 modules/platforms/python/tests/test_get_names.py   |   30 -
 modules/platforms/python/tests/test_handshake.py   |   64 -
 modules/platforms/python/tests/test_key_value.py   |  400 ----
 modules/platforms/python/tests/test_scan.py        |   66 -
 modules/platforms/python/tests/test_sql.py         |  184 --
 modules/rest-http/pom.xml                          |   11 +-
 .../http/jetty/GridJettyObjectMapper.java          |   27 +-
 .../protocols/http/jetty/GridJettyRestHandler.java |    6 +-
 modules/scalar-2.10/pom.xml                        |   13 +-
 modules/scalar/pom.xml                             |   49 +-
 .../scalar/testsuites/ScalarSelfTestSuite.scala    |    2 -
 modules/schedule/pom.xml                           |    3 +-
 modules/slf4j/pom.xml                              |   11 +-
 modules/spark-2.4/pom.xml                          |   11 +-
 .../org/apache/ignite/spark/impl/QueryHelper.scala |    2 +-
 .../apache/ignite/spark/IgniteDataFrameSuite.scala |    6 +-
 modules/spark/pom.xml                              |   11 +-
 .../org/apache/ignite/spark/impl/QueryHelper.scala |    2 +-
 .../apache/ignite/spark/IgniteDataFrameSuite.scala |    6 +-
 modules/spring/pom.xml                             |   18 +-
 .../org/apache/ignite/IgniteClientSpringBean.java  |  258 ++
 .../java/org/apache/ignite/IgniteSpringBean.java   |    2 +
 .../apache/ignite/cache/spring/SpringCache.java    |  172 --
 .../ignite/cache/spring/SpringCacheManager.java    |  389 ---
 .../apache/ignite/cache/spring/package-info.java   |   23 -
 .../spring/IgniteTransactionHolder.java            |   97 -
 .../spring/SpringTransactionManager.java           |  561 -----
 .../ignite/transactions/spring/package-info.java   |   22 -
 .../spring-transactions-ignite-spring-bean.xml     |   67 -
 .../src/test/java/config/spring-transactions.xml   |   35 -
 .../apache/ignite/TestInjectionLifecycleBean.java  |   42 -
 .../spring/GridSpringCacheManagerAbstractTest.java |  398 ----
 .../GridSpringCacheManagerMultiJvmSelfTest.java    |  131 --
 .../spring/GridSpringCacheManagerSelfTest.java     |   64 -
 .../GridSpringCacheManagerSpringBeanSelfTest.java  |   46 -
 .../cache/spring/GridSpringCacheTestKey.java       |   61 -
 .../spring/GridSpringCacheTestKeyGenerator.java    |   40 -
 .../cache/spring/GridSpringCacheTestService.java   |  181 --
 .../spring/GridSpringDynamicCacheTestService.java  |   98 -
 .../SpringCacheManagerContextInjectionTest.java    |  128 -
 .../ignite/cache/spring/SpringCacheTest.java       |  184 --
 .../spring/spring-caching-ignite-spring-bean.xml   |   90 -
 .../apache/ignite/cache/spring/spring-caching.xml  |   57 -
 .../apache/ignite/cache/spring/spring-caching1.xml |   56 -
 .../apache/ignite/cache/spring/spring-caching2.xml |   56 -
 .../SpringEncryptedCacheRestartTest.java           |   10 +-
 .../internal/IgniteClientSpringBeanTest.java       |   61 +
 .../ignite/internal/ignite-client-spring-bean.xml  |   40 +
 .../resource/GridResourceProcessorSelfTest.java    |    3 +-
 .../GridSpringResourceInjectionSelfTest.java       |    2 +-
 .../org/apache/ignite/spring-injection-test.xml    |   43 -
 ...gniteSpringBeanSpringResourceInjectionTest.java |    6 +-
 .../apache/ignite/spring/injection/spring-bean.xml |    3 +-
 .../ignite/testsuites/IgniteSpringTestSuite.java   |   23 +-
 .../GridSpringTransactionManagerAbstractTest.java  |  142 --
 .../GridSpringTransactionManagerSelfTest.java      |   66 -
 ...SpringTransactionManagerSpringBeanSelfTest.java |   58 -
 .../spring/GridSpringTransactionService.java       |   66 -
 ...ringTransactionManagerContextInjectionTest.java |  128 -
 modules/sqlline/bin/sqlline.bat                    |    8 +-
 modules/sqlline/bin/sqlline.sh                     |    6 +-
 modules/sqlline/pom.xml                            |    2 +-
 modules/ssh/pom.xml                                |   12 +-
 modules/tools/pom.xml                              |   68 +-
 .../tools/ant/beautifier/GridJavadocAntTask.java   |    3 +-
 .../surefire/testsuites/AssertOnOrphanedTests.java |   58 +
 .../surefire/testsuites/CheckAllTestsInSuites.java |  127 +
 .../surefire/testsuites/IgniteTestsProvider.java   |  131 ++
 .../testsuites/OrphanedTestCollection.java         |  123 +
 ...che.maven.surefire.providerapi.SurefireProvider |    1 +
 modules/urideploy/pom.xml                          |   12 +-
 .../spi/deployment/uri/UriDeploymentSpi.java       |    4 +-
 .../scanners/file/UriDeploymentFileScanner.java    |    2 +-
 .../UriDeploymentAbsentProcessorClassTest.java     |  117 +
 .../testsuites/IgniteUriDeploymentTestSuite.java   |    4 +-
 modules/visor-console-2.10/pom.xml                 |   14 +-
 modules/visor-console/pom.xml                      |   13 +-
 modules/visor-plugins/pom.xml                      |   13 +-
 modules/web/ignite-appserver-test/pom.xml          |    2 +-
 modules/web/ignite-websphere-test/pom.xml          |    2 +-
 modules/web/pom.xml                                |   12 +-
 .../servlet/ServletContextListenerStartup.java     |    6 +-
 .../ignite/startup/servlet/ServletStartup.java     |    6 +-
 .../benchmark-cache-pagereplacements.properties    |  124 +
 .../benchmark-cache-pegereplacements.properties    |   83 -
 .../ignite-localhost-pagereplacement-config.xml    |   79 +
 modules/yardstick/pom.xml                          |    2 +-
 .../ignite/yardstick/IgniteBenchmarkArguments.java |   29 +-
 .../org/apache/ignite/yardstick/IgniteNode.java    |    8 +-
 .../IgniteAbstractPageReplacementBenchmark.java    |  216 ++
 .../cache/IgniteCacheAbstractBenchmark.java        |    2 +-
 .../IgniteGetWithPageReplacementBenchmark.java     |   41 +
 .../cache/IgnitePutGetWithPageReplacements.java    |  171 --
 .../IgnitePutWithPageReplacementBenchmark.java     |   43 +
 .../yardstick/cache/jdbc/RdbmsBenchmark.java       |    4 +-
 .../jdbc/NativeJavaApiPutRemoveBenchmark.java      |    2 +-
 .../jdbc/NativeSqlInsertDeleteBenchmark.java       |    2 +-
 .../jdbc/NativeSqlJoinQueryRangeBenchmark.java     |    6 +-
 modules/yarn/pom.xml                               |   12 +-
 modules/yarn/src/main/resources/ignite.properties  |    2 +-
 modules/zookeeper/pom.xml                          |   12 +-
 .../spi/discovery/zk/internal/ZkIgnitePaths.java   |    2 +-
 .../zk/internal/ZookeeperDiscoveryImpl.java        |   14 +
 .../zk/internal/ZookeeperDiscoveryStatistics.java  |   18 +-
 .../zk/ZookeeperDiscoverySpiTestSuite4.java        |    4 +-
 .../zk/ZookeeperDiscoverySpiTestUtil.java          |    4 +-
 packaging/deb/changelog                            |    6 +
 packaging/rpm/apache-ignite.spec                   |    5 +-
 parent/pom.xml                                     |   40 +-
 pom.xml                                            |   71 +-
 2632 files changed, 90536 insertions(+), 74775 deletions(-)

diff --cc modules/calcite/pom.xml
index 81171e7,0000000..5e2b3de
mode 100644,000000..100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@@ -1,288 -1,0 +1,288 @@@
 +<?xml version="1.0" encoding="UTF-8"?>
 +
 +<!--
 +  Licensed to the Apache Software Foundation (ASF) under one or more
 +  contributor license agreements.  See the NOTICE file distributed with
 +  this work for additional information regarding copyright ownership.
 +  The ASF licenses this file to You under the Apache License, Version 2.0
 +  (the "License"); you may not use this file except in compliance with
 +  the License.  You may obtain a copy of the License at
 +
 +       http://www.apache.org/licenses/LICENSE-2.0
 +
 +  Unless required by applicable law or agreed to in writing, software
 +  distributed under the License is distributed on an "AS IS" BASIS,
 +  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +  See the License for the specific language governing permissions and
 +  limitations under the License.
 +-->
 +
 +<!--
 +    POM file.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +    <modelVersion>4.0.0</modelVersion>
 +
 +    <!-- Module specific package versions -->
 +    <properties>
 +        <calcite.version>1.26.0</calcite.version>
 +        <janino.version>3.0.11</janino.version>
 +        <avatica.version>1.17.0</avatica.version>
 +        <jsonpath.version>2.4.0</jsonpath.version>
 +        <reflections.version>0.9.10</reflections.version>
 +        <javassist.version>3.27.0-GA</javassist.version>
 +        <esri.geometry.version>2.2.3</esri.geometry.version>
 +    </properties>
 +
 +    <parent>
 +        <groupId>org.apache.ignite</groupId>
 +        <artifactId>ignite-parent</artifactId>
 +        <version>1</version>
 +        <relativePath>../../parent</relativePath>
 +    </parent>
 +
 +    <artifactId>ignite-calcite</artifactId>
-     <version>2.10.0-SNAPSHOT</version>
++    <version>2.11.0-SNAPSHOT</version>
 +    <url>http://ignite.apache.org</url>
 +
 +    <dependencies>
 +        <dependency>
 +            <groupId>org.apache.ignite</groupId>
 +            <artifactId>ignite-core</artifactId>
 +            <version>${project.version}</version>
 +        </dependency>
 +
 +        <!--
 +            At now the new calcite engine reuses some logic
 +            and doesn't work without "old" indexing module.
 +        -->
 +        <dependency>
 +            <groupId>org.apache.ignite</groupId>
 +            <artifactId>ignite-indexing</artifactId>
 +            <version>${project.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.apache.calcite</groupId>
 +            <artifactId>calcite-core</artifactId>
 +            <version>${calcite.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.apache.calcite</groupId>
 +            <artifactId>calcite-linq4j</artifactId>
 +            <version>${calcite.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.google.guava</groupId>
 +            <artifactId>guava</artifactId>
 +            <version>${guava.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.codehaus.janino</groupId>
 +            <artifactId>commons-compiler</artifactId>
 +            <version>${janino.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.codehaus.janino</groupId>
 +            <artifactId>janino</artifactId>
 +            <version>${janino.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.apache.calcite.avatica</groupId>
 +            <artifactId>avatica-core</artifactId>
 +            <version>${avatica.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.fasterxml.jackson.core</groupId>
 +            <artifactId>jackson-core</artifactId>
 +            <version>${jackson.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.fasterxml.jackson.core</groupId>
 +            <artifactId>jackson-databind</artifactId>
 +            <version>${jackson.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.fasterxml.jackson.core</groupId>
 +            <artifactId>jackson-annotations</artifactId>
 +            <version>${jackson.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.jayway.jsonpath</groupId>
 +            <artifactId>json-path</artifactId>
 +            <version>${jsonpath.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.reflections</groupId>
 +            <artifactId>reflections</artifactId>
 +            <version>${reflections.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.javassist</groupId>
 +            <artifactId>javassist</artifactId>
 +            <version>${javassist.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>com.esri.geometry</groupId>
 +            <artifactId>esri-geometry-api</artifactId>
 +            <version>${esri.geometry.version}</version>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.apache.ignite</groupId>
 +            <artifactId>ignite-core</artifactId>
 +            <version>${project.version}</version>
 +            <type>test-jar</type>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.springframework</groupId>
 +            <artifactId>spring-core</artifactId>
 +            <version>${spring.version}</version>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>log4j</groupId>
 +            <artifactId>log4j</artifactId>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.slf4j</groupId>
 +            <artifactId>slf4j-log4j12</artifactId>
 +            <version>${slf4j.version}</version>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.springframework</groupId>
 +            <artifactId>spring-beans</artifactId>
 +            <version>${spring.version}</version>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.springframework</groupId>
 +            <artifactId>spring-context</artifactId>
 +            <version>${spring.version}</version>
 +            <scope>test</scope>
 +        </dependency>
 +
 +        <dependency>
 +            <groupId>org.apache.ignite</groupId>
 +            <artifactId>ignite-clients</artifactId>
 +            <version>${project.version}</version>
 +            <scope>test</scope>
 +        </dependency>
 +    </dependencies>
 +
 +    <build>
 +        <plugins>
 +            <!-- Generate the OSGi MANIFEST.MF for this bundle. -->
 +            <plugin>
 +                <groupId>org.apache.felix</groupId>
 +                <artifactId>maven-bundle-plugin</artifactId>
 +            </plugin>
 +            <plugin>
 +                <artifactId>maven-resources-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>copy-fmpp-resources</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>copy-resources</goal>
 +                        </goals>
 +                        <configuration>
 +                            <outputDirectory>${project.build.directory}/codegen</outputDirectory>
 +                            <resources>
 +                                <resource>
 +                                    <directory>src/main/codegen</directory>
 +                                    <filtering>false</filtering>
 +                                </resource>
 +                            </resources>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.apache.maven.plugins</groupId>
 +                <artifactId>maven-dependency-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>unpack-parser-template</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>unpack</goal>
 +                        </goals>
 +                        <configuration>
 +                            <artifactItems>
 +                                <artifactItem>
 +                                    <groupId>org.apache.calcite</groupId>
 +                                    <artifactId>calcite-core</artifactId>
 +                                    <type>jar</type>
 +                                    <overWrite>true</overWrite>
 +                                    <outputDirectory>${project.build.directory}/</outputDirectory>
 +                                    <includes>codegen/templates/Parser.jj</includes>
 +                                </artifactItem>
 +                            </artifactItems>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>com.googlecode.fmpp-maven-plugin</groupId>
 +                <artifactId>fmpp-maven-plugin</artifactId>
 +                <version>1.0</version>
 +                <configuration>
 +                    <cfgFile>${project.build.directory}/codegen/config.fmpp</cfgFile>
 +                    <templateDirectory>${project.build.directory}/codegen/templates</templateDirectory>
 +                </configuration>
 +                <executions>
 +                    <execution>
 +                        <id>generate-fmpp-sources</id>
 +                        <phase>validate</phase>
 +                        <goals>
 +                            <goal>generate</goal>
 +                        </goals>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +            <plugin>
 +                <groupId>org.codehaus.mojo</groupId>
 +                <artifactId>javacc-maven-plugin</artifactId>
 +                <executions>
 +                    <execution>
 +                        <id>javacc</id>
 +                        <goals>
 +                            <goal>javacc</goal>
 +                        </goals>
 +                        <configuration>
 +                            <sourceDirectory>${project.build.directory}/generated-sources/fmpp</sourceDirectory>
 +                            <outputDirectory>${project.build.directory}/generated-sources/javacc</outputDirectory>
 +                            <includes>
 +                                <include>**/Parser.jj</include>
 +                            </includes>
 +                            <lookAhead>2</lookAhead>
 +                            <isStatic>false</isStatic>
 +                        </configuration>
 +                    </execution>
 +                </executions>
 +            </plugin>
 +        </plugins>
 +    </build>
 +</project>
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/AbstractIndexScan.java
index 096e4ff,0000000..52365c2
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/AbstractIndexScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/AbstractIndexScan.java
@@@ -1,166 -1,0 +1,166 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.ignite.internal.processors.query.calcite.exec;
 +
 +import java.util.Iterator;
 +import java.util.NoSuchElementException;
 +import java.util.function.Function;
 +import java.util.function.Predicate;
 +import java.util.function.Supplier;
 +
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.ignite.IgniteCheckedException;
- import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
++import org.apache.ignite.internal.cache.query.index.sorted.inline.IndexQueryContext;
 +import org.apache.ignite.internal.processors.query.GridIndex;
 +import org.apache.ignite.internal.util.lang.GridCursor;
 +import org.apache.ignite.internal.util.lang.GridIteratorAdapter;
 +import org.jetbrains.annotations.NotNull;
 +
 +/**
 + * Abstract index scan.
 + */
 +public abstract class AbstractIndexScan<Row, IdxRow> implements Iterable<Row>, AutoCloseable {
 +    /** */
 +    private final GridIndex<IdxRow> idx;
 +
 +    /** Additional filters. */
 +    private final Predicate<Row> filters;
 +
 +    /** Lower index scan bound. */
 +    private final Supplier<Row> lowerBound;
 +
 +    /** Upper index scan bound. */
 +    private final Supplier<Row> upperBound;
 +
 +    /** */
 +    private final Function<Row, Row> rowTransformer;
 +
 +    /** */
 +    protected final ExecutionContext<Row> ectx;
 +
 +    /** */
 +    protected final RelDataType rowType;
 +
 +    /**
 +     * @param ectx Execution context.
 +     * @param idx Physical index.
 +     * @param filters Additional filters.
 +     * @param lowerBound Lower index scan bound.
 +     * @param upperBound Upper index scan bound.
 +     */
 +    protected AbstractIndexScan(
 +        ExecutionContext<Row> ectx,
 +        RelDataType rowType,
 +        GridIndex<IdxRow> idx,
 +        Predicate<Row> filters,
 +        Supplier<Row> lowerBound,
 +        Supplier<Row> upperBound,
 +        Function<Row, Row> rowTransformer
 +    ) {
 +        this.ectx = ectx;
 +        this.rowType = rowType;
 +        this.idx = idx;
 +        this.filters = filters;
 +        this.lowerBound = lowerBound;
 +        this.upperBound = upperBound;
 +        this.rowTransformer = rowTransformer;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public synchronized Iterator<Row> iterator() {
 +        IdxRow lower = lowerBound == null ? null : row2indexRow(lowerBound.get());
 +        IdxRow upper = upperBound == null ? null : row2indexRow(upperBound.get());
 +
-         return new IteratorImpl(idx.find(lower, upper, filterClosure()));
++        return new IteratorImpl(idx.find(lower, upper, indexQueryContext()));
 +    }
 +
 +    /** */
 +    protected abstract IdxRow row2indexRow(Row bound);
 +
 +    /** */
 +    protected abstract Row indexRow2Row(IdxRow idxRow) throws IgniteCheckedException;
 +
 +    /** */
-     protected abstract BPlusTree.TreeRowClosure<IdxRow, IdxRow> filterClosure();
++    protected abstract IndexQueryContext indexQueryContext();
 +
 +    /** {@inheritDoc} */
 +    @Override public void close() {
 +        // No-op.
 +    }
 +
 +    /** */
 +    private class IteratorImpl extends GridIteratorAdapter<Row> {
 +        /** */
 +        private final GridCursor<IdxRow> cursor;
 +
 +        /** Next element. */
 +        private Row next;
 +
 +        /** */
 +        private IteratorImpl(@NotNull GridCursor<IdxRow> cursor) {
 +            this.cursor = cursor;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public boolean hasNextX() throws IgniteCheckedException {
 +            advance();
 +
 +            return next != null;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Row nextX() throws IgniteCheckedException {
 +            advance();
 +
 +            if (next == null)
 +                throw new NoSuchElementException();
 +
 +            Row res = next;
 +
 +            next = null;
 +
 +            return res;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public void removeX() {
 +            throw new UnsupportedOperationException("Remove is not supported.");
 +        }
 +
 +        /** */
 +        private void advance() throws IgniteCheckedException {
 +            assert cursor != null;
 +
 +            if (next != null)
 +                return;
 +
 +            while (next == null && cursor.next()) {
 +                IdxRow idxRow = cursor.get();
 +
 +                Row r = indexRow2Row(idxRow);
 +
 +                if (filters != null && !filters.test(r))
 +                    continue;
 +
 +                if (rowTransformer != null)
 +                    r = rowTransformer.apply(r);
 +
 +                next = r;
 +            }
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
index 02af657,0000000..083b295
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
@@@ -1,282 -1,0 +1,283 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec;
 +
 +import java.util.ArrayList;
 +import java.util.Collection;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Objects;
 +import java.util.Set;
 +import java.util.UUID;
 +import java.util.concurrent.CompletableFuture;
 +import com.google.common.collect.ImmutableMap;
 +import org.apache.ignite.IgniteCheckedException;
 +import org.apache.ignite.IgniteException;
 +import org.apache.ignite.internal.GridKernalContext;
 +import org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.Outbox;
 +import org.apache.ignite.internal.processors.query.calcite.message.ErrorMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.InboxCloseMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.MessageService;
 +import org.apache.ignite.internal.processors.query.calcite.message.MessageType;
 +import org.apache.ignite.internal.processors.query.calcite.message.OutboxCloseMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.QueryBatchAcknowledgeMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.QueryBatchMessage;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.FragmentDescription;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 +import org.apache.ignite.internal.processors.query.calcite.util.AbstractService;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +/**
 + *
 + */
 +public class ExchangeServiceImpl extends AbstractService implements ExchangeService {
 +    /** */
 +    private QueryTaskExecutor taskExecutor;
 +
 +    /** */
 +    private MailboxRegistry mailboxRegistry;
 +
 +    /** */
 +    private MessageService msgSvc;
 +
 +    /**
 +     * @param ctx Kernal context.
 +     */
 +    public ExchangeServiceImpl(GridKernalContext ctx) {
 +        super(ctx);
 +    }
 +
 +    /**
 +     * @param taskExecutor Task executor.
 +     */
 +    public void taskExecutor(QueryTaskExecutor taskExecutor) {
 +        this.taskExecutor = taskExecutor;
 +    }
 +
 +    /**
 +     * @return Task executor.
 +     */
 +    public QueryTaskExecutor taskExecutor() {
 +        return taskExecutor;
 +    }
 +
 +    /**
 +     * @param mailboxRegistry Mailbox registry.
 +     */
 +    public void mailboxRegistry(MailboxRegistry mailboxRegistry) {
 +        this.mailboxRegistry = mailboxRegistry;
 +    }
 +
 +    /**
 +     * @return  Mailbox registry.
 +     */
 +    public MailboxRegistry mailboxRegistry() {
 +        return mailboxRegistry;
 +    }
 +
 +    /**
 +     * @param msgSvc Message service.
 +     */
 +    public void messageService(MessageService msgSvc) {
 +        this.msgSvc = msgSvc;
 +    }
 +
 +    /**
 +     * @return  Message service.
 +     */
 +    public MessageService messageService() {
 +        return msgSvc;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public <Row> void sendBatch(UUID nodeId, UUID qryId, long fragmentId, long exchangeId, int batchId,
 +        boolean last, List<Row> rows) throws IgniteCheckedException {
 +        messageService().send(nodeId, new QueryBatchMessage(qryId, fragmentId, exchangeId, batchId, last, Commons.cast(rows)));
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override public void acknowledge(UUID nodeId, UUID qryId, long fragmentId, long exchangeId, int batchId) throws IgniteCheckedException {
++    @Override public void acknowledge(UUID nodeId, UUID qryId, long fragmentId, long exchangeId, int batchId)
++        throws IgniteCheckedException {
 +        messageService().send(nodeId, new QueryBatchAcknowledgeMessage(qryId, fragmentId, exchangeId, batchId));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void closeOutbox(UUID nodeId, UUID qryId, long fragmentId, long exchangeId) throws IgniteCheckedException {
 +        messageService().send(nodeId, new OutboxCloseMessage(qryId, fragmentId, exchangeId));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void closeInbox(UUID nodeId, UUID qryId, long fragmentId, long exchangeId) throws IgniteCheckedException {
 +        messageService().send(nodeId, new InboxCloseMessage(qryId, fragmentId, exchangeId));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void sendError(UUID nodeId, UUID qryId, long fragmentId, Throwable err) throws IgniteCheckedException {
 +        messageService().send(nodeId, new ErrorMessage(qryId, fragmentId, err));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void onStart(GridKernalContext ctx) {
 +        CalciteQueryProcessor proc =
 +            Objects.requireNonNull(Commons.lookupComponent(ctx, CalciteQueryProcessor.class));
 +
 +        taskExecutor(proc.taskExecutor());
 +        mailboxRegistry(proc.mailboxRegistry());
 +        messageService(proc.messageService());
 +
 +        init();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void init() {
 +        messageService().register((n, m) -> onMessage(n, (InboxCloseMessage) m), MessageType.QUERY_INBOX_CANCEL_MESSAGE);
 +        messageService().register((n, m) -> onMessage(n, (OutboxCloseMessage) m), MessageType.QUERY_OUTBOX_CANCEL_MESSAGE);
 +        messageService().register((n, m) -> onMessage(n, (QueryBatchAcknowledgeMessage) m), MessageType.QUERY_ACKNOWLEDGE_MESSAGE);
 +        messageService().register((n, m) -> onMessage(n, (QueryBatchMessage) m), MessageType.QUERY_BATCH_MESSAGE);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public boolean alive(UUID nodeId) {
 +        return messageService().alive(nodeId);
 +    }
 +
 +    /** */
 +    protected void onMessage(UUID nodeId, InboxCloseMessage msg) {
 +        Collection<Inbox<?>> inboxes = mailboxRegistry().inboxes(msg.queryId(), msg.fragmentId(), msg.exchangeId());
 +
 +        if (!F.isEmpty(inboxes)) {
 +            for (Inbox<?> inbox : inboxes)
 +                inbox.context().execute(inbox::close, inbox::onError);
 +        }
 +        else if (log.isDebugEnabled()) {
 +            log.debug("Stale inbox cancel message received: [" +
 +                "nodeId=" + nodeId +
 +                ", queryId=" + msg.queryId() +
 +                ", fragmentId=" + msg.fragmentId() +
 +                ", exchangeId=" + msg.exchangeId() + "]");
 +        }
 +    }
 +
 +    /** */
 +    protected void onMessage(UUID nodeId, OutboxCloseMessage msg) {
 +        Collection<Outbox<?>> outboxes = mailboxRegistry().outboxes(msg.queryId(), msg.fragmentId(), msg.exchangeId());
 +
 +        if (!F.isEmpty(outboxes)) {
 +            List<CompletableFuture<?>> futs = new ArrayList<>(outboxes.size());
 +
 +            Set<ExecutionContext<?>> ctxs = new HashSet<>();
 +
 +            for (Outbox<?> outbox : outboxes) {
 +                CompletableFuture<?> fut = outbox.context().submit(outbox::close, outbox::onError);
 +
 +                futs.add(fut);
 +
 +                ctxs.add(outbox.context());
 +            }
 +
 +            CompletableFuture.allOf(futs.toArray(new CompletableFuture<?>[0])).thenRun(() -> ctxs.forEach(ExecutionContext::cancel));
 +        }
 +        else if (log.isDebugEnabled()) {
 +            log.debug("Stale oubox cancel message received: [" +
 +                "nodeId=" + nodeId +
 +                ", queryId=" + msg.queryId() +
 +                ", fragmentId=" + msg.fragmentId() +
 +                ", exchangeId=" + msg.exchangeId() + "]");
 +        }
 +    }
 +
 +    /** */
 +    protected void onMessage(UUID nodeId, QueryBatchAcknowledgeMessage msg) {
 +        Outbox<?> outbox = mailboxRegistry().outbox(msg.queryId(), msg.exchangeId());
 +
 +        if (outbox != null) {
 +            try {
 +                outbox.onAcknowledge(nodeId, msg.batchId());
 +            }
 +            catch (Throwable e) {
 +                outbox.onError(e);
 +
 +                throw new IgniteException("Unexpected exception", e);
 +            }
 +        }
 +        else if (log.isDebugEnabled()) {
 +            log.debug("Stale acknowledge message received: [" +
 +                "nodeId=" + nodeId + ", " +
 +                "queryId=" + msg.queryId() + ", " +
 +                "fragmentId=" + msg.fragmentId() + ", " +
 +                "exchangeId=" + msg.exchangeId() + ", " +
 +                "batchId=" + msg.batchId() + "]");
 +        }
 +    }
 +
 +    /** */
 +    protected void onMessage(UUID nodeId, QueryBatchMessage msg) {
 +        Inbox<?> inbox = mailboxRegistry().inbox(msg.queryId(), msg.exchangeId());
 +
 +        if (inbox == null && msg.batchId() == 0) {
 +            // first message sent before a fragment is built
 +            // note that an inbox source fragment id is also used as an exchange id
 +            Inbox<?> newInbox = new Inbox<>(baseInboxContext(nodeId, msg.queryId(), msg.fragmentId()),
 +                this, mailboxRegistry(), msg.exchangeId(), msg.exchangeId());
 +
 +            inbox = mailboxRegistry().register(newInbox);
 +        }
 +
 +        if (inbox != null) {
 +            try {
 +                inbox.onBatchReceived(nodeId, msg.batchId(), msg.last(), Commons.cast(msg.rows()));
 +            }
 +            catch (Throwable e) {
 +                inbox.onError(e);
 +
 +                throw new IgniteException("Unexpected exception", e);
 +            }
 +        }
 +        else if (log.isDebugEnabled()) {
 +            log.debug("Stale batch message received: [" +
 +                "nodeId=" + nodeId + ", " +
 +                "queryId=" + msg.queryId() + ", " +
 +                "fragmentId=" + msg.fragmentId() + ", " +
 +                "exchangeId=" + msg.exchangeId() + ", " +
 +                "batchId=" + msg.batchId() + "]");
 +        }
 +    }
 +
 +    /**
 +     * @return Minimal execution context to meet Inbox needs.
 +     */
 +    private ExecutionContext<?> baseInboxContext(UUID nodeId, UUID qryId, long fragmentId) {
 +        return new ExecutionContext<>(
 +            taskExecutor(),
 +            PlanningContext.builder()
 +                .originatingNodeId(nodeId)
 +                .logger(log)
 +                .build(),
 +            qryId,
 +            new FragmentDescription(
 +                fragmentId,
 +                null,
 +                null,
 +                null),
 +            null,
 +            ImmutableMap.of());
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
index 7420ed6,0000000..330e8c2
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
@@@ -1,1098 -1,0 +1,1099 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec;
 +
 +import java.util.ArrayList;
 +import java.util.Collection;
 +import java.util.HashSet;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Objects;
 +import java.util.Set;
 +import java.util.UUID;
 +import java.util.concurrent.ConcurrentHashMap;
 +
 +import com.google.common.collect.ImmutableList;
 +import org.apache.calcite.plan.Context;
 +import org.apache.calcite.plan.Contexts;
 +import org.apache.calcite.plan.ConventionTraitDef;
 +import org.apache.calcite.plan.RelOptUtil;
 +import org.apache.calcite.plan.RelTraitDef;
 +import org.apache.calcite.rel.RelCollationTraitDef;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.calcite.sql.SqlDdl;
 +import org.apache.calcite.sql.SqlExplain;
 +import org.apache.calcite.sql.SqlExplainLevel;
 +import org.apache.calcite.sql.SqlNode;
 +import org.apache.calcite.sql.SqlNodeList;
 +import org.apache.calcite.sql.parser.SqlParseException;
 +import org.apache.calcite.sql.type.SqlTypeName;
 +import org.apache.calcite.tools.Frameworks;
 +import org.apache.calcite.tools.ValidationException;
 +import org.apache.ignite.IgniteCheckedException;
 +import org.apache.ignite.IgniteException;
 +import org.apache.ignite.cache.query.FieldsQueryCursor;
 +import org.apache.ignite.cache.query.QueryCancelledException;
 +import org.apache.ignite.events.EventType;
 +import org.apache.ignite.internal.GridKernalContext;
 +import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 +import org.apache.ignite.internal.managers.eventstorage.DiscoveryEventListener;
 +import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
 +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 +import org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager;
 +import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
 +import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
 +import org.apache.ignite.internal.processors.failure.FailureProcessor;
 +import org.apache.ignite.internal.processors.query.GridQueryCancel;
 +import org.apache.ignite.internal.processors.query.IgniteSQLException;
 +import org.apache.ignite.internal.processors.query.QueryCancellable;
 +import org.apache.ignite.internal.processors.query.QueryContext;
 +import org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor;
 +import org.apache.ignite.internal.processors.query.calcite.exec.ddl.DdlCommandHandler;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.Node;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.Outbox;
 +import org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode;
 +import org.apache.ignite.internal.processors.query.calcite.message.ErrorMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.MessageService;
 +import org.apache.ignite.internal.processors.query.calcite.message.MessageType;
 +import org.apache.ignite.internal.processors.query.calcite.message.QueryStartRequest;
 +import org.apache.ignite.internal.processors.query.calcite.message.QueryStartResponse;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.AffinityService;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.FragmentDescription;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.FragmentMapping;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.MappingService;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.RemoteException;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.CacheKey;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.DdlPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ExplainPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.FieldsMetadata;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.FieldsMetadataImpl;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.Fragment;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.FragmentPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.MultiStepDmlPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.MultiStepPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.MultiStepQueryPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.QueryPlan;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.QueryPlanCache;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.QueryTemplate;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.Splitter;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ValidationResult;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ddl.DdlSqlToCommandConverter;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteRel;
 +import org.apache.ignite.internal.processors.query.calcite.schema.SchemaHolder;
 +import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTraitDef;
 +import org.apache.ignite.internal.processors.query.calcite.trait.DistributionTraitDef;
 +import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTraitDef;
 +import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 +import org.apache.ignite.internal.processors.query.calcite.util.AbstractService;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.processors.query.calcite.util.ListFieldsQueryCursor;
 +import org.apache.ignite.internal.processors.query.calcite.util.TypeUtils;
 +import org.apache.ignite.internal.processors.query.h2.H2Utils;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.apache.ignite.internal.util.typedef.T2;
 +import org.apache.ignite.internal.util.typedef.X;
 +import org.apache.ignite.internal.util.typedef.internal.U;
 +import org.jetbrains.annotations.NotNull;
 +import org.jetbrains.annotations.Nullable;
 +
 +import static java.util.Collections.singletonList;
 +import static org.apache.calcite.rel.type.RelDataType.PRECISION_NOT_SPECIFIED;
 +import static org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.FRAMEWORK_CONFIG;
 +import static org.apache.ignite.internal.processors.query.calcite.exec.PlannerHelper.optimize;
 +import static org.apache.ignite.internal.processors.query.calcite.externalize.RelJsonReader.fromJson;
 +
 +/**
 + *
 + */
 +@SuppressWarnings("TypeMayBeWeakened")
 +public class ExecutionServiceImpl<Row> extends AbstractService implements ExecutionService {
 +    /** */
 +    private final DiscoveryEventListener discoLsnr;
 +
 +    /** */
 +    private UUID locNodeId;
 +
 +    /** */
 +    private GridEventStorageManager evtMgr;
 +
 +    /** */
-     private GridCachePartitionExchangeManager<?,?> exchangeMgr;
++    private GridCachePartitionExchangeManager<?, ?> exchangeMgr;
 +
 +    /** */
 +    private QueryPlanCache qryPlanCache;
 +
 +    /** */
 +    private SchemaHolder schemaHolder;
 +
 +    /** */
 +    private QueryTaskExecutor taskExecutor;
 +
 +    /** */
 +    private FailureProcessor failureProcessor;
 +
 +    /** */
 +    private AffinityService partSvc;
 +
 +    /** */
 +    private MailboxRegistry mailboxRegistry;
 +
 +    /** */
 +    private MappingService mappingSvc;
 +
 +    /** */
 +    private MessageService msgSvc;
 +
 +    /** */
 +    private ExchangeService exchangeSvc;
 +
 +    /** */
 +    private ClosableIteratorsHolder iteratorsHolder;
 +
 +    /** */
 +    private final Map<UUID, QueryInfo> running;
 +
 +    /** */
 +    private final RowHandler<Row> handler;
 +
 +    /** */
 +    private final DdlCommandHandler ddlCmdHnd;
 +
 +    /** */
 +    private final DdlSqlToCommandConverter ddlConverter;
 +
 +    /**
 +     * @param ctx Kernal.
 +     */
 +    public ExecutionServiceImpl(GridKernalContext ctx, RowHandler<Row> handler) {
 +        super(ctx);
 +        this.handler = handler;
 +
 +        discoLsnr = (e, c) -> onNodeLeft(e.eventNode().id());
 +        running = new ConcurrentHashMap<>();
 +        ddlConverter = new DdlSqlToCommandConverter();
 +
 +        ddlCmdHnd = new DdlCommandHandler(
 +            ctx::query, ctx.cache(), ctx.security(), () -> schemaHolder().schema()
 +        );
 +    }
 +
 +    /**
 +     * @param locNodeId Local node ID.
 +     */
 +    public void localNodeId(UUID locNodeId) {
 +        this.locNodeId = locNodeId;
 +    }
 +
 +    /**
 +     * @return Local node ID.
 +     */
 +    public UUID localNodeId() {
 +        return locNodeId;
 +    }
 +
 +    /**
 +     * @param qryPlanCache Query cache.
 +     */
 +    public void queryPlanCache(QueryPlanCache qryPlanCache) {
 +        this.qryPlanCache = qryPlanCache;
 +    }
 +
 +    /**
 +     * @return Query cache.
 +     */
 +    public QueryPlanCache queryPlanCache() {
 +        return qryPlanCache;
 +    }
 +
 +    /**
 +     * @param schemaHolder Schema holder.
 +     */
 +    public void schemaHolder(SchemaHolder schemaHolder) {
 +        this.schemaHolder = schemaHolder;
 +    }
 +
 +    /**
 +     * @return Schema holder.
 +     */
 +    public SchemaHolder schemaHolder() {
 +        return schemaHolder;
 +    }
 +
 +    /**
 +     * @param taskExecutor Task executor.
 +     */
 +    public void taskExecutor(QueryTaskExecutor taskExecutor) {
 +        this.taskExecutor = taskExecutor;
 +    }
 +
 +    /**
 +     * @return Task executor.
 +     */
 +    public QueryTaskExecutor taskExecutor() {
 +        return taskExecutor;
 +    }
 +
 +    /**
 +     * @param failureProcessor Failure processor.
 +     */
 +    public void failureProcessor(FailureProcessor failureProcessor) {
 +        this.failureProcessor = failureProcessor;
 +    }
 +
 +    /**
 +     * @return Failure processor.
 +     */
 +    public FailureProcessor failureProcessor() {
 +        return failureProcessor;
 +    }
 +
 +    /**
 +     * @param partSvc Partition service.
 +     */
 +    public void partitionService(AffinityService partSvc) {
 +        this.partSvc = partSvc;
 +    }
 +
 +    /**
 +     * @return Partition service.
 +     */
 +    public AffinityService partitionService() {
 +        return partSvc;
 +    }
 +
 +    /**
 +     * @param mailboxRegistry Mailbox registry.
 +     */
 +    public void mailboxRegistry(MailboxRegistry mailboxRegistry) {
 +        this.mailboxRegistry = mailboxRegistry;
 +    }
 +
 +    /**
 +     * @return Mailbox registry.
 +     */
 +    public MailboxRegistry mailboxRegistry() {
 +        return mailboxRegistry;
 +    }
 +
 +    /**
 +     * @param mappingSvc Mapping service.
 +     */
 +    public void mappingService(MappingService mappingSvc) {
 +        this.mappingSvc = mappingSvc;
 +    }
 +
 +    /**
 +     * @return Mapping service.
 +     */
 +    public MappingService mappingService() {
 +        return mappingSvc;
 +    }
 +
 +    /**
 +     * @param msgSvc Message service.
 +     */
 +    public void messageService(MessageService msgSvc) {
 +        this.msgSvc = msgSvc;
 +    }
 +
 +    /**
 +     * @return Message service.
 +     */
 +    public MessageService messageService() {
 +        return msgSvc;
 +    }
 +
 +    /**
 +     * @param exchangeSvc Exchange service.
 +     */
 +    public void exchangeService(ExchangeService exchangeSvc) {
 +        this.exchangeSvc = exchangeSvc;
 +    }
 +
 +    /**
 +     * @return Exchange service.
 +     */
 +    public ExchangeService exchangeService() {
 +        return exchangeSvc;
 +    }
 +
 +    /**
 +     * @param evtMgr Event manager.
 +     */
 +    public void eventManager(GridEventStorageManager evtMgr) {
 +        this.evtMgr = evtMgr;
 +    }
 +
 +    /**
 +     * @return Event manager.
 +     */
 +    public GridEventStorageManager eventManager() {
 +        return evtMgr;
 +    }
 +
 +    /**
 +     * @param exchangeMgr Exchange manager.
 +     */
-     public void exchangeManager(GridCachePartitionExchangeManager<?,?> exchangeMgr) {
++    public void exchangeManager(GridCachePartitionExchangeManager<?, ?> exchangeMgr) {
 +        this.exchangeMgr = exchangeMgr;
 +    }
 +
 +    /**
 +     * @return Exchange manager.
 +     */
 +    public GridCachePartitionExchangeManager<?, ?> exchangeManager() {
 +        return exchangeMgr;
 +    }
 +
 +    /**
 +     * @param iteratorsHolder Iterators holder.
 +     */
 +    public void iteratorsHolder(ClosableIteratorsHolder iteratorsHolder) {
 +        this.iteratorsHolder = iteratorsHolder;
 +    }
 +
 +    /**
 +     * @return Iterators holder.
 +     */
 +    public ClosableIteratorsHolder iteratorsHolder() {
 +        return iteratorsHolder;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<FieldsQueryCursor<List<?>>> executeQuery(
 +        @Nullable QueryContext ctx,
 +        String schema,
 +        String qry,
 +        Object[] params
 +    ) {
 +        PlanningContext pctx = createContext(Commons.convert(ctx), topologyVersion(), localNodeId(), schema, qry, params);
 +
 +        List<QueryPlan> qryPlans = queryPlanCache().queryPlan(pctx, new CacheKey(pctx.schemaName(), pctx.query()), this::prepareQuery);
 +
 +        return executePlans(qryPlans, pctx);
 +    }
 +
 +    /**
 +     * Executes prepared plans.
 +     * @param qryPlans Query plans.
 +     * @param pctx Query context.
 +     * @return List of query result cursors.
 +     */
 +    @NotNull public List<FieldsQueryCursor<List<?>>> executePlans(
 +        Collection<QueryPlan> qryPlans,
 +        PlanningContext pctx
 +    ) {
 +        List<FieldsQueryCursor<List<?>>> cursors = new ArrayList<>(qryPlans.size());
 +
 +        for (QueryPlan plan : qryPlans) {
 +            UUID qryId = UUID.randomUUID();
 +
 +            FieldsQueryCursor<List<?>> cur = executePlan(qryId, pctx, plan);
 +
 +            cursors.add(cur);
 +        }
 +
 +        return cursors;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void cancelQuery(UUID qryId) {
 +        QueryInfo info = running.get(qryId);
 +
 +        if (info != null)
 +            info.doCancel();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void onStart(GridKernalContext ctx) {
 +        localNodeId(ctx.localNodeId());
 +        exchangeManager(ctx.cache().context().exchange());
 +        eventManager(ctx.event());
 +        iteratorsHolder(new ClosableIteratorsHolder(log));
 +
 +        CalciteQueryProcessor proc = Objects.requireNonNull(
 +            Commons.lookupComponent(ctx, CalciteQueryProcessor.class));
 +
 +        queryPlanCache(proc.queryPlanCache());
 +        schemaHolder(proc.schemaHolder());
 +        taskExecutor(proc.taskExecutor());
 +        failureProcessor(proc.failureProcessor());
 +        partitionService(proc.affinityService());
 +        mailboxRegistry(proc.mailboxRegistry());
 +        mappingService(proc.mappingService());
 +        messageService(proc.messageService());
 +        exchangeService(proc.exchangeService());
 +
 +        init();
 +     }
 +
 +    /** {@inheritDoc} */
 +    @Override public void init() {
-         messageService().register((n,m) -> onMessage(n, (QueryStartRequest) m), MessageType.QUERY_START_REQUEST);
-         messageService().register((n,m) -> onMessage(n, (QueryStartResponse) m), MessageType.QUERY_START_RESPONSE);
-         messageService().register((n,m) -> onMessage(n, (ErrorMessage) m), MessageType.QUERY_ERROR_MESSAGE);
++        messageService().register((n, m) -> onMessage(n, (QueryStartRequest) m), MessageType.QUERY_START_REQUEST);
++        messageService().register((n, m) -> onMessage(n, (QueryStartResponse) m), MessageType.QUERY_START_RESPONSE);
++        messageService().register((n, m) -> onMessage(n, (ErrorMessage) m), MessageType.QUERY_ERROR_MESSAGE);
 +
 +        eventManager().addDiscoveryEventListener(discoLsnr, EventType.EVT_NODE_FAILED, EventType.EVT_NODE_LEFT);
 +
 +        iteratorsHolder().init();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void tearDown() {
 +        eventManager().removeDiscoveryEventListener(discoLsnr, EventType.EVT_NODE_FAILED, EventType.EVT_NODE_LEFT);
 +
 +        running.clear();
 +
 +        iteratorsHolder().tearDown();
 +    }
 +
 +    /** */
 +    protected AffinityTopologyVersion topologyVersion() {
 +        return exchangeManager().readyAffinityVersion();
 +    }
 +
 +    /** */
 +    private PlanningContext createContext(Context parent, AffinityTopologyVersion topVer, UUID originator,
 +        @Nullable String schema, String qry, Object[] params) {
 +        RelTraitDef<?>[] traitDefs = {
 +            ConventionTraitDef.INSTANCE,
 +            RelCollationTraitDef.INSTANCE,
 +            DistributionTraitDef.INSTANCE,
 +            RewindabilityTraitDef.INSTANCE,
 +            CorrelationTraitDef.INSTANCE,
 +        };
 +
 +        return PlanningContext.builder()
 +            .localNodeId(localNodeId())
 +            .originatingNodeId(originator)
 +            .parentContext(parent)
 +            .frameworkConfig(Frameworks.newConfigBuilder(FRAMEWORK_CONFIG)
 +                .defaultSchema(schema != null
 +                    ? schemaHolder().schema().getSubSchema(schema)
 +                    : schemaHolder().schema())
 +                .traitDefs(traitDefs)
 +                .build())
 +            .query(qry)
 +            .parameters(params)
 +            .topologyVersion(topVer)
 +            .logger(log)
 +            .build();
 +    }
 +
 +    /** */
 +    private List<QueryPlan> prepareQuery(PlanningContext ctx) {
 +        try {
 +            String qry = ctx.query();
 +
 +            assert qry != null;
 +
 +            // Parse query.
 +            SqlNode sqlNode = ctx.planner().parse(qry);
 +
 +            if (single(sqlNode))
 +                return singletonList(prepareSingle(sqlNode, ctx));
 +
 +            List<SqlNode> nodes = ((SqlNodeList) sqlNode).getList();
 +            List<QueryPlan> res = new ArrayList<>(nodes.size());
 +
 +            for (SqlNode node : nodes)
 +                res.add(prepareSingle(node, ctx));
 +
 +            return res;
 +        }
 +        catch (IgniteSQLException e) {
 +            throw e;
 +        }
 +        catch (SqlParseException e) {
 +            throw new IgniteSQLException("Failed to parse query.", IgniteQueryErrorCode.PARSING, e);
 +        }
 +        catch (ValidationException e) {
 +            throw new IgniteSQLException("Failed to validate query.", IgniteQueryErrorCode.PARSING, e);
 +        }
 +        catch (Exception e) {
 +            throw new IgniteSQLException("Failed to plan query.", IgniteQueryErrorCode.UNKNOWN, e);
 +        }
 +    }
 +
 +    /** */
 +    private List<QueryPlan> prepareFragment(PlanningContext ctx) {
 +        return ImmutableList.of(new FragmentPlan(fromJson(ctx, ctx.query())));
 +    }
 +
 +    /** */
 +    private QueryPlan prepareSingle(SqlNode sqlNode, PlanningContext ctx) throws ValidationException {
 +        assert single(sqlNode);
 +
 +        ctx.planner().reset();
 +
 +        switch (sqlNode.getKind()) {
 +            case SELECT:
 +            case ORDER_BY:
 +            case WITH:
 +            case VALUES:
 +            case UNION:
 +            case EXCEPT:
 +                return prepareQuery(sqlNode, ctx);
 +
 +            case INSERT:
 +            case DELETE:
 +            case UPDATE:
 +                return prepareDml(sqlNode, ctx);
 +
 +            case EXPLAIN:
 +                return prepareExplain(sqlNode, ctx);
 +
 +            case CREATE_TABLE:
 +            case DROP_TABLE:
 +                return prepareDdl(sqlNode, ctx);
 +
 +            default:
 +                throw new IgniteSQLException("Unsupported operation [" +
 +                    "sqlNodeKind=" + sqlNode.getKind() + "; " +
 +                    "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
 +        }
 +    }
 +
 +    /** */
 +    private QueryPlan prepareQuery(SqlNode sqlNode, PlanningContext ctx) {
 +        IgnitePlanner planner = ctx.planner();
 +
 +        // Validate
 +        ValidationResult validated = planner.validateAndGetTypeMetadata(sqlNode);
 +
 +        sqlNode = validated.sqlNode();
 +
 +        IgniteRel igniteRel = optimize(sqlNode, planner, log);
 +
 +        // Split query plan to query fragments.
 +        List<Fragment> fragments = new Splitter().go(igniteRel);
 +
 +        QueryTemplate template = new QueryTemplate(mappingSvc, fragments);
 +
 +        return new MultiStepQueryPlan(template, queryFieldsMetadata(ctx, validated.dataType(), validated.origins()));
 +    }
 +
 +    /** */
 +    private QueryPlan prepareDml(SqlNode sqlNode, PlanningContext ctx) throws ValidationException {
 +        IgnitePlanner planner = ctx.planner();
 +
 +        // Validate
 +        sqlNode = planner.validate(sqlNode);
 +
 +        // Convert to Relational operators graph
 +        IgniteRel igniteRel = optimize(sqlNode, planner, log);
 +
 +        // Split query plan to query fragments.
 +        List<Fragment> fragments = new Splitter().go(igniteRel);
 +
 +        QueryTemplate template = new QueryTemplate(mappingSvc, fragments);
 +
 +        return new MultiStepDmlPlan(template, queryFieldsMetadata(ctx, igniteRel.getRowType(), null));
 +    }
 +
 +    /** */
 +    private QueryPlan prepareDdl(SqlNode sqlNode, PlanningContext ctx) {
 +        assert sqlNode instanceof SqlDdl : sqlNode == null ? "null" : sqlNode.getClass().getName();
 +
 +        SqlDdl ddlNode = (SqlDdl)sqlNode;
 +
 +        return new DdlPlan(ddlConverter.convert(ddlNode, ctx));
 +    }
 +
 +    /** */
 +    private QueryPlan prepareExplain(SqlNode explain, PlanningContext ctx) throws ValidationException {
 +        IgnitePlanner planner = ctx.planner();
 +
 +        SqlNode sql = ((SqlExplain)explain).getExplicandum();
 +
 +        // Validate
 +        sql = planner.validate(sql);
 +
 +        // Convert to Relational operators graph
 +        IgniteRel igniteRel = optimize(sql, planner, log);
 +
 +        String plan = RelOptUtil.toString(igniteRel, SqlExplainLevel.ALL_ATTRIBUTES);
 +
 +        return new ExplainPlan(plan, explainFieldsMetadata(ctx));
 +    }
 +
 +    /** */
 +    private FieldsMetadata explainFieldsMetadata(PlanningContext ctx) {
 +        IgniteTypeFactory factory = ctx.typeFactory();
 +        RelDataType planStrDataType =
 +            factory.createSqlType(SqlTypeName.VARCHAR, PRECISION_NOT_SPECIFIED);
 +        T2<String, RelDataType> planField = new T2<>(ExplainPlan.PLAN_COL_NAME, planStrDataType);
 +        RelDataType planDataType = factory.createStructType(singletonList(planField));
 +
 +        return queryFieldsMetadata(ctx, planDataType, null);
 +    }
 +
 +    /** */
 +    private FieldsQueryCursor<List<?>> executePlan(UUID qryId, PlanningContext pctx, QueryPlan plan) {
 +        switch (plan.type()) {
 +            case DML:
 +                // TODO a barrier between previous operation and this one
 +            case QUERY:
 +                return executeQuery(qryId, (MultiStepPlan) plan, pctx);
 +            case EXPLAIN:
 +                return executeExplain((ExplainPlan)plan, pctx);
 +            case DDL:
 +                return executeDdl((DdlPlan)plan, pctx);
 +
 +            default:
 +                throw new AssertionError("Unexpected plan type: " + plan);
 +        }
 +    }
 +
 +    /** */
 +    private FieldsQueryCursor<List<?>> executeDdl(DdlPlan plan, PlanningContext pctx) {
 +        try {
 +            ddlCmdHnd.handle(pctx, plan.command());
 +        }
 +        catch (IgniteCheckedException e) {
 +            throw new IgniteSQLException("Failed to execute DDL statement [stmt=" + pctx.query() +
 +                ", err=" + e.getMessage() + ']', e);
 +        }
 +
 +        return H2Utils.zeroCursor();
 +    }
 +
 +    /** */
 +    private FieldsQueryCursor<List<?>> executeQuery(UUID qryId, MultiStepPlan plan, PlanningContext pctx) {
 +        plan.init(pctx);
 +
 +        List<Fragment> fragments = plan.fragments();
 +
 +        // Local execution
 +        Fragment fragment = F.first(fragments);
 +
 +        if (U.assertionsEnabled()) {
 +            assert fragment != null;
 +
 +            FragmentMapping mapping = plan.mapping(fragment);
 +
 +            assert mapping != null;
 +
 +            List<UUID> nodes = mapping.nodeIds();
 +
 +            assert nodes != null && nodes.size() == 1 && F.first(nodes).equals(pctx.localNodeId());
 +        }
 +
 +        FragmentDescription fragmentDesc = new FragmentDescription(
 +            fragment.fragmentId(),
 +            plan.mapping(fragment),
 +            plan.target(fragment),
 +            plan.remotes(fragment));
 +
 +        ExecutionContext<Row> ectx = new ExecutionContext<>(
 +            taskExecutor(),
 +            pctx,
 +            qryId,
 +            fragmentDesc,
 +            handler,
 +            Commons.parametersMap(pctx.parameters()));
 +
 +        Node<Row> node = new LogicalRelImplementor<>(ectx, partitionService(), mailboxRegistry(),
 +            exchangeService(), failureProcessor()).go(fragment.root());
 +
 +        QueryInfo info = new QueryInfo(ectx, plan, node);
 +
 +        // register query
 +        register(info);
 +
 +        // start remote execution
 +        for (int i = 1; i < fragments.size(); i++) {
 +            fragment = fragments.get(i);
 +            fragmentDesc = new FragmentDescription(
 +                fragment.fragmentId(),
 +                plan.mapping(fragment),
 +                plan.target(fragment),
 +                plan.remotes(fragment));
 +
 +            Throwable ex = null;
 +            for (UUID nodeId : fragmentDesc.nodeIds()) {
 +                if (ex != null)
 +                    info.onResponse(nodeId, fragment.fragmentId(), ex);
 +                else {
 +                    try {
 +                        QueryStartRequest req = new QueryStartRequest(
 +                            qryId,
 +                            pctx.schemaName(),
 +                            fragment.serialized(),
 +                            pctx.topologyVersion(),
 +                            fragmentDesc,
 +                            pctx.parameters());
 +
 +                        messageService().send(nodeId, req);
 +                    }
 +                    catch (Throwable e) {
 +                        info.onResponse(nodeId, fragment.fragmentId(), ex = e);
 +                    }
 +                }
 +            }
 +        }
 +
 +        return new ListFieldsQueryCursor<>(plan, info.iterator(), ectx);
 +    }
 +
 +    /** */
 +    private FieldsQueryCursor<List<?>> executeExplain(ExplainPlan plan, PlanningContext pctx) {
 +        QueryCursorImpl<List<?>> cur = new QueryCursorImpl<>(singletonList(singletonList(plan.plan())));
 +        cur.fieldsMeta(plan.fieldsMeta().queryFieldsMetadata(pctx.typeFactory()));
 +
 +        return cur;
 +    }
 +
 +    /** */
 +    private void executeFragment(UUID qryId, FragmentPlan plan, PlanningContext pctx, FragmentDescription fragmentDesc) {
 +        ExecutionContext<Row> ectx = new ExecutionContext<>(taskExecutor(), pctx, qryId,
 +            fragmentDesc, handler, Commons.parametersMap(pctx.parameters()));
 +
 +        long frId = fragmentDesc.fragmentId();
 +        UUID origNodeId = pctx.originatingNodeId();
 +
 +        Outbox<Row> node = new LogicalRelImplementor<>(
 +                ectx,
 +                partitionService(),
 +                mailboxRegistry(),
 +                exchangeService(),
 +                failureProcessor())
 +                .go(plan.root());
 +
 +        try {
 +            messageService().send(origNodeId, new QueryStartResponse(qryId, frId));
 +        }
 +        catch (IgniteCheckedException e) {
 +            IgniteException wrpEx = new IgniteException("Failed to send reply. [nodeId=" + origNodeId + ']', e);
 +
 +            throw wrpEx;
 +        }
 +
 +        node.init();
 +    }
 +
 +    /** */
 +    private void register(QueryInfo info) {
 +        UUID qryId = info.ctx.queryId();
 +        PlanningContext pctx = info.ctx.planningContext();
 +
 +        running.put(qryId, info);
 +
 +        GridQueryCancel qryCancel = pctx.queryCancel();
 +
 +        if (qryCancel == null)
 +            return;
 +
 +        try {
 +            qryCancel.add(info);
 +        }
 +        catch (QueryCancelledException e) {
 +            running.remove(qryId);
 +
 +            throw new IgniteSQLException(e.getMessage(), IgniteQueryErrorCode.QUERY_CANCELED);
 +        }
 +    }
 +
 +    /** */
 +    private FieldsMetadata queryFieldsMetadata(PlanningContext ctx, RelDataType sqlType,
 +        @Nullable List<List<String>> origins) {
 +        RelDataType resultType = TypeUtils.getResultType(
 +            ctx.typeFactory(), ctx.catalogReader(), sqlType, origins);
 +        return new FieldsMetadataImpl(resultType, origins);
 +    }
 +
 +    /** */
 +    private boolean single(SqlNode sqlNode) {
 +        return !(sqlNode instanceof SqlNodeList);
 +    }
 +
 +    /** */
 +    private void onMessage(UUID nodeId, QueryStartRequest msg) {
 +        assert nodeId != null && msg != null;
 +
 +        try {
-             PlanningContext pctx = createContext(Contexts.empty(), msg.topologyVersion(), nodeId, msg.schema(), msg.root(), msg.parameters());
++            PlanningContext pctx = createContext(Contexts.empty(), msg.topologyVersion(), nodeId, msg.schema(),
++                msg.root(), msg.parameters());
 +
 +            List<QueryPlan> qryPlans = queryPlanCache().queryPlan(
 +                pctx,
 +                new CacheKey(pctx.schemaName(), pctx.query()),
 +                this::prepareFragment
 +            );
 +
 +            assert qryPlans.size() == 1 && qryPlans.get(0).type() == QueryPlan.Type.FRAGMENT;
 +
 +            FragmentPlan plan = (FragmentPlan)qryPlans.get(0);
 +
 +            executeFragment(msg.queryId(), plan, pctx, msg.fragmentDescription());
 +        }
 +        catch (Throwable ex) {
 +            U.error(log, "Failed to start query fragment ", ex);
 +
 +            mailboxRegistry.outboxes(msg.queryId(), msg.fragmentId(), -1)
 +                .forEach(Outbox::close);
 +            mailboxRegistry.inboxes(msg.queryId(), msg.fragmentId(), -1)
 +                .forEach(Inbox::close);
 +
 +            try {
 +                messageService().send(nodeId, new QueryStartResponse(msg.queryId(), msg.fragmentId(), ex));
 +            }
 +            catch (IgniteCheckedException e) {
 +                U.error(log, "Error occurred during send error message: " + X.getFullStackTrace(e));
 +
 +                IgniteException wrpEx = new IgniteException("Error occurred during send error message", e);
 +
 +                e.addSuppressed(ex);
 +
 +                throw wrpEx;
 +            }
 +
 +            throw ex;
 +        }
 +    }
 +
 +    /** */
 +    private void onMessage(UUID nodeId, QueryStartResponse msg) {
 +        assert nodeId != null && msg != null;
 +
 +        QueryInfo info = running.get(msg.queryId());
 +
 +        if (info != null)
 +            info.onResponse(nodeId, msg.fragmentId(), msg.error());
 +    }
 +
 +    /** */
 +    private void onMessage(UUID nodeId, ErrorMessage msg) {
 +        assert nodeId != null && msg != null;
 +
 +        QueryInfo info = running.get(msg.queryId());
 +
 +        if (info != null)
 +            info.onError(new RemoteException(nodeId, msg.queryId(), msg.fragmentId(), msg.error()));
 +    }
 +
 +    /** */
 +    private void onNodeLeft(UUID nodeId) {
 +        running.forEach((uuid, queryInfo) -> queryInfo.onNodeLeft(nodeId));
 +    }
 +
 +    /** */
 +    private enum QueryState {
 +        /** */
 +        RUNNING,
 +
 +        /** */
 +        CLOSING,
 +
 +        /** */
 +        CLOSED
 +    }
 +
 +    /** */
 +    private static final class RemoteFragmentKey {
 +        /** */
 +        private final UUID nodeId;
 +
 +        /** */
 +        private final long fragmentId;
 +
 +        /** */
 +        private RemoteFragmentKey(UUID nodeId, long fragmentId) {
 +            this.nodeId = nodeId;
 +            this.fragmentId = fragmentId;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public boolean equals(Object o) {
 +            if (this == o)
 +                return true;
 +            if (o == null || getClass() != o.getClass())
 +                return false;
 +
 +            RemoteFragmentKey that = (RemoteFragmentKey) o;
 +
 +            if (fragmentId != that.fragmentId)
 +                return false;
 +            return nodeId.equals(that.nodeId);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public int hashCode() {
 +            int res = nodeId.hashCode();
 +            res = 31 * res + (int) (fragmentId ^ (fragmentId >>> 32));
 +            return res;
 +        }
 +    }
 +
 +    /** */
 +    @SuppressWarnings("TypeMayBeWeakened")
 +    private final class QueryInfo implements QueryCancellable {
 +        /** */
 +        private final ExecutionContext<Row> ctx;
 +
 +        /** */
 +        private final RootNode<Row> root;
 +
 +        /** remote nodes */
 +        private final Set<UUID> remotes;
 +
 +        /** node to fragment */
 +        private final Set<RemoteFragmentKey> waiting;
 +
 +        /** */
 +        private volatile QueryState state;
 +
 +        /** */
 +        private QueryInfo(ExecutionContext<Row> ctx, MultiStepPlan plan, Node<Row> root) {
 +            this.ctx = ctx;
 +
 +            RootNode<Row> rootNode = new RootNode<>(ctx, plan.fieldsMetadata().rowType(), this::tryClose);
 +            rootNode.register(root);
 +
 +            this.root = rootNode;
 +
 +            remotes = new HashSet<>();
 +            waiting = new HashSet<>();
 +
 +            for (int i = 1; i < plan.fragments().size(); i++) {
 +                Fragment fragment = plan.fragments().get(i);
 +                List<UUID> nodes = plan.mapping(fragment).nodeIds();
 +
 +                remotes.addAll(nodes);
 +
 +                for (UUID node : nodes)
 +                    waiting.add(new RemoteFragmentKey(node, fragment.fragmentId()));
 +            }
 +
 +            state = QueryState.RUNNING;
 +        }
 +
 +        /** */
 +        public Iterator<Row> iterator() {
 +            return iteratorsHolder().iterator(root);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public void doCancel() {
 +            root.close();
 +        }
 +
 +        /**
 +         * Can be called multiple times after receive each error at {@link #onResponse(RemoteFragmentKey, Throwable)}.
 +         */
 +        private void tryClose() {
 +            QueryState state0 = null;
 +
 +            synchronized (this) {
 +                if (state == QueryState.CLOSED)
 +                    return;
 +
 +                if (state == QueryState.RUNNING)
 +                    state0 = state = QueryState.CLOSING;
 +
 +                // 1) close local fragment
 +                root.closeInternal();
 +
 +                if (state == QueryState.CLOSING && waiting.isEmpty())
 +                    state0 = state = QueryState.CLOSED;
 +            }
 +
 +            if (state0 == QueryState.CLOSED) {
 +                // 2) unregister runing query
 +                running.remove(ctx.queryId());
 +
 +                // 4) close remote fragments
 +                IgniteException wrpEx = null;
 +
 +                // 3) close remote fragments
 +                for (UUID nodeId : remotes) {
 +                    try {
 +                        exchangeService().closeOutbox(nodeId, ctx.queryId(), -1, -1);
 +                    }
 +                    catch (IgniteCheckedException e) {
 +                        if (wrpEx == null)
 +                            wrpEx = new IgniteException("Failed to send cancel message. [nodeId=" + nodeId + ']', e);
 +                        else
 +                            wrpEx.addSuppressed(e);
 +                    }
 +                }
 +
 +                // 4) Cancel local fragment
 +                ctx.cancel();
 +
 +                if (wrpEx != null)
 +                    throw wrpEx;
 +            }
 +        }
 +
 +        /** */
 +        private void onNodeLeft(UUID nodeId) {
 +            List<RemoteFragmentKey> fragments = null;
 +
 +            synchronized (this) {
 +                for (RemoteFragmentKey fragment : waiting) {
 +                    if (!fragment.nodeId.equals(nodeId))
 +                        continue;
 +
 +                    if (fragments == null)
 +                        fragments = new ArrayList<>();
 +
 +                    fragments.add(fragment);
 +                }
 +            }
 +
 +            if (!F.isEmpty(fragments)) {
 +                ClusterTopologyCheckedException ex = new ClusterTopologyCheckedException(
 +                    "Failed to start query, node left. nodeId=" + nodeId);
 +
 +                for (RemoteFragmentKey fragment : fragments)
 +                    onResponse(fragment, ex);
 +            }
 +        }
 +
 +        /** */
 +        private void onResponse(UUID nodeId, long fragmentId, Throwable error) {
 +            onResponse(new RemoteFragmentKey(nodeId, fragmentId), error);
 +        }
 +
 +        /** */
 +        private void onResponse(RemoteFragmentKey fragment, Throwable error) {
 +            QueryState state;
 +            synchronized (this) {
 +                waiting.remove(fragment);
 +                state = this.state;
 +            }
 +
 +            if (error != null)
 +                onError(error);
 +            else if (state == QueryState.CLOSING)
 +                tryClose();
 +        }
 +
 +        /** */
 +        private void onError(Throwable error) {
 +            root.onError(error);
 +
 +            tryClose();
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
index b9d3c9d,0000000..cca3cba
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
@@@ -1,273 -1,0 +1,265 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.ignite.internal.processors.query.calcite.exec;
 +
 +import java.util.ArrayList;
 +import java.util.Collections;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.function.Function;
 +import java.util.function.Predicate;
 +import java.util.function.Supplier;
- 
 +import org.apache.calcite.util.ImmutableBitSet;
 +import org.apache.ignite.IgniteCheckedException;
 +import org.apache.ignite.IgniteException;
 +import org.apache.ignite.cluster.ClusterTopologyException;
 +import org.apache.ignite.internal.GridKernalContext;
++import org.apache.ignite.internal.cache.query.index.sorted.inline.IndexQueryContext;
 +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 +import org.apache.ignite.internal.processors.cache.CacheObjectContext;
 +import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
 +import org.apache.ignite.internal.processors.cache.GridCacheContext;
 +import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
 +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition;
 +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
 +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology;
 +import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 +import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 +import org.apache.ignite.internal.processors.query.GridIndex;
 +import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler.RowFactory;
 +import org.apache.ignite.internal.processors.query.calcite.schema.TableDescriptor;
 +import org.apache.ignite.internal.processors.query.h2.H2Utils;
- import org.apache.ignite.internal.processors.query.h2.database.H2TreeFilterClosure;
 +import org.apache.ignite.internal.processors.query.h2.opt.H2PlainRow;
 +import org.apache.ignite.internal.processors.query.h2.opt.H2Row;
- import org.apache.ignite.spi.indexing.IndexingQueryCacheFilter;
 +import org.apache.ignite.spi.indexing.IndexingQueryFilter;
 +import org.apache.ignite.spi.indexing.IndexingQueryFilterImpl;
 +import org.h2.value.DataType;
 +import org.h2.value.Value;
 +import org.jetbrains.annotations.Nullable;
 +
 +/**
 + * Scan on index.
 + */
 +public class IndexScan<Row> extends AbstractIndexScan<Row, H2Row> {
 +    /** */
 +    private final GridKernalContext kctx;
 +
 +    /** */
 +    private final GridCacheContext<?, ?> cctx;
 +
 +    /** */
 +    private final CacheObjectContext coCtx;
 +
 +    /** */
 +    private final TableDescriptor desc;
 +
 +    /** */
 +    private final RowFactory<Row> factory;
 +
 +    /** */
 +    private final AffinityTopologyVersion topVer;
 +
 +    /** */
 +    private final int[] parts;
 +
 +    /** */
 +    private final MvccSnapshot mvccSnapshot;
 +
 +    /** */
 +    private volatile List<GridDhtLocalPartition> reserved;
 +
 +    /** */
 +    private final ImmutableBitSet requiredColumns;
 +
 +    /**
 +     * @param ectx Execution context.
 +     * @param desc Table descriptor.
 +     * @param idx Phisycal index.
 +     * @param filters Additional filters.
 +     * @param lowerBound Lower index scan bound.
 +     * @param upperBound Upper index scan bound.
 +     */
 +    public IndexScan(
 +        ExecutionContext<Row> ectx,
 +        TableDescriptor desc,
 +        GridIndex<H2Row> idx,
 +        int[] parts,
 +        Predicate<Row> filters,
 +        Supplier<Row> lowerBound,
 +        Supplier<Row> upperBound,
 +        Function<Row, Row> rowTransformer,
 +        @Nullable ImmutableBitSet requiredColumns
 +    ) {
 +        super(
 +            ectx,
 +            desc.rowType(ectx.getTypeFactory(), requiredColumns),
 +            idx,
 +            filters,
 +            lowerBound,
 +            upperBound,
 +            rowTransformer
 +        );
 +
 +        this.desc = desc;
 +        cctx = desc.cacheContext();
 +        kctx = cctx.kernalContext();
 +        coCtx = cctx.cacheObjectContext();
 +
 +        factory = ectx.rowHandler().factory(ectx.getTypeFactory(), rowType);
 +        topVer = ectx.planningContext().topologyVersion();
 +        this.parts = parts;
 +        mvccSnapshot = ectx.mvccSnapshot();
 +        this.requiredColumns = requiredColumns;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public synchronized Iterator<Row> iterator() {
 +        reserve();
 +
 +        try {
 +            return super.iterator();
 +        }
 +        catch (Exception e) {
 +            release();
 +
 +            throw e;
 +        }
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected H2Row row2indexRow(Row bound) {
 +        return new H2PlainRow(values(coCtx, ectx, bound));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected Row indexRow2Row(H2Row row) throws IgniteCheckedException {
 +        return desc.toRow(ectx, (CacheDataRow)row, factory, requiredColumns);
 +    }
 +
 +    /** */
 +    @Override public void close() {
 +        release();
 +    }
 +
 +    /** */
 +    private synchronized void reserve() {
 +        if (reserved != null)
 +            return;
 +
 +        GridDhtPartitionTopology top = cctx.topology();
 +        top.readLock();
 +
 +        GridDhtTopologyFuture topFut = top.topologyVersionFuture();
 +
 +        boolean done = topFut.isDone();
 +
 +        if (!done || !(topFut.topologyVersion().compareTo(topVer) >= 0
 +            && cctx.shared().exchange().lastAffinityChangedTopologyVersion(topFut.initialVersion()).compareTo(topVer) <= 0)) {
 +            top.readUnlock();
 +
 +            throw new ClusterTopologyException("Topology was changed. Please retry on stable topology.");
 +        }
 +
 +        List<GridDhtLocalPartition> toReserve;
 +
 +        if (cctx.isReplicated()) {
 +            int partsCnt = cctx.affinity().partitions();
 +            toReserve = new ArrayList<>(partsCnt);
 +            for (int i = 0; i < partsCnt; i++)
 +                toReserve.add(top.localPartition(i));
 +        }
 +        else if (cctx.isPartitioned()) {
 +            assert parts != null;
 +
 +            toReserve = new ArrayList<>(parts.length);
 +            for (int i = 0; i < parts.length; i++)
 +                toReserve.add(top.localPartition(parts[i]));
 +        }
 +        else {
 +            assert cctx.isLocal();
 +
 +            toReserve = Collections.emptyList();
 +        }
 +
 +        reserved = new ArrayList<>(toReserve.size());
 +
 +        try {
 +            for (GridDhtLocalPartition part : toReserve) {
 +                if (part == null || !part.reserve()) {
 +                    throw new ClusterTopologyException(
 +                        "Failed to reserve partition for query execution. Retry on stable topology."
 +                    );
 +                }
 +                else if (part.state() != GridDhtPartitionState.OWNING) {
 +                    part.release();
 +
 +                    throw new ClusterTopologyException(
 +                        "Failed to reserve partition for query execution. Retry on stable topology."
 +                    );
 +                }
 +
 +                reserved.add(part);
 +            }
 +        }
 +        catch (Exception e) {
 +            release();
 +
 +            throw e;
 +        }
 +        finally {
 +            top.readUnlock();
 +        }
 +    }
 +
 +    /** */
 +    private synchronized void release() {
 +        if (reserved == null)
 +            return;
 +
 +        for (GridDhtLocalPartition part : reserved)
 +            part.release();
 +
 +        reserved = null;
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override protected H2TreeFilterClosure filterClosure() {
++    @Override protected IndexQueryContext indexQueryContext() {
 +        IndexingQueryFilter filter = new IndexingQueryFilterImpl(kctx, topVer, parts);
-         IndexingQueryCacheFilter f = filter.forCache(cctx.name());
-         H2TreeFilterClosure filterC = null;
- 
-         if (f != null || mvccSnapshot != null )
-             filterC = new H2TreeFilterClosure(f, mvccSnapshot, cctx, ectx.planningContext().logger());
- 
-         return filterC;
++        return new IndexQueryContext(filter, mvccSnapshot);
 +    }
 +
 +    /** */
 +    private Value[] values(CacheObjectValueContext cctx, ExecutionContext<Row> ectx, Row row) {
 +        try {
 +            RowHandler<Row> rowHnd = ectx.rowHandler();
 +            int rowLen = rowHnd.columnCount(row);
 +
 +            Value[] values = new Value[rowLen];
 +            for (int i = 0; i < rowLen; i++) {
 +                Object o = rowHnd.get(i, row);
 +
 +                if (o != null)
 +                    values[i] = H2Utils.wrap(cctx, o, DataType.getTypeFromClass(o.getClass()));
 +            }
 +
 +            return values;
 +        }
 +        catch (IgniteCheckedException e) {
 +            throw new IgniteException("Failed to wrap object into H2 Value.", e);
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/RuntimeTreeIndex.java
index 541ba60,0000000..7f125f9
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/RuntimeTreeIndex.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/RuntimeTreeIndex.java
@@@ -1,200 -1,0 +1,199 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.ignite.internal.processors.query.calcite.exec;
 +
 +import java.util.ArrayList;
 +import java.util.Comparator;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Objects;
 +import java.util.SortedMap;
 +import java.util.TreeMap;
 +import java.util.function.Predicate;
 +import java.util.function.Supplier;
- 
 +import org.apache.calcite.rel.RelCollation;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.ignite.IgniteCheckedException;
- import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
++import org.apache.ignite.internal.cache.query.index.sorted.inline.IndexQueryContext;
 +import org.apache.ignite.internal.processors.query.GridIndex;
 +import org.apache.ignite.internal.util.lang.GridCursor;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +/**
 + * Runtime sorted index based on on-heap tree.
 + */
 +public class RuntimeTreeIndex<Row> implements RuntimeIndex<Row>, GridIndex<Row> {
 +    /** */
 +    protected final ExecutionContext<Row> ectx;
 +
 +    /** */
 +    protected final Comparator<Row> comp;
 +
 +    /** Collation. */
 +    private final RelCollation collation;
 +
 +    /** Rows. */
 +    private TreeMap<Row, List<Row>> rows;
 +
 +    /**
 +     *
 +     */
 +    public RuntimeTreeIndex(
 +        ExecutionContext<Row> ectx,
 +        RelCollation collation,
 +        Comparator<Row> comp
 +    ) {
 +        this.ectx = ectx;
 +        this.comp = comp;
 +
 +        assert Objects.nonNull(collation);
 +
 +        this.collation = collation;
 +        rows = new TreeMap<>(comp);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void push(Row r) {
 +        List<Row> newEqRows = new ArrayList<>();
 +
 +        List<Row> eqRows = rows.putIfAbsent(r, newEqRows);
 +
 +        if (eqRows != null)
 +            eqRows.add(r);
 +        else
 +            newEqRows.add(r);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void close() {
 +        rows.clear();
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override public GridCursor<Row> find(Row lower, Row upper, BPlusTree.TreeRowClosure<Row, Row> filterC) {
-         assert filterC == null;
++    @Override public GridCursor<Row> find(Row lower, Row upper, IndexQueryContext qctx) {
++        assert qctx == null;
 +
 +        int firstCol = F.first(collation.getKeys());
 +
 +        if (ectx.rowHandler().get(firstCol, lower) != null && ectx.rowHandler().get(firstCol, upper) != null)
 +            return new Cursor(rows.subMap(lower, true, upper, true));
 +        else if (ectx.rowHandler().get(firstCol, lower) == null && ectx.rowHandler().get(firstCol, upper) != null)
 +            return new Cursor(rows.headMap(upper, true));
 +        else if (ectx.rowHandler().get(firstCol, lower) != null && ectx.rowHandler().get(firstCol, upper) == null)
 +            return new Cursor(rows.tailMap(lower, true));
 +        else
 +            return new Cursor(rows);
 +    }
 +
 +    /**
 +     * Creates iterable on the index.
 +     */
 +    public Iterable<Row> scan(
 +        ExecutionContext<Row> ectx,
 +        RelDataType rowType,
 +        Predicate<Row> filter,
 +        Supplier<Row> lowerBound,
 +        Supplier<Row> upperBound
 +    ) {
 +        return new IndexScan(rowType, this, filter, lowerBound, upperBound);
 +    }
 +
 +    /**
 +     *
 +     */
 +    private class Cursor implements GridCursor<Row> {
 +        /** Sub map iterator. */
 +        private final Iterator<Map.Entry<Row, List<Row>>> mapIt;
 +
 +        /** Iterator over rows with equal index keys. */
 +        private Iterator<Row> listIt;
 +
 +        /** */
 +        private Row row;
 +
 +        /** */
 +        Cursor(SortedMap<Row, List<Row>> subMap) {
 +            mapIt = subMap.entrySet().iterator();
 +            listIt = null;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public boolean next() throws IgniteCheckedException {
 +            if (!hasNext())
 +                return false;
 +
 +            next0();
 +
 +            return true;
 +        }
 +
 +        /** */
 +        private boolean hasNext() {
 +            return listIt != null && listIt.hasNext() || mapIt.hasNext();
 +        }
 +
 +        /** */
 +        private void next0() {
 +            if (listIt == null || !listIt.hasNext())
 +                listIt = mapIt.next().getValue().iterator();
 +
 +            row = listIt.next();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Row get() throws IgniteCheckedException {
 +            return row;
 +        }
 +    }
 +
 +    /**
 +     *
 +     */
 +    private class IndexScan extends AbstractIndexScan<Row, Row> {
 +        /**
 +         * @param rowType Row type.
 +         * @param idx Physical index.
 +         * @param filter Additional filters.
 +         * @param lowerBound Lower index scan bound.
 +         * @param upperBound Upper index scan bound.
 +         */
 +        IndexScan(
 +            RelDataType rowType,
 +            GridIndex<Row> idx,
 +            Predicate<Row> filter,
 +            Supplier<Row> lowerBound,
 +            Supplier<Row> upperBound) {
 +            super(RuntimeTreeIndex.this.ectx, rowType, idx, filter, lowerBound, upperBound, null);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected Row row2indexRow(Row bound) {
 +            return bound;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected Row indexRow2Row(Row row) {
 +            return row;
 +        }
 +
 +        /** */
-         @Override protected BPlusTree.TreeRowClosure<Row, Row> filterClosure() {
++        @Override protected IndexQueryContext indexQueryContext() {
 +            return null;
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ddl/DdlCommandHandler.java
index d07dbcc,0000000..17949c5
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ddl/DdlCommandHandler.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ddl/DdlCommandHandler.java
@@@ -1,246 -1,0 +1,249 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec.ddl;
 +
 +import java.lang.reflect.Type;
 +import java.util.Collections;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.LinkedHashSet;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.function.Supplier;
 +
 +import org.apache.calcite.schema.SchemaPlus;
 +import org.apache.calcite.schema.Table;
 +import org.apache.ignite.IgniteCheckedException;
 +import org.apache.ignite.cache.QueryEntity;
 +import org.apache.ignite.configuration.CacheConfiguration;
 +import org.apache.ignite.internal.processors.cache.GridCacheProcessor;
 +import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
 +import org.apache.ignite.internal.processors.query.GridQueryProcessor;
 +import org.apache.ignite.internal.processors.query.IgniteSQLException;
 +import org.apache.ignite.internal.processors.query.QueryEntityEx;
 +import org.apache.ignite.internal.processors.query.QueryUtils;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ddl.ColumnDefinition;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ddl.CreateTableCommand;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ddl.DdlCommand;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.ddl.DropTableCommand;
 +import org.apache.ignite.internal.processors.query.calcite.schema.IgniteTable;
 +import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 +import org.apache.ignite.internal.processors.query.schema.SchemaOperationException;
 +import org.apache.ignite.internal.processors.security.IgniteSecurity;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.apache.ignite.lang.IgniteUuid;
 +import org.apache.ignite.plugin.security.SecurityPermission;
 +
 +import static org.apache.ignite.internal.processors.query.QueryUtils.convert;
 +import static org.apache.ignite.internal.processors.query.QueryUtils.isDdlOnSchemaSupported;
 +
 +/** */
 +public class DdlCommandHandler {
 +    /** */
 +    private final Supplier<GridQueryProcessor> qryProcessorSupp;
 +
 +    /** */
 +    private final GridCacheProcessor cacheProcessor;
 +
 +    /** */
 +    private final IgniteSecurity security;
 +
 +    /** */
 +    private final Supplier<SchemaPlus> schemaSupp;
 +
 +    /** */
 +    public DdlCommandHandler(Supplier<GridQueryProcessor> qryProcessorSupp, GridCacheProcessor cacheProcessor,
 +        IgniteSecurity security, Supplier<SchemaPlus> schemaSupp) {
 +        this.qryProcessorSupp = qryProcessorSupp;
 +        this.cacheProcessor = cacheProcessor;
 +        this.security = security;
 +        this.schemaSupp = schemaSupp;
 +    }
 +
 +    /** */
 +    public void handle(PlanningContext pctx, DdlCommand cmd) throws IgniteCheckedException {
 +        if (cmd instanceof CreateTableCommand)
 +            handle0(pctx, (CreateTableCommand)cmd);
 +
 +        else if (cmd instanceof DropTableCommand)
 +            handle0(pctx, (DropTableCommand)cmd);
 +
 +        else {
 +            throw new IgniteSQLException("Unsupported DDL operation [" +
 +                "cmdName=" + (cmd == null ? null : cmd.getClass().getSimpleName()) + "; " +
 +                "querySql=\"" + pctx.query() + "\"]", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
 +        }
 +    }
 +
 +    /** */
 +    private void handle0(PlanningContext pctx, CreateTableCommand cmd) throws IgniteCheckedException {
 +        security.authorize(cmd.cacheName(), SecurityPermission.CACHE_CREATE);
 +
 +        isDdlOnSchemaSupported(cmd.schemaName());
 +
 +        if (schemaSupp.get().getSubSchema(cmd.schemaName()).getTable(cmd.tableName()) != null) {
 +            if (cmd.ifNotExists())
 +                return;
 +
 +            throw new SchemaOperationException(SchemaOperationException.CODE_TABLE_EXISTS, cmd.tableName());
 +        }
 +
 +        CacheConfiguration<?, ?> ccfg = new CacheConfiguration<>(cmd.tableName());
 +
 +        QueryEntity e = toQueryEntity(cmd, pctx);
 +
 +        ccfg.setQueryEntities(Collections.singleton(e));
 +        ccfg.setSqlSchema(cmd.schemaName());
 +
 +        SchemaOperationException err =
 +            QueryUtils.checkQueryEntityConflicts(ccfg, cacheProcessor.cacheDescriptors().values());
 +
 +        if (err != null)
 +            throw convert(err);
 +
 +        qryProcessorSupp.get().dynamicTableCreate(
 +            cmd.schemaName(),
 +            e,
 +            cmd.templateName(),
 +            cmd.cacheName(),
 +            cmd.cacheGroup(),
 +            cmd.dataRegionName(),
 +            cmd.affinityKey(),
 +            cmd.atomicityMode(),
 +            cmd.writeSynchronizationMode(),
 +            cmd.backups(),
 +            cmd.ifNotExists(),
 +            cmd.encrypted(),
 +            null
 +        );
 +    }
 +
 +    /** */
 +    private void handle0(PlanningContext pctx, DropTableCommand cmd) throws IgniteCheckedException {
 +        isDdlOnSchemaSupported(cmd.schemaName());
 +
 +        Table tbl = schemaSupp.get().getSubSchema(cmd.schemaName()).getTable(cmd.tableName());
 +
 +        if (tbl == null) {
 +            if (!cmd.ifExists())
 +                throw new SchemaOperationException(SchemaOperationException.CODE_TABLE_NOT_FOUND, cmd.tableName());
 +
 +            return;
 +        }
 +
 +        String cacheName = ((IgniteTable)tbl).descriptor().cacheInfo().name();
 +
 +        security.authorize(cacheName, SecurityPermission.CACHE_DESTROY);
 +
 +        qryProcessorSupp.get().dynamicTableDrop(cacheName, cmd.tableName(), cmd.ifExists());
 +    }
 +
 +    /** */
 +    private QueryEntity toQueryEntity(CreateTableCommand cmd, PlanningContext pctx) {
 +        QueryEntity res = new QueryEntity();
 +
 +        res.setTableName(cmd.tableName());
 +
 +        Set<String> notNullFields = null;
 +
 +        HashMap<String, Object> dfltValues = new HashMap<>();
 +
 +        Map<String, Integer> precision = new HashMap<>();
 +        Map<String, Integer> scale = new HashMap<>();
 +
 +        IgniteTypeFactory tf = pctx.typeFactory();
 +
 +        for (ColumnDefinition col : cmd.columns()) {
 +            String name = col.name();
 +
 +            Type javaType = tf.getJavaClass(col.type());
 +
 +            String typeName = javaType instanceof Class ? ((Class<?>)javaType).getName() : javaType.getTypeName();
 +
 +            res.addQueryField(name, typeName, null);
 +
 +            if (!col.nullable()) {
 +                if (notNullFields == null)
 +                    notNullFields = new HashSet<>();
 +
 +                notNullFields.add(name);
 +            }
 +
 +            if (col.defaultValue() != null)
 +                dfltValues.put(name, col.defaultValue());
 +
 +            if (col.precision() != null)
 +                precision.put(name, col.precision());
 +
 +            if (col.scale() != null)
 +                scale.put(name, col.scale());
 +        }
 +
 +        if (!F.isEmpty(dfltValues))
 +            res.setDefaultFieldValues(dfltValues);
 +
 +        if (!F.isEmpty(precision))
 +            res.setFieldsPrecision(precision);
 +
 +        if (!F.isEmpty(scale))
 +            res.setFieldsScale(scale);
 +
 +        String valTypeName = QueryUtils.createTableValueTypeName(cmd.schemaName(), cmd.tableName());
 +
 +        String keyTypeName;
 +        if ((!F.isEmpty(cmd.primaryKeyColumns()) && cmd.primaryKeyColumns().size() > 1) || !F.isEmpty(cmd.keyTypeName())) {
 +            keyTypeName = cmd.keyTypeName();
 +
 +            if (F.isEmpty(keyTypeName))
 +                keyTypeName = QueryUtils.createTableKeyTypeName(valTypeName);
 +
-             if (!F.isEmpty(cmd.primaryKeyColumns()))
++            if (!F.isEmpty(cmd.primaryKeyColumns())) {
 +                res.setKeyFields(new LinkedHashSet<>(cmd.primaryKeyColumns()));
++
++                res = new QueryEntityEx(res).setPreserveKeysOrder(true);
++            }
 +        }
 +        else if (!F.isEmpty(cmd.primaryKeyColumns()) && cmd.primaryKeyColumns().size() == 1) {
 +            String pkFieldName = cmd.primaryKeyColumns().get(0);
 +
 +            keyTypeName = res.getFields().get(pkFieldName);
 +
 +            res.setKeyFieldName(pkFieldName);
 +        }
 +        else {
 +            // if pk is not explicitly set, we create it ourselves
 +            keyTypeName = IgniteUuid.class.getName();
 +
 +            res = new QueryEntityEx(res).implicitPk(true);
 +        }
 +
 +        res.setValueType(F.isEmpty(cmd.valueTypeName()) ? valTypeName : cmd.valueTypeName());
 +        res.setKeyType(keyTypeName);
 +
 +        if (!F.isEmpty(notNullFields)) {
 +            QueryEntityEx res0 = new QueryEntityEx(res);
 +
 +            res0.setNotNullFields(notNullFields);
 +
 +            res = res0;
 +        }
 +
 +        return res;
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
index 3b8e5a6,0000000..4f4789c
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
@@@ -1,330 -1,0 +1,330 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec.exp.agg;
 +
 +import java.lang.reflect.Modifier;
 +import java.util.List;
 +import java.util.concurrent.ExecutionException;
 +import java.util.function.Function;
 +import java.util.function.Supplier;
 +
 +import com.google.common.cache.CacheBuilder;
 +import com.google.common.cache.CacheLoader;
 +import com.google.common.cache.LoadingCache;
 +import com.google.common.collect.ImmutableList;
 +import com.google.common.primitives.Primitives;
 +import org.apache.calcite.DataContext;
 +import org.apache.calcite.adapter.enumerable.EnumUtils;
 +import org.apache.calcite.adapter.enumerable.JavaRowFormat;
 +import org.apache.calcite.adapter.enumerable.PhysTypeImpl;
 +import org.apache.calcite.adapter.enumerable.RexToLixTranslator;
 +import org.apache.calcite.linq4j.tree.BlockBuilder;
 +import org.apache.calcite.linq4j.tree.Expression;
 +import org.apache.calcite.linq4j.tree.Expressions;
 +import org.apache.calcite.linq4j.tree.MethodDeclaration;
 +import org.apache.calcite.linq4j.tree.ParameterExpression;
 +import org.apache.calcite.rel.core.AggregateCall;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.calcite.rex.RexBuilder;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.calcite.rex.RexProgram;
 +import org.apache.calcite.rex.RexProgramBuilder;
 +import org.apache.calcite.sql.type.SqlTypeUtil;
 +import org.apache.calcite.sql.validate.SqlConformanceEnum;
 +import org.apache.calcite.util.Pair;
 +import org.apache.ignite.IgniteException;
 +import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext;
 +import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 +import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.jetbrains.annotations.NotNull;
 +
 +import static org.apache.ignite.internal.processors.query.calcite.util.TypeUtils.createRowType;
 +
 +/** */
 +public class AccumulatorsFactory<Row> implements Supplier<List<AccumulatorWrapper<Row>>> {
 +    /** */
-     private static final LoadingCache<Pair<RelDataType,RelDataType>, Function<Object,Object>> CACHE =
++    private static final LoadingCache<Pair<RelDataType, RelDataType>, Function<Object, Object>> CACHE =
 +        CacheBuilder.newBuilder().build(CacheLoader.from(AccumulatorsFactory::cast0));
 +
 +    /** */
 +    public static interface CastFunction extends Function<Object, Object> {
 +        @Override Object apply(Object o);
 +    }
 +
 +    /** */
 +    private static Function<Object, Object> cast(RelDataType from, RelDataType to) {
 +        assert !from.isStruct();
 +        assert !to.isStruct();
 +
 +        return cast(Pair.of(from, to));
 +    }
 +
 +    /** */
 +    private static Function<Object, Object> cast(Pair<RelDataType, RelDataType> types) {
 +        try {
 +            return CACHE.get(types);
 +        }
 +        catch (ExecutionException e) {
 +            throw new IgniteException(e);
 +        }
 +    }
 +
 +    /** */
-     private static Function<Object, Object> cast0(Pair<RelDataType,RelDataType> types) {
++    private static Function<Object, Object> cast0(Pair<RelDataType, RelDataType> types) {
 +        IgniteTypeFactory typeFactory = PlanningContext.empty().typeFactory();
 +
 +        RelDataType from = types.left;
 +        RelDataType to = types.right;
 +
 +        Class<?> fromType = Primitives.wrap((Class<?>)typeFactory.getJavaClass(from));
 +        Class<?> toType = Primitives.wrap((Class<?>)typeFactory.getJavaClass(to));
 +
 +        if (toType.isAssignableFrom(fromType))
 +            return Function.identity();
 +
 +        if (Void.class == toType)
 +            return o -> null;
 +
 +        return compileCast(typeFactory, from, to);
 +    }
 +
 +    /** */
 +    private static Function<Object, Object> compileCast(IgniteTypeFactory typeFactory, RelDataType from,
 +        RelDataType to) {
 +        RelDataType rowType = createRowType(typeFactory, from);
 +        ParameterExpression in_ = Expressions.parameter(Object.class, "in");
 +
 +        RexToLixTranslator.InputGetter getter =
 +            new RexToLixTranslator.InputGetterImpl(
 +                ImmutableList.of(
 +                    Pair.of(EnumUtils.convert(in_, Object.class, typeFactory.getJavaClass(from)),
 +                        PhysTypeImpl.of(typeFactory, rowType,
 +                            JavaRowFormat.SCALAR, false))));
 +
 +        RexBuilder builder = new RexBuilder(typeFactory);
 +        RexProgramBuilder programBuilder = new RexProgramBuilder(rowType, builder);
 +        RexNode cast = builder.makeCast(to, builder.makeInputRef(from, 0));
 +        programBuilder.addProject(cast, null);
 +        RexProgram program = programBuilder.getProgram();
 +        BlockBuilder list = new BlockBuilder();
 +        List<Expression> projects = RexToLixTranslator.translateProjects(program, typeFactory, SqlConformanceEnum.DEFAULT,
 +            list, null, DataContext.ROOT, getter, null);
 +        list.add(projects.get(0));
 +
 +        MethodDeclaration decl = Expressions.methodDecl(
 +            Modifier.PUBLIC, Object.class, "apply", ImmutableList.of(in_), list.toBlock());
 +
 +        return Commons.compile(CastFunction.class, Expressions.toString(F.asList(decl), "\n", false));
 +    }
 +
 +    /** */
 +    private final ExecutionContext<Row> ctx;
 +
 +    /** */
 +    private final AggregateType type;
 +
 +    /** */
 +    private final RelDataType inputRowType;
 +
 +    /** */
 +    private final List<WrapperPrototype> prototypes;
 +
 +    /** */
 +    public AccumulatorsFactory(
 +        ExecutionContext<Row> ctx,
 +        AggregateType type,
 +        List<AggregateCall> aggCalls,
 +        RelDataType inputRowType
 +    ) {
 +        this.ctx = ctx;
 +        this.type = type;
 +        this.inputRowType = inputRowType;
 +
 +        prototypes = Commons.transform(aggCalls, WrapperPrototype::new);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<AccumulatorWrapper<Row>> get() {
 +        return Commons.transform(prototypes, WrapperPrototype::get);
 +    }
 +
 +    /** */
 +    private final class WrapperPrototype implements Supplier<AccumulatorWrapper<Row>> {
 +        /** */
 +        private Supplier<Accumulator> accFactory;
 +
 +        /** */
 +        private final AggregateCall call;
 +
 +        /** */
 +        private Function<Object[], Object[]> inAdapter;
 +
 +        /** */
 +        private Function<Object, Object> outAdapter;
 +
 +        /** */
 +        private WrapperPrototype(AggregateCall call) {
 +            this.call = call;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public AccumulatorWrapper<Row> get() {
 +            Accumulator accumulator = accumulator();
 +
 +            return new AccumulatorWrapperImpl(accumulator, call, inAdapter, outAdapter);
 +        }
 +
 +        /** */
 +        @NotNull private Accumulator accumulator() {
 +            if (accFactory != null)
 +                return accFactory.get();
 +
 +            // init factory and adapters
 +            accFactory = Accumulators.accumulatorFactory(call);
 +            Accumulator accumulator = accFactory.get();
 +
 +            inAdapter = createInAdapter(accumulator);
 +            outAdapter = createOutAdapter(accumulator);
 +
 +            return accumulator;
 +        }
 +
 +        /** */
 +        @NotNull private Function<Object[], Object[]> createInAdapter(Accumulator accumulator) {
 +            if (type == AggregateType.REDUCE || F.isEmpty(call.getArgList()))
 +                return Function.identity();
 +
 +            List<RelDataType> inTypes = SqlTypeUtil.projectTypes(inputRowType, call.getArgList());
 +            List<RelDataType> outTypes = accumulator.argumentTypes(ctx.getTypeFactory());
 +
 +            if (call.ignoreNulls())
 +                inTypes = Commons.transform(inTypes, this::nonNull);
 +
 +            List<Function<Object, Object>> casts =
 +                Commons.transform(Pair.zip(inTypes, outTypes), AccumulatorsFactory::cast);
 +
 +            return new Function<Object[], Object[]>() {
 +                @Override public Object[] apply(Object[] args) {
 +                    for (int i = 0; i < args.length; i++)
 +                        args[i] = casts.get(i).apply(args[i]);
 +                    return args;
 +                }
 +            };
 +        }
 +
 +        /** */
 +        @NotNull private Function<Object, Object> createOutAdapter(Accumulator accumulator) {
 +            if (type == AggregateType.MAP)
 +                return Function.identity();
 +
 +            RelDataType inType = accumulator.returnType(ctx.getTypeFactory());
 +            RelDataType outType = call.getType();
 +
 +            return cast(inType, outType);
 +        }
 +
 +        /** */
 +        private RelDataType nonNull(RelDataType type) {
 +            return ctx.getTypeFactory().createTypeWithNullability(type, false);
 +        }
 +    }
 +
 +    /** */
 +    private final class AccumulatorWrapperImpl implements AccumulatorWrapper<Row> {
 +        /** */
 +        private final Accumulator accumulator;
 +
 +        /** */
 +        private final Function<Object[], Object[]> inAdapter;
 +
 +        /** */
 +        private final Function<Object, Object> outAdapter;
 +
 +        /** */
 +        private final List<Integer> argList;
 +
 +        /** */
 +        private final int filterArg;
 +
 +        /** */
 +        private final boolean ignoreNulls;
 +
 +        /** */
 +        private final RowHandler<Row> handler;
 +
 +        /** */
 +        AccumulatorWrapperImpl(
 +            Accumulator accumulator,
 +            AggregateCall call,
 +            Function<Object[], Object[]> inAdapter,
 +            Function<Object, Object> outAdapter
 +        ) {
 +            this.accumulator = accumulator;
 +            this.inAdapter = inAdapter;
 +            this.outAdapter = outAdapter;
 +
 +            argList = call.getArgList();
 +            ignoreNulls = call.ignoreNulls();
 +            filterArg = call.hasFilter() ? call.filterArg : -1;
 +
 +            handler = ctx.rowHandler();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public void add(Row row) {
 +            assert type != AggregateType.REDUCE;
 +
 +            if (filterArg >= 0 && Boolean.TRUE != handler.get(filterArg, row))
 +                return;
 +
 +            Object[] args = new Object[argList.size()];
 +            for (int i = 0; i < argList.size(); i++) {
 +                args[i] = handler.get(argList.get(i), row);
 +
 +                if (ignoreNulls && args[i] == null)
 +                    return;
 +            }
 +
 +            accumulator.add(inAdapter.apply(args));
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Object end() {
 +            assert type != AggregateType.MAP;
 +
 +            return outAdapter.apply(accumulator.end());
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public void apply(Accumulator accumulator) {
 +            assert type == AggregateType.REDUCE;
 +
 +            this.accumulator.apply(accumulator);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Accumulator accumulator() {
 +            assert type == AggregateType.MAP;
 +
 +            return accumulator;
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MergeJoinNode.java
index 3d291c7,0000000..6e38925
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MergeJoinNode.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/MergeJoinNode.java
@@@ -1,1132 -1,0 +1,1133 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 +
 +import java.util.ArrayDeque;
 +import java.util.ArrayList;
 +import java.util.Comparator;
 +import java.util.Deque;
 +import java.util.List;
 +
 +import org.apache.calcite.rel.core.JoinRelType;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext;
 +import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.jetbrains.annotations.NotNull;
 +
 +/** */
 +public abstract class MergeJoinNode<Row> extends AbstractNode<Row> {
 +    /** Special value to highlights that all row were received and we are not waiting any more. */
 +    protected static final int NOT_WAITING = -1;
 +
 +    /** */
 +    protected final Comparator<Row> comp;
 +
 +    /** */
 +    protected final RowHandler<Row> handler;
 +
 +    /** */
 +    protected int requested;
 +
 +    /** */
 +    protected int waitingLeft;
 +
 +    /** */
 +    protected int waitingRight;
 +
 +    /** */
 +    protected final Deque<Row> rightInBuf = new ArrayDeque<>(IN_BUFFER_SIZE);
 +
 +    /** */
 +    protected final Deque<Row> leftInBuf = new ArrayDeque<>(IN_BUFFER_SIZE);
 +
 +    /** */
 +    protected boolean inLoop;
 +
 +    /**
 +     * @param ctx Execution context.
 +     * @param comp Join expression.
 +     */
 +    private MergeJoinNode(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp) {
 +        super(ctx, rowType);
 +
 +        this.comp = comp;
 +        handler = ctx.rowHandler();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void request(int rowsCnt) throws Exception {
 +        assert !F.isEmpty(sources()) && sources().size() == 2;
 +        assert rowsCnt > 0 && requested == 0;
 +
 +        checkState();
 +
 +        requested = rowsCnt;
 +
 +        if (!inLoop)
 +            context().execute(this::doJoin, this::onError);
 +    }
 +
 +    /** */
 +    private void doJoin() throws Exception {
 +        checkState();
 +
 +        join();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected void rewindInternal() {
 +        requested = 0;
 +        waitingLeft = 0;
 +        waitingRight = 0;
 +
 +        rightInBuf.clear();
 +        leftInBuf.clear();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected Downstream<Row> requestDownstream(int idx) {
 +        if (idx == 0)
 +            return new Downstream<Row>() {
 +                /** {@inheritDoc} */
 +                @Override public void push(Row row) throws Exception {
 +                    pushLeft(row);
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void end() throws Exception {
 +                    endLeft();
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void onError(Throwable e) {
 +                    MergeJoinNode.this.onError(e);
 +                }
 +            };
 +        else if (idx == 1)
 +            return new Downstream<Row>() {
 +                /** {@inheritDoc} */
 +                @Override public void push(Row row) throws Exception {
 +                    pushRight(row);
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void end() throws Exception {
 +                    endRight();
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void onError(Throwable e) {
 +                    MergeJoinNode.this.onError(e);
 +                }
 +            };
 +
 +        throw new IndexOutOfBoundsException();
 +    }
 +
 +    /** */
 +    private void pushLeft(Row row) throws Exception {
 +        assert downstream() != null;
 +        assert waitingLeft > 0;
 +
 +        checkState();
 +
 +        waitingLeft--;
 +
 +        leftInBuf.add(row);
 +
 +        join();
 +    }
 +
 +    /** */
 +    private void pushRight(Row row) throws Exception {
 +        assert downstream() != null;
 +        assert waitingRight > 0;
 +
 +        checkState();
 +
 +        waitingRight--;
 +
 +        rightInBuf.add(row);
 +
 +        join();
 +    }
 +
 +    /** */
 +    private void endLeft() throws Exception {
 +        assert downstream() != null;
 +        assert waitingLeft > 0;
 +
 +        checkState();
 +
 +        waitingLeft = NOT_WAITING;
 +
 +        join();
 +    }
 +
 +    /** */
 +    private void endRight() throws Exception {
 +        assert downstream() != null;
 +        assert waitingRight > 0;
 +
 +        checkState();
 +
 +        waitingRight = NOT_WAITING;
 +
 +        join();
 +    }
 +
 +    /** */
 +    protected Node<Row> leftSource() {
 +        return sources().get(0);
 +    }
 +
 +    /** */
 +    protected Node<Row> rightSource() {
 +        return sources().get(1);
 +    }
 +
 +    /** */
 +    protected abstract void join() throws Exception;
 +
 +    /** */
 +    @NotNull public static <Row> MergeJoinNode<Row> create(ExecutionContext<Row> ctx, RelDataType outputRowType, RelDataType leftRowType,
 +        RelDataType rightRowType, JoinRelType joinType, Comparator<Row> comp) {
 +        switch (joinType) {
 +            case INNER:
 +                return new InnerJoin<>(ctx, outputRowType, comp);
 +
 +            case LEFT: {
 +                RowHandler.RowFactory<Row> rightRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), rightRowType);
 +
 +                return new LeftJoin<>(ctx, outputRowType, comp, rightRowFactory);
 +            }
 +
 +            case RIGHT: {
 +                RowHandler.RowFactory<Row> leftRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), leftRowType);
 +
 +                return new RightJoin<>(ctx, outputRowType, comp, leftRowFactory);
 +            }
 +
 +            case FULL: {
 +                RowHandler.RowFactory<Row> leftRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), leftRowType);
 +                RowHandler.RowFactory<Row> rightRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), rightRowType);
 +
 +                return new FullOuterJoin<>(ctx, outputRowType, comp, leftRowFactory, rightRowFactory);
 +            }
 +
 +            case SEMI:
 +                return new SemiJoin<>(ctx, outputRowType, comp);
 +
 +            case ANTI:
 +                return new AntiJoin<>(ctx, outputRowType, comp);
 +
 +            default:
 +                throw new IllegalStateException("Join type \"" + joinType + "\" is not supported yet");
 +        }
 +    }
 +
 +    /** */
 +    private static class InnerJoin<Row> extends MergeJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /** Used to store similar rows of rights stream in many-to-many join mode. */
 +        private List<Row> rightMaterialization;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /** */
 +        private boolean drainMaterialization;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         */
 +        public InnerJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp) {
 +            super(ctx, rowType, comp);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +            rightIdx = 0;
 +            rightMaterialization = null;
 +            drainMaterialization = false;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
 +                while (requested > 0 && (left != null || !leftInBuf.isEmpty()) && (right != null || !rightInBuf.isEmpty()
 +                    || rightMaterialization != null)) {
 +                    checkState();
 +
 +                    if (left == null)
 +                        left = leftInBuf.remove();
 +
 +                    if (right == null) {
 +                        if (rightInBuf.isEmpty() && waitingRight != NOT_WAITING)
 +                            break;
 +
 +                        if (!rightInBuf.isEmpty())
 +                            right = rightInBuf.remove();
 +                    }
 +
 +                    if (right == null && rightMaterialization != null && !drainMaterialization) {
 +                        drainMaterialization = true;
 +                        left = null;
 +
 +                        continue;
 +                    }
 +
 +                    Row row;
 +                    if (!drainMaterialization) {
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp < 0) {
 +                            left = null;
 +                            rightIdx = 0;
 +
 +                            if (rightMaterialization != null)
 +                                drainMaterialization = true;
 +
 +                            continue;
 +                        }
 +                        else if (cmp > 0) {
 +                            right = null;
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +
 +                            continue;
 +                        }
 +
 +                        if (rightMaterialization == null && (!rightInBuf.isEmpty() || waitingRight != NOT_WAITING)) {
 +                            if (rightInBuf.isEmpty())
 +                                break;
 +
 +                            if (comp.compare(left, rightInBuf.peek()) == 0)
 +                                rightMaterialization = new ArrayList<>();
 +                        }
 +
 +                        row = handler.concat(left, right);
 +
 +                        if (rightMaterialization != null) {
 +                            rightMaterialization.add(right);
 +
 +                            right = null;
 +                        }
 +                        else
 +                            left = null;
 +                    }
 +                    else {
 +                        if (rightIdx >= rightMaterialization.size()) {
 +                            rightIdx = 0;
 +                            left = null;
 +
 +                            continue;
 +                        }
 +
 +                        Row right = rightMaterialization.get(rightIdx++);
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp > 0) {
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +                            drainMaterialization = false;
 +
 +                            continue;
 +                        }
 +
 +                        row = handler.concat(left, right);
 +                    }
 +
 +                    requested--;
 +                    downstream().push(row);
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && ((waitingLeft == NOT_WAITING && left == null && leftInBuf.isEmpty())
 +                || (waitingRight == NOT_WAITING && right == null && rightInBuf.isEmpty() && rightMaterialization == null))
 +            ) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class LeftJoin<Row> extends MergeJoinNode<Row> {
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> rightRowFactory;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /** Used to store similar rows of rights stream in many-to-many join mode. */
 +        private List<Row> rightMaterialization;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /** */
 +        private boolean drainMaterialization;
 +
 +        /** Whether current left row was matched (hence pushed to downstream) or not. */
 +        private boolean matched;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         * @param rightRowFactory Right row factory.
 +         */
 +        public LeftJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp, RowHandler.RowFactory<Row> rightRowFactory) {
 +            super(ctx, rowType, comp);
 +
 +            this.rightRowFactory = rightRowFactory;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +            rightIdx = 0;
 +            rightMaterialization = null;
 +            drainMaterialization = false;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
 +                while (requested > 0 && (left != null || !leftInBuf.isEmpty())
 +                    && !(right == null && rightInBuf.isEmpty() && rightMaterialization == null && waitingRight != NOT_WAITING)) {
 +                    checkState();
 +
 +                    if (left == null) {
 +                        left = leftInBuf.remove();
 +
 +                        matched = false;
 +                    }
 +
 +                    if (right == null && !rightInBuf.isEmpty())
 +                        right = rightInBuf.remove();
 +
 +                    if (right == null && rightMaterialization != null && !drainMaterialization) {
 +                        drainMaterialization = true;
 +                        left = null;
 +
 +                        continue;
 +                    }
 +
 +                    Row row;
 +                    if (!drainMaterialization) {
 +                        if (right == null) {
 +                            row = handler.concat(left, rightRowFactory.create());
 +
 +                            requested--;
 +                            downstream().push(row);
 +
 +                            left = null;
 +
 +                            continue;
 +                        }
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp < 0) {
 +                            if (!matched) {
 +                                row = handler.concat(left, rightRowFactory.create());
 +
 +                                requested--;
 +                                downstream().push(row);
 +                            }
 +
 +                            left = null;
 +                            rightIdx = 0;
 +
 +                            if (rightMaterialization != null)
 +                                drainMaterialization = true;
 +
 +                            continue;
 +                        }
 +                        else if (cmp > 0) {
 +                            right = null;
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +
 +                            continue;
 +                        }
 +
 +                        matched = true;
 +
 +                        if (rightMaterialization == null && (!rightInBuf.isEmpty() || waitingRight != NOT_WAITING)) {
 +                            if (rightInBuf.isEmpty())
 +                                break;
 +
 +                            if (comp.compare(left, rightInBuf.peek()) == 0)
 +                                rightMaterialization = new ArrayList<>();
 +                        }
 +
 +                        row = handler.concat(left, right);
 +
 +                        if (rightMaterialization != null) {
 +                            rightMaterialization.add(right);
 +
 +                            right = null;
 +                        }
 +                        else
 +                            left = null;
 +                    }
 +                    else {
 +                        if (rightIdx >= rightMaterialization.size()) {
 +                            rightIdx = 0;
 +                            left = null;
 +
 +                            continue;
 +                        }
 +
 +                        Row right = rightMaterialization.get(rightIdx++);
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp > 0) {
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +                            drainMaterialization = false;
 +
 +                            continue;
 +                        }
 +
 +                        row = handler.concat(left, right);
 +                    }
 +
 +                    requested--;
 +                    downstream().push(row);
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && left == null && leftInBuf.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class RightJoin<Row> extends MergeJoinNode<Row> {
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> leftRowFactory;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /** Used to store similar rows of rights stream in many-to-many join mode. */
 +        private List<Row> rightMaterialization;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /** */
 +        private boolean drainMaterialization;
 +
 +        /** Whether current right row was matched (hence pushed to downstream) or not. */
 +        private boolean matched;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         * @param leftRowFactory Left row factory.
 +         */
 +        public RightJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp, RowHandler.RowFactory<Row> leftRowFactory) {
 +            super(ctx, rowType, comp);
 +
 +            this.leftRowFactory = leftRowFactory;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +            rightIdx = 0;
 +            rightMaterialization = null;
 +            drainMaterialization = false;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
 +                while (requested > 0 && !(left == null && leftInBuf.isEmpty() && waitingLeft != NOT_WAITING)
 +                    && (right != null || !rightInBuf.isEmpty() || rightMaterialization != null)) {
 +                    checkState();
 +
 +                    if (left == null && !leftInBuf.isEmpty())
 +                        left = leftInBuf.remove();
 +
 +                    if (right == null) {
 +                        if (rightInBuf.isEmpty() && waitingRight != NOT_WAITING)
 +                            break;
 +
 +                        if (!rightInBuf.isEmpty()) {
 +                            right = rightInBuf.remove();
 +
 +                            matched = false;
 +                        }
 +                    }
 +
 +                    if (right == null && rightMaterialization != null && !drainMaterialization) {
 +                        drainMaterialization = true;
 +                        left = null;
 +
 +                        continue;
 +                    }
 +
 +                    Row row;
 +                    if (!drainMaterialization) {
 +                        if (left == null) {
 +                            if (!matched) {
 +                                row = handler.concat(leftRowFactory.create(), right);
 +
 +                                requested--;
 +                                downstream().push(row);
 +                            }
 +
 +                            right = null;
 +
 +                            continue;
 +                        }
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp < 0) {
 +                            left = null;
 +                            rightIdx = 0;
 +
 +                            if (rightMaterialization != null)
 +                                drainMaterialization = true;
 +
 +                            continue;
 +                        }
 +                        else if (cmp > 0) {
 +                            if (!matched) {
 +                                row = handler.concat(leftRowFactory.create(), right);
 +
 +                                requested--;
 +                                downstream().push(row);
 +                            }
 +
 +                            right = null;
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +
 +                            continue;
 +                        }
 +
 +                        if (rightMaterialization == null && (!rightInBuf.isEmpty() || waitingRight != NOT_WAITING)) {
 +                            if (rightInBuf.isEmpty())
 +                                break;
 +
 +                            if (comp.compare(left, rightInBuf.peek()) == 0)
 +                                rightMaterialization = new ArrayList<>();
 +                        }
 +
 +                        matched = true;
 +
 +                        row = handler.concat(left, right);
 +
 +                        if (rightMaterialization != null) {
 +                            rightMaterialization.add(right);
 +
 +                            right = null;
 +                        }
 +                        else
 +                            left = null;
 +                    }
 +                    else {
 +                        if (left == null) {
 +                            if (waitingLeft == NOT_WAITING)
 +                                rightMaterialization = null;
 +
 +                            break;
 +                        }
 +
 +                        if (rightIdx >= rightMaterialization.size()) {
 +                            rightIdx = 0;
 +                            left = null;
 +
 +                            continue;
 +                        }
 +
 +                        Row right = rightMaterialization.get(rightIdx++);
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp > 0) {
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +                            drainMaterialization = false;
 +
 +                            continue;
 +                        }
 +
 +                        row = handler.concat(left, right);
 +                    }
 +
 +                    requested--;
 +                    downstream().push(row);
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingRight == NOT_WAITING && right == null && rightInBuf.isEmpty() && rightMaterialization == null) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class FullOuterJoin<Row> extends MergeJoinNode<Row> {
 +        /** Left row factory. */
 +        private final RowHandler.RowFactory<Row> leftRowFactory;
 +
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> rightRowFactory;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /** Used to store similar rows of rights stream in many-to-many join mode. */
 +        private List<Row> rightMaterialization;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /** */
 +        private boolean drainMaterialization;
 +
 +        /** Whether current left row was matched (hence pushed to downstream) or not. */
 +        private boolean leftMatched;
 +
 +        /** Whether current right row was matched (hence pushed to downstream) or not. */
 +        private boolean rightMatched;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         * @param leftRowFactory Left row factory.
 +         * @param rightRowFactory Right row factory.
 +         */
 +        public FullOuterJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp,
 +            RowHandler.RowFactory<Row> leftRowFactory, RowHandler.RowFactory<Row> rightRowFactory) {
 +            super(ctx, rowType, comp);
 +
 +            this.leftRowFactory = leftRowFactory;
 +            this.rightRowFactory = rightRowFactory;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +            rightIdx = 0;
 +            rightMaterialization = null;
 +            drainMaterialization = false;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
 +                while (requested > 0 && !(left == null && leftInBuf.isEmpty() && waitingLeft != NOT_WAITING)
 +                    && !(right == null && rightInBuf.isEmpty() && rightMaterialization == null && waitingRight != NOT_WAITING)) {
 +                    checkState();
 +
 +                    if (left == null && !leftInBuf.isEmpty()) {
 +                        left = leftInBuf.remove();
 +
 +                        leftMatched = false;
 +                    }
 +
 +                    if (right == null) {
 +                        if (rightInBuf.isEmpty() && waitingRight != NOT_WAITING)
 +                            break;
 +
 +                        if (!rightInBuf.isEmpty()) {
 +                            right = rightInBuf.remove();
 +
 +                            rightMatched = false;
 +                        }
 +                    }
 +
 +                    if (right == null && rightMaterialization != null && !drainMaterialization) {
 +                        drainMaterialization = true;
 +                        left = null;
 +
 +                        continue;
 +                    }
 +
 +                    Row row;
 +                    if (!drainMaterialization) {
 +                        if (left == null || right == null) {
 +                            if (left == null && right != null) {
 +                                if (!rightMatched) {
 +                                    row = handler.concat(leftRowFactory.create(), right);
 +
 +                                    requested--;
 +                                    downstream().push(row);
 +                                }
 +
 +                                right = null;
 +
 +                                continue;
 +                            }
 +
 +                            if (left != null && right == null) {
 +                                if (!leftMatched) {
 +                                    row = handler.concat(left, rightRowFactory.create());
 +
 +                                    requested--;
 +                                    downstream().push(row);
 +                                }
 +
 +                                left = null;
 +
 +                                continue;
 +                            }
 +
 +                            break;
 +                        }
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp < 0) {
 +                            if (!leftMatched) {
 +                                row = handler.concat(left, rightRowFactory.create());
 +
 +                                requested--;
 +                                downstream().push(row);
 +                            }
 +
 +                            left = null;
 +                            rightIdx = 0;
 +
 +                            if (rightMaterialization != null)
 +                                drainMaterialization = true;
 +
 +                            continue;
 +                        }
 +                        else if (cmp > 0) {
 +                            if (!rightMatched) {
 +                                row = handler.concat(leftRowFactory.create(), right);
 +
 +                                requested--;
 +                                downstream().push(row);
 +                            }
 +
 +                            right = null;
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +
 +                            continue;
 +                        }
 +
 +                        if (rightMaterialization == null && (!rightInBuf.isEmpty() || waitingRight != NOT_WAITING)) {
 +                            if (rightInBuf.isEmpty())
 +                                break;
 +
 +                            if (comp.compare(left, rightInBuf.peek()) == 0)
 +                                rightMaterialization = new ArrayList<>();
 +                        }
 +
 +                        leftMatched = true;
 +                        rightMatched = true;
 +
 +                        row = handler.concat(left, right);
 +
 +                        if (rightMaterialization != null) {
 +                            rightMaterialization.add(right);
 +
 +                            right = null;
 +                        }
 +                        else
 +                            left = null;
 +                    }
 +                    else {
 +                        if (left == null) {
 +                            if (waitingLeft == NOT_WAITING)
 +                                rightMaterialization = null;
 +
 +                            break;
 +                        }
 +
 +                        if (rightIdx >= rightMaterialization.size()) {
 +                            rightIdx = 0;
 +                            left = null;
 +
 +                            continue;
 +                        }
 +
 +                        Row right = rightMaterialization.get(rightIdx++);
 +
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp > 0) {
 +                            rightIdx = 0;
 +                            rightMaterialization = null;
 +                            drainMaterialization = false;
 +
 +                            continue;
 +                        }
 +
 +                        leftMatched = true;
 +
 +                        row = handler.concat(left, right);
 +                    }
 +
 +                    requested--;
 +                    downstream().push(row);
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && left == null && leftInBuf.isEmpty()
 +                && waitingRight == NOT_WAITING && right == null && rightInBuf.isEmpty() && rightMaterialization == null
 +            ) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class SemiJoin<Row> extends MergeJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         */
 +        public SemiJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp) {
 +            super(ctx, rowType, comp);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
 +                while (requested > 0 && (left != null || !leftInBuf.isEmpty()) && (right != null || !rightInBuf.isEmpty())) {
 +                    checkState();
 +
 +                    if (left == null)
 +                        left = leftInBuf.remove();
 +
 +                    if (right == null)
 +                        right = rightInBuf.remove();
 +
 +                    int cmp = comp.compare(left, right);
 +
 +                    if (cmp < 0) {
 +                        left = null;
 +
 +                        continue;
 +                    }
 +                    else if (cmp > 0) {
 +                        right = null;
 +
 +                        continue;
 +                    }
 +
 +                    requested--;
 +                    downstream().push(left);
 +
 +                    left = null;
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && ((waitingLeft == NOT_WAITING && left == null && leftInBuf.isEmpty()
 +                || (waitingRight == NOT_WAITING && right == null && rightInBuf.isEmpty())))
 +            ) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class AntiJoin<Row> extends MergeJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private Row right;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param rowType Row type.
 +         * @param comp Join expression comparator.
 +         */
 +        public AntiJoin(ExecutionContext<Row> ctx, RelDataType rowType, Comparator<Row> comp) {
 +            super(ctx, rowType, comp);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            right = null;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            inLoop = true;
 +            try {
-                 while (requested > 0 && (left != null || !leftInBuf.isEmpty()) && !(right == null && rightInBuf.isEmpty() && waitingRight != NOT_WAITING)) {
++                while (requested > 0 && (left != null || !leftInBuf.isEmpty()) &&
++                    !(right == null && rightInBuf.isEmpty() && waitingRight != NOT_WAITING)) {
 +                    checkState();
 +
 +                    if (left == null)
 +                        left = leftInBuf.remove();
 +
 +                    if (right == null && !rightInBuf.isEmpty())
 +                        right = rightInBuf.remove();
 +
 +                    if (right != null) {
 +                        int cmp = comp.compare(left, right);
 +
 +                        if (cmp == 0) {
 +                            left = null;
 +
 +                            continue;
 +                        }
 +                        else if (cmp > 0) {
 +                            right = null;
 +
 +                            continue;
 +                        }
 +                    }
 +
 +                    requested--;
 +                    downstream().push(left);
 +
 +                    left = null;
 +                }
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0)
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && left == null && leftInBuf.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ModifyNode.java
index d1aaa38,0000000..3dc3edc
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ModifyNode.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ModifyNode.java
@@@ -1,309 -1,0 +1,309 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 +
 +import java.util.ArrayList;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.stream.Collectors;
 +import javax.cache.processor.EntryProcessor;
 +import javax.cache.processor.EntryProcessorException;
 +import javax.cache.processor.EntryProcessorResult;
 +import javax.cache.processor.MutableEntry;
 +import org.apache.calcite.rel.core.TableModify;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.ignite.IgniteCheckedException;
 +import org.apache.ignite.internal.processors.cache.GridCacheContext;
 +import org.apache.ignite.internal.processors.query.IgniteSQLException;
 +import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext;
 +import org.apache.ignite.internal.processors.query.calcite.schema.TableDescriptor;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.apache.ignite.internal.util.typedef.internal.U;
 +import org.apache.ignite.lang.IgniteBiTuple;
 +
 +import static org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode.DUPLICATE_KEY;
 +
 +/**
 + *
 + */
 +public class ModifyNode<Row> extends AbstractNode<Row> implements SingleNode<Row>, Downstream<Row> {
 +    /** */
 +    protected final TableDescriptor desc;
 +
 +    /** */
 +    private final TableModify.Operation op;
 +
 +    /** */
 +    private final List<String> cols;
 +
 +    /** */
 +    private List<IgniteBiTuple<?, ?>> tuples = new ArrayList<>(MODIFY_BATCH_SIZE);
 +
 +    /** */
 +    private long updatedRows;
 +
 +    /** */
 +    private int waiting;
 +
 +    /** */
 +    private int requested;
 +
 +    /** */
 +    private boolean inLoop;
 +
 +    /** */
 +    private State state = State.UPDATING;
 +
 +    /**
 +     * @param ctx Execution context.
 +     * @param desc Table descriptor.
 +     * @param cols Update column list.
 +     */
 +    public ModifyNode(
 +        ExecutionContext<Row> ctx,
 +        RelDataType rowType,
 +        TableDescriptor desc,
 +        TableModify.Operation op,
 +        List<String> cols
 +    ) {
 +        super(ctx, rowType);
 +
 +        this.desc = desc;
 +        this.op = op;
 +        this.cols = cols;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void request(int rowsCnt) throws Exception {
 +        assert !F.isEmpty(sources()) && sources().size() == 1;
 +        assert rowsCnt > 0 && requested == 0;
 +
 +        checkState();
 +
 +        requested = rowsCnt;
 +
 +        if (!inLoop)
 +            tryEnd();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void push(Row row) throws Exception {
 +        assert downstream() != null;
 +        assert waiting > 0;
 +        assert state == State.UPDATING;
 +
 +        checkState();
 +
 +        waiting--;
 +
 +        switch (op) {
 +            case DELETE:
 +            case UPDATE:
 +            case INSERT:
 +                tuples.add(desc.toTuple(context(), row, op, cols));
 +
 +                flushTuples(false);
 +
 +                break;
 +            default:
 +                throw new UnsupportedOperationException(op.name());
 +        }
 +
 +        if (waiting == 0)
 +            source().request(waiting = MODIFY_BATCH_SIZE);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void end() throws Exception {
 +        assert downstream() != null;
 +        assert waiting > 0;
 +
 +        checkState();
 +
 +        waiting = -1;
 +        state = State.UPDATED;
 +
 +        tryEnd();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected void rewindInternal() {
 +        throw new UnsupportedOperationException();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected Downstream<Row> requestDownstream(int idx) {
 +        if (idx != 0)
 +            throw new IndexOutOfBoundsException();
 +
 +        return this;
 +    }
 +
 +    /** */
 +    private void tryEnd() throws Exception {
 +        assert downstream() != null;
 +
 +        if (state == State.UPDATING && waiting == 0)
 +            source().request(waiting = MODIFY_BATCH_SIZE);
 +
 +        if (state == State.UPDATED && requested > 0) {
 +            flushTuples(true);
 +
 +            state = State.END;
 +
 +            inLoop = true;
 +            try {
 +                requested--;
 +                downstream().push(context().rowHandler().factory(long.class).create(updatedRows));
 +            }
 +            finally {
 +                inLoop = false;
 +            }
 +        }
 +
 +        if (state == State.END && requested > 0) {
 +            requested = 0;
 +            downstream().end();
 +        }
 +    }
 +
 +    /** */
 +    @SuppressWarnings("unchecked")
 +    private void flushTuples(boolean force) throws IgniteCheckedException {
 +        if (F.isEmpty(tuples) || !force && tuples.size() < MODIFY_BATCH_SIZE)
 +            return;
 +
-         List<IgniteBiTuple<?,?>> tuples = this.tuples;
++        List<IgniteBiTuple<?, ?>> tuples = this.tuples;
 +        this.tuples = new ArrayList<>(MODIFY_BATCH_SIZE);
 +
 +        GridCacheContext<Object, Object> cctg = desc.cacheContext();
 +        Map<Object, EntryProcessor<Object, Object, Long>> map = invokeMap(tuples);
 +        Map<Object, EntryProcessorResult<Long>> res = cctg.cache().invokeAll(map);
 +
 +        long updated = res.values().stream().mapToLong(EntryProcessorResult::get).sum();
 +
 +        if (op == TableModify.Operation.INSERT && updated != res.size()) {
 +            List<Object> duplicates = res.entrySet().stream()
 +                .filter(e -> e.getValue().get() == 0)
 +                .map(Map.Entry::getKey)
 +                .collect(Collectors.toList());
 +
 +            throw new IgniteSQLException("Failed to INSERT some keys because they are already in cache. " +
 +                "[keys=" + duplicates + ']', DUPLICATE_KEY);
 +        }
 +
 +        updatedRows += updated;
 +    }
 +
 +    /** */
-     private Map<Object, EntryProcessor<Object, Object, Long>> invokeMap(List<IgniteBiTuple<?,?>> tuples) {
++    private Map<Object, EntryProcessor<Object, Object, Long>> invokeMap(List<IgniteBiTuple<?, ?>> tuples) {
 +        Map<Object, EntryProcessor<Object, Object, Long>> procMap = U.newLinkedHashMap(tuples.size());
 +
 +        switch (op) {
 +            case INSERT:
 +                for (IgniteBiTuple<?, ?> entry : tuples)
 +                    procMap.put(entry.getKey(), new InsertOperation<>(entry.getValue()));
 +
 +                break;
 +            case UPDATE:
 +                for (IgniteBiTuple<?, ?> entry : tuples)
 +                    procMap.put(entry.getKey(), new UpdateOperation<>(entry.getValue()));
 +
 +                break;
 +            case DELETE:
 +                for (IgniteBiTuple<?, ?> entry : tuples)
 +                    procMap.put(entry.getKey(), new DeleteOperation<>());
 +
 +                break;
 +            default:
 +                throw new AssertionError();
 +        }
 +
 +        return procMap;
 +    }
 +
 +    /** */
 +    private enum State {
 +        /** */
 +        UPDATING,
 +
 +        /** */
 +        UPDATED,
 +
 +        /** */
 +        END
 +    }
 +
 +    /** */
 +    private static class InsertOperation<K, V> implements EntryProcessor<K, V, Long> {
 +        /** */
 +        private final V val;
 +
 +        /** */
 +        private InsertOperation(V val) {
 +            this.val = val;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Long process(MutableEntry<K, V> entry, Object... arguments) throws EntryProcessorException {
 +            if (!entry.exists()) {
 +                entry.setValue(val);
 +
 +                return 1L;
 +            }
 +
 +            return 0L;
 +        }
 +    }
 +
 +    /** */
 +    private static class UpdateOperation<K, V> implements EntryProcessor<K, V, Long> {
 +        /** */
 +        private final V val;
 +
 +        /** */
 +        private UpdateOperation(V val) {
 +            this.val = val;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override public Long process(MutableEntry<K, V> entry, Object... arguments) throws EntryProcessorException {
 +            if (entry.exists()) {
 +                entry.setValue(val);
 +
 +                return 1L;
 +            }
 +
 +            return 0L;
 +        }
 +    }
 +
 +    /** */
 +    private static class DeleteOperation<K, V> implements EntryProcessor<K, V, Long> {
 +        /** {@inheritDoc} */
 +        @Override public Long process(MutableEntry<K, V> entry, Object... arguments) throws EntryProcessorException {
 +            if (entry.exists()) {
 +                entry.remove();
 +
 +                return 1L;
 +            }
 +
 +            return 0L;
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/NestedLoopJoinNode.java
index a27e9f2,0000000..6f3188f
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/NestedLoopJoinNode.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/NestedLoopJoinNode.java
@@@ -1,811 -1,0 +1,811 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 +
 +import java.util.ArrayDeque;
 +import java.util.ArrayList;
 +import java.util.BitSet;
 +import java.util.Deque;
 +import java.util.List;
 +import java.util.function.Predicate;
 +
 +import org.apache.calcite.rel.core.JoinRelType;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext;
 +import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.jetbrains.annotations.NotNull;
 +
 +/** */
 +public abstract class NestedLoopJoinNode<Row> extends AbstractNode<Row> {
 +    /** Special value to highlights that all row were received and we are not waiting any more. */
 +    protected static final int NOT_WAITING = -1;
 +
 +    /** */
 +    protected final Predicate<Row> cond;
 +
 +    /** */
 +    protected final RowHandler<Row> handler;
 +
 +    /** */
 +    protected int requested;
 +
 +    /** */
 +    protected int waitingLeft;
 +
 +    /** */
 +    protected int waitingRight;
 +
 +    /** */
 +    protected final List<Row> rightMaterialized = new ArrayList<>(IN_BUFFER_SIZE);
 +
 +    /** */
 +    protected final Deque<Row> leftInBuf = new ArrayDeque<>(IN_BUFFER_SIZE);
 +
 +    /** */
 +    protected boolean inLoop;
 +
 +    /**
 +     * @param ctx Execution context.
 +     * @param cond Join expression.
 +     */
 +    private NestedLoopJoinNode(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond) {
 +        super(ctx, rowType);
 +
 +        this.cond = cond;
 +        handler = ctx.rowHandler();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void request(int rowsCnt) throws Exception {
 +        assert !F.isEmpty(sources()) && sources().size() == 2;
 +        assert rowsCnt > 0 && requested == 0;
 +
 +        checkState();
 +
 +        requested = rowsCnt;
 +
 +        if (!inLoop)
 +            context().execute(this::doJoin, this::onError);
 +    }
 +
 +    /** */
 +    private void doJoin() throws Exception {
 +        checkState();
 +
 +        join();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected void rewindInternal() {
 +        requested = 0;
 +        waitingLeft = 0;
 +        waitingRight = 0;
 +
 +        rightMaterialized.clear();
 +        leftInBuf.clear();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override protected Downstream<Row> requestDownstream(int idx) {
 +        if (idx == 0)
 +            return new Downstream<Row>() {
 +                /** {@inheritDoc} */
 +                @Override public void push(Row row) throws Exception {
 +                    pushLeft(row);
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void end() throws Exception {
 +                    endLeft();
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void onError(Throwable e) {
 +                    NestedLoopJoinNode.this.onError(e);
 +                }
 +            };
 +        else if (idx == 1)
 +            return new Downstream<Row>() {
 +                /** {@inheritDoc} */
 +                @Override public void push(Row row) throws Exception {
 +                    pushRight(row);
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void end() throws Exception {
 +                    endRight();
 +                }
 +
 +                /** {@inheritDoc} */
 +                @Override public void onError(Throwable e) {
 +                    NestedLoopJoinNode.this.onError(e);
 +                }
 +            };
 +
 +        throw new IndexOutOfBoundsException();
 +    }
 +
 +    /** */
 +    private void pushLeft(Row row) throws Exception {
 +        assert downstream() != null;
 +        assert waitingLeft > 0;
 +
 +        checkState();
 +
 +        waitingLeft--;
 +
 +        leftInBuf.add(row);
 +
 +        join();
 +    }
 +
 +    /** */
 +    private void pushRight(Row row) throws Exception {
 +        assert downstream() != null;
 +        assert waitingRight > 0;
 +
 +        checkState();
 +
 +        waitingRight--;
 +
 +        rightMaterialized.add(row);
 +
 +        if (waitingRight == 0)
 +            rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +    }
 +
 +    /** */
 +    private void endLeft() throws Exception {
 +        assert downstream() != null;
 +        assert waitingLeft > 0;
 +
 +        checkState();
 +
 +        waitingLeft = NOT_WAITING;
 +
 +        join();
 +    }
 +
 +    /** */
 +    private void endRight() throws Exception {
 +        assert downstream() != null;
 +        assert waitingRight > 0;
 +
 +        checkState();
 +
 +        waitingRight = NOT_WAITING;
 +
 +        join();
 +    }
 +
 +    /** */
 +    protected Node<Row> leftSource() {
 +        return sources().get(0);
 +    }
 +
 +    /** */
 +    protected Node<Row> rightSource() {
 +        return sources().get(1);
 +    }
 +
 +    /** */
 +    protected abstract void join() throws Exception;
 +
 +    /** */
-     @NotNull public static <Row> NestedLoopJoinNode<Row> create(ExecutionContext<Row> ctx, RelDataType outputRowType, RelDataType leftRowType,
-         RelDataType rightRowType, JoinRelType joinType, Predicate<Row> cond) {
++    @NotNull public static <Row> NestedLoopJoinNode<Row> create(ExecutionContext<Row> ctx, RelDataType outputRowType,
++        RelDataType leftRowType, RelDataType rightRowType, JoinRelType joinType, Predicate<Row> cond) {
 +        switch (joinType) {
 +            case INNER:
 +                return new InnerJoin<>(ctx, outputRowType, cond);
 +
 +            case LEFT: {
 +                RowHandler.RowFactory<Row> rightRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), rightRowType);
 +
 +                return new LeftJoin<>(ctx, outputRowType, cond, rightRowFactory);
 +            }
 +
 +            case RIGHT: {
 +                RowHandler.RowFactory<Row> leftRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), leftRowType);
 +
 +                return new RightJoin<>(ctx, outputRowType, cond, leftRowFactory);
 +            }
 +
 +            case FULL: {
 +                RowHandler.RowFactory<Row> leftRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), leftRowType);
 +                RowHandler.RowFactory<Row> rightRowFactory = ctx.rowHandler().factory(ctx.getTypeFactory(), rightRowType);
 +
 +                return new FullOuterJoin<>(ctx, outputRowType, cond, leftRowFactory, rightRowFactory);
 +            }
 +
 +            case SEMI:
 +                return new SemiJoin<>(ctx, outputRowType, cond);
 +
 +            case ANTI:
 +                return new AntiJoin<>(ctx, outputRowType, cond);
 +
 +            default:
 +                throw new IllegalStateException("Join type \"" + joinType + "\" is not supported yet");
 +        }
 +    }
 +
 +    /** */
 +    private static class InnerJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public InnerJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond) {
 +            super(ctx, rowType, cond);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                inLoop = true;
 +                try {
 +                    while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                        if (left == null)
 +                            left = leftInBuf.remove();
 +
 +                        while (requested > 0 && rightIdx < rightMaterialized.size()) {
 +                            checkState();
 +
 +                            Row row = handler.concat(left, rightMaterialized.get(rightIdx++));
 +
 +                            if (!cond.test(row))
 +                                continue;
 +
 +                            requested--;
 +                            downstream().push(row);
 +                        }
 +
 +                        if (rightIdx == rightMaterialized.size()) {
 +                            left = null;
 +                            rightIdx = 0;
 +                        }
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null && leftInBuf.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class LeftJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> rightRowFactory;
 +
 +        /** Whether current left row was matched or not. */
 +        private boolean matched;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public LeftJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond, RowHandler.RowFactory<Row> rightRowFactory) {
 +            super(ctx, rowType, cond);
 +
 +            this.rightRowFactory = rightRowFactory;
 +        }
 +
 +        /** */
 +        @Override protected void rewindInternal() {
 +            matched = false;
 +            left = null;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                inLoop = true;
 +                try {
 +                    while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                        if (left == null) {
 +                            left = leftInBuf.remove();
 +
 +                            matched = false;
 +                        }
 +
 +                        while (requested > 0 && rightIdx < rightMaterialized.size()) {
 +                            checkState();
 +
 +                            Row row = handler.concat(left, rightMaterialized.get(rightIdx++));
 +
 +                            if (!cond.test(row))
 +                                continue;
 +
 +                            requested--;
 +                            matched = true;
 +                            downstream().push(row);
 +                        }
 +
 +                        if (rightIdx == rightMaterialized.size()) {
 +                            boolean wasPushed = false;
 +
 +                            if (!matched && requested > 0) {
 +                                requested--;
 +                                wasPushed = true;
 +
 +                                downstream().push(handler.concat(left, rightRowFactory.create()));
 +                            }
 +
 +                            if (matched || wasPushed) {
 +                                left = null;
 +                                rightIdx = 0;
 +                            }
 +                        }
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null && leftInBuf.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class RightJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> leftRowFactory;
 +
 +        /** */
 +        private BitSet rightNotMatchedIndexes;
 +
 +        /** */
 +        private int lastPushedInd;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public RightJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond, RowHandler.RowFactory<Row> leftRowFactory) {
 +            super(ctx, rowType, cond);
 +
 +            this.leftRowFactory = leftRowFactory;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            rightNotMatchedIndexes.clear();
 +            lastPushedInd = 0;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                if (rightNotMatchedIndexes == null) {
 +                    rightNotMatchedIndexes = new BitSet(rightMaterialized.size());
 +
 +                    rightNotMatchedIndexes.set(0, rightMaterialized.size());
 +                }
 +
 +                inLoop = true;
 +                try {
 +                    while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                        if (left == null)
 +                            left = leftInBuf.remove();
 +
 +                        while (requested > 0 && rightIdx < rightMaterialized.size()) {
 +                            checkState();
 +
 +                            Row right = rightMaterialized.get(rightIdx++);
 +                            Row joined = handler.concat(left, right);
 +
 +                            if (!cond.test(joined))
 +                                continue;
 +
 +                            requested--;
 +                            rightNotMatchedIndexes.clear(rightIdx - 1);
 +                            downstream().push(joined);
 +                        }
 +
 +                        if (rightIdx == rightMaterialized.size()) {
 +                            left = null;
 +                            rightIdx = 0;
 +                        }
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingLeft == NOT_WAITING && requested > 0 && (rightNotMatchedIndexes != null && !rightNotMatchedIndexes.isEmpty())) {
 +                assert lastPushedInd >= 0;
 +
 +                inLoop = true;
 +                try {
 +                    for (lastPushedInd = rightNotMatchedIndexes.nextSetBit(lastPushedInd);;
 +                        lastPushedInd = rightNotMatchedIndexes.nextSetBit(lastPushedInd + 1)
 +                    ) {
 +                        checkState();
 +
 +                        if (lastPushedInd < 0)
 +                            break;
 +
 +                        Row row = handler.concat(leftRowFactory.create(), rightMaterialized.get(lastPushedInd));
 +
 +                        rightNotMatchedIndexes.clear(lastPushedInd);
 +
 +                        requested--;
 +                        downstream().push(row);
 +
 +                        if (lastPushedInd == Integer.MAX_VALUE || requested <= 0)
 +                            break;
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null
 +                && leftInBuf.isEmpty() && rightNotMatchedIndexes.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class FullOuterJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** Left row factory. */
 +        private final RowHandler.RowFactory<Row> leftRowFactory;
 +
 +        /** Right row factory. */
 +        private final RowHandler.RowFactory<Row> rightRowFactory;
 +
 +        /** Whether current left row was matched or not. */
 +        private boolean leftMatched;
 +
 +        /** */
 +        private BitSet rightNotMatchedIndexes;
 +
 +        /** */
 +        private int lastPushedInd;
 +
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public FullOuterJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond, RowHandler.RowFactory<Row> leftRowFactory,
 +            RowHandler.RowFactory<Row> rightRowFactory) {
 +            super(ctx, rowType, cond);
 +
 +            this.leftRowFactory = leftRowFactory;
 +            this.rightRowFactory = rightRowFactory;
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            leftMatched = false;
 +            rightNotMatchedIndexes.clear();
 +            lastPushedInd = 0;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                if (rightNotMatchedIndexes == null) {
 +                    rightNotMatchedIndexes = new BitSet(rightMaterialized.size());
 +
 +                    rightNotMatchedIndexes.set(0, rightMaterialized.size());
 +                }
 +
 +                inLoop = true;
 +                try {
 +                    while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                        if (left == null) {
 +                            left = leftInBuf.remove();
 +
 +                            leftMatched = false;
 +                        }
 +
 +                        while (requested > 0 && rightIdx < rightMaterialized.size()) {
 +                            checkState();
 +
 +                            Row right = rightMaterialized.get(rightIdx++);
 +                            Row joined = handler.concat(left, right);
 +
 +                            if (!cond.test(joined))
 +                                continue;
 +
 +                            requested--;
 +                            leftMatched = true;
 +                            rightNotMatchedIndexes.clear(rightIdx - 1);
 +                            downstream().push(joined);
 +                        }
 +
 +                        if (rightIdx == rightMaterialized.size()) {
 +                            boolean wasPushed = false;
 +
 +                            if (!leftMatched && requested > 0) {
 +                                requested--;
 +                                wasPushed = true;
 +
 +                                downstream().push(handler.concat(left, rightRowFactory.create()));
 +                            }
 +
 +                            if (leftMatched || wasPushed) {
 +                                left = null;
 +                                rightIdx = 0;
 +                            }
 +                        }
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingLeft == NOT_WAITING && requested > 0 && (rightNotMatchedIndexes != null && !rightNotMatchedIndexes.isEmpty())) {
 +                assert lastPushedInd >= 0;
 +
 +                inLoop = true;
 +                try {
 +                    for (lastPushedInd = rightNotMatchedIndexes.nextSetBit(lastPushedInd);;
 +                        lastPushedInd = rightNotMatchedIndexes.nextSetBit(lastPushedInd + 1)
 +                    ) {
 +                        checkState();
 +
 +                        if (lastPushedInd < 0)
 +                            break;
 +
 +                        Row row = handler.concat(leftRowFactory.create(), rightMaterialized.get(lastPushedInd));
 +
 +                        rightNotMatchedIndexes.clear(lastPushedInd);
 +
 +                        requested--;
 +                        downstream().push(row);
 +
 +                        if (lastPushedInd == Integer.MAX_VALUE || requested <= 0)
 +                            break;
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null
 +                && leftInBuf.isEmpty() && rightNotMatchedIndexes.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class SemiJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public SemiJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond) {
 +            super(ctx, rowType, cond);
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                    if (left == null)
 +                        left = leftInBuf.remove();
 +
 +                    boolean matched = false;
 +
 +                    while (!matched && requested > 0 && rightIdx < rightMaterialized.size()) {
 +                        checkState();
 +
 +                        Row row = handler.concat(left, rightMaterialized.get(rightIdx++));
 +
 +                        if (!cond.test(row))
 +                            continue;
 +
 +                        requested--;
 +                        downstream().push(left);
 +
 +                        matched = true;
 +                    }
 +
 +                    if (matched || rightIdx == rightMaterialized.size()) {
 +                        left = null;
 +                        rightIdx = 0;
 +                    }
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null
 +                && leftInBuf.isEmpty()) {
 +                downstream().end();
 +                requested = 0;
 +            }
 +        }
 +    }
 +
 +    /** */
 +    private static class AntiJoin<Row> extends NestedLoopJoinNode<Row> {
 +        /** */
 +        private Row left;
 +
 +        /** */
 +        private int rightIdx;
 +
 +        /**
 +         * @param ctx Execution context.
 +         * @param cond Join expression.
 +         */
 +        public AntiJoin(ExecutionContext<Row> ctx, RelDataType rowType, Predicate<Row> cond) {
 +            super(ctx, rowType, cond);
 +        }
 +
 +        /** */
 +        @Override protected void rewindInternal() {
 +            left = null;
 +            rightIdx = 0;
 +
 +            super.rewindInternal();
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected void join() throws Exception {
 +            if (waitingRight == NOT_WAITING) {
 +                inLoop = true;
 +                try {
 +                    while (requested > 0 && (left != null || !leftInBuf.isEmpty())) {
 +                        if (left == null)
 +                            left = leftInBuf.remove();
 +
 +                        boolean matched = false;
 +
 +                        while (!matched && rightIdx < rightMaterialized.size()) {
 +                            checkState();
 +
 +                            Row row = handler.concat(left, rightMaterialized.get(rightIdx++));
 +
 +                            if (cond.test(row))
 +                                matched = true;
 +                        }
 +
 +                        if (!matched) {
 +                            requested--;
 +                            downstream().push(left);
 +                        }
 +
 +                        left = null;
 +                        rightIdx = 0;
 +                    }
 +                }
 +                finally {
 +                    inLoop = false;
 +                }
 +            }
 +
 +            if (waitingRight == 0)
 +                rightSource().request(waitingRight = IN_BUFFER_SIZE);
 +
 +            if (waitingLeft == 0 && leftInBuf.isEmpty())
 +                leftSource().request(waitingLeft = IN_BUFFER_SIZE);
 +
 +            if (requested > 0 && waitingLeft == NOT_WAITING && waitingRight == NOT_WAITING && left == null && leftInBuf.isEmpty()) {
 +                requested = 0;
 +                downstream().end();
 +            }
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/AffinityServiceImpl.java
index 4589e55,0000000..1471957
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/AffinityServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/AffinityServiceImpl.java
@@@ -1,63 -1,0 +1,63 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.metadata;
 +
 +import java.util.function.ToIntFunction;
 +import org.apache.ignite.cache.affinity.AffinityFunction;
 +import org.apache.ignite.internal.GridKernalContext;
 +import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 +import org.apache.ignite.internal.processors.query.calcite.util.AbstractService;
 +import org.apache.ignite.internal.util.typedef.internal.CU;
 +import org.apache.ignite.internal.util.typedef.internal.U;
 +
 +/**
 + *
 + */
 +public class AffinityServiceImpl extends AbstractService implements AffinityService {
 +    /** */
-     private GridCacheSharedContext<?,?> cacheSharedContext;
++    private GridCacheSharedContext<?, ?> cacheSharedContext;
 +
 +    /**
 +     * @param ctx Kernal.
 +     */
 +    public AffinityServiceImpl(GridKernalContext ctx) {
 +        super(ctx);
 +    }
 +
 +    /**
 +     * @param cacheSharedContext Cache shared context.
 +     */
-     public void cacheSharedContext(GridCacheSharedContext<?,?> cacheSharedContext) {
++    public void cacheSharedContext(GridCacheSharedContext<?, ?> cacheSharedContext) {
 +        this.cacheSharedContext = cacheSharedContext;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void onStart(GridKernalContext ctx) {
 +        cacheSharedContext(ctx.cache().context());
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public ToIntFunction<Object> affinity(int cacheId) {
 +        if (cacheId == CU.UNDEFINED_CACHE_ID)
 +            return k -> k == null ? 0 : U.safeAbs(k.hashCode());
 +
 +        AffinityFunction affinity = cacheSharedContext.cacheContext(cacheId).group().affinityFunction();
 +
 +        return affinity::partition;
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java
index f761784,0000000..ab9aed1
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/ColocationGroup.java
@@@ -1,351 -1,0 +1,354 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.metadata;
 +
 +import java.nio.ByteBuffer;
 +import java.util.ArrayList;
 +import java.util.Collections;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Objects;
 +import java.util.Set;
 +import java.util.UUID;
 +import org.apache.ignite.IgniteSystemProperties;
 +import org.apache.ignite.internal.GridDirectCollection;
 +import org.apache.ignite.internal.GridDirectTransient;
 +import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
 +import org.apache.ignite.internal.processors.query.calcite.message.MarshalableMessage;
 +import org.apache.ignite.internal.processors.query.calcite.message.MarshallingContext;
 +import org.apache.ignite.internal.processors.query.calcite.message.MessageType;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteRel;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.GridIntList;
 +import org.apache.ignite.internal.util.UUIDCollectionMessage;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.apache.ignite.internal.util.typedef.internal.U;
 +import org.apache.ignite.plugin.extensions.communication.Message;
 +import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
 +import org.apache.ignite.plugin.extensions.communication.MessageReader;
 +import org.apache.ignite.plugin.extensions.communication.MessageWriter;
 +import org.jetbrains.annotations.NotNull;
 +
 +/** */
 +public class ColocationGroup implements MarshalableMessage {
 +    /** */
-     private static final int SYNTHETIC_PARTITIONS_COUNT = IgniteSystemProperties.getInteger("IGNITE_CALCITE_SYNTHETIC_PARTITIONS_COUNT", 512);
++    private static final int SYNTHETIC_PARTITIONS_COUNT =
++        IgniteSystemProperties.getInteger("IGNITE_CALCITE_SYNTHETIC_PARTITIONS_COUNT", 512);
 +
 +    /** */
 +    @GridDirectCollection(Long.class)
 +    private List<Long> sourceIds;
 +
 +    /** */
 +    @GridDirectCollection(UUID.class)
 +    private List<UUID> nodeIds;
 +
 +    /** */
 +    @GridDirectTransient
 +    private List<List<UUID>> assignments;
 +
 +    /** */
 +    @GridDirectCollection(Message.class)
 +    private List<UUIDCollectionMessage> assignments0;
 +
 +    /** */
 +    public static ColocationGroup forNodes(List<UUID> nodeIds) {
 +        return new ColocationGroup(null, nodeIds, null);
 +    }
 +
 +    /** */
 +    public static ColocationGroup forAssignments(List<List<UUID>> assignments) {
 +        return new ColocationGroup(null, null, assignments);
 +    }
 +
 +    /** */
 +    public static ColocationGroup forSourceId(long sourceId) {
 +        return new ColocationGroup(Collections.singletonList(sourceId), null, null);
 +    }
 +
 +    /** */
 +    public ColocationGroup() {
 +    }
 +
 +    /** */
 +    private ColocationGroup(List<Long> sourceIds, List<UUID> nodeIds, List<List<UUID>> assignments) {
 +        this.sourceIds = sourceIds;
 +        this.nodeIds = nodeIds;
 +        this.assignments = assignments;
 +    }
 +
 +    /**
 +     * @return Lists of colocation group sources.
 +     */
 +    public List<Long> sourceIds() {
 +        return sourceIds == null ? Collections.emptyList() : sourceIds;
 +    }
 +
 +    /**
 +     * @return Lists of nodes capable to execute a query fragment for what the mapping is calculated.
 +     */
 +    public List<UUID> nodeIds() {
 +        return nodeIds == null ? Collections.emptyList() : nodeIds;
 +    }
 +
 +    /**
 +     * @return List of partitions (index) and nodes (items) having an appropriate partition in
 +     * {@link GridDhtPartitionState#OWNING} state, calculated for distributed tables, involved in query execution.
 +     */
 +    public List<List<UUID>> assignments() {
 +        return assignments == null ? Collections.emptyList() : assignments;
 +    }
 +
 +    /**
 +     * Prunes involved partitions (hence nodes, involved in query execution) on the basis of filter,
 +     * its distribution, query parameters and original nodes mapping.
 +     * @param rel Filter.
 +     * @return Resulting nodes mapping.
 +     */
 +    public ColocationGroup prune(IgniteRel rel) {
 +        return this; // TODO https://issues.apache.org/jira/browse/IGNITE-12455
 +    }
 +
 +    /** */
 +    public boolean belongs(long sourceId) {
 +        return sourceIds != null && sourceIds.contains(sourceId);
 +    }
 +
 +    /**
 +     * Merges this mapping with given one.
 +     * @param other Mapping to merge with.
 +     * @return Merged nodes mapping.
 +     * @throws ColocationMappingException If involved nodes intersection is empty, hence there is no nodes capable to execute
 +     * being calculated fragment.
 +     */
 +    public ColocationGroup colocate(ColocationGroup other) throws ColocationMappingException {
 +        List<Long> sourceIds;
 +        if (this.sourceIds == null || other.sourceIds == null)
 +            sourceIds = U.firstNotNull(this.sourceIds, other.sourceIds);
 +        else
 +            sourceIds = Commons.combine(this.sourceIds, other.sourceIds);
 +
 +        List<UUID> nodeIds;
 +        if (this.nodeIds == null || other.nodeIds == null)
 +            nodeIds = U.firstNotNull(this.nodeIds, other.nodeIds);
 +        else
 +            nodeIds = Commons.intersect(other.nodeIds, this.nodeIds);
 +
 +        if (nodeIds != null && nodeIds.isEmpty()) {
 +            throw new ColocationMappingException("Failed to map fragment to location. " +
 +                "Replicated query parts are not co-located on all nodes");
 +        }
 +
 +        List<List<UUID>> assignments;
 +        if (this.assignments == null || other.assignments == null) {
 +            assignments = U.firstNotNull(this.assignments, other.assignments);
 +
 +            if (assignments != null && nodeIds != null) {
 +                Set<UUID> filter = new HashSet<>(nodeIds);
 +                List<List<UUID>> assignments0 = new ArrayList<>(assignments.size());
 +
 +                for (int i = 0; i < assignments.size(); i++) {
 +                    List<UUID> assignment = Commons.intersect(filter, assignments.get(i));
 +
-                     if (assignment.isEmpty()) // TODO check with partition filters
-                         throw new ColocationMappingException("Failed to map fragment to location. Partition mapping is empty [part=" + i + "]");
++                    if (assignment.isEmpty()) { // TODO check with partition filters
++                        throw new ColocationMappingException("Failed to map fragment to location. " +
++                            "Partition mapping is empty [part=" + i + "]");
++                    }
 +
 +                    assignments0.add(assignment);
 +                }
 +
 +                assignments = assignments0;
 +            }
 +        }
 +        else {
 +            assert this.assignments.size() == other.assignments.size();
 +            assignments = new ArrayList<>(this.assignments.size());
 +            Set<UUID> filter = nodeIds == null ? null : new HashSet<>(nodeIds);
 +            for (int i = 0; i < this.assignments.size(); i++) {
 +                List<UUID> assignment = Commons.intersect(this.assignments.get(i), other.assignments.get(i));
 +
 +                if (filter != null)
 +                    assignment.retainAll(filter);
 +
 +                if (assignment.isEmpty()) // TODO check with partition filters
 +                    throw new ColocationMappingException("Failed to map fragment to location. Partition mapping is empty [part=" + i + "]");
 +
 +                assignments.add(assignment);
 +            }
 +        }
 +
 +        return new ColocationGroup(sourceIds, nodeIds, assignments);
 +    }
 +
 +    /** */
 +    public ColocationGroup finalaze() {
 +        if (assignments == null && nodeIds == null)
 +            return this;
 +
 +        if (assignments != null) {
 +            List<List<UUID>> assignments = new ArrayList<>(this.assignments.size());
 +            Set<UUID> nodes = new HashSet<>();
 +            for (List<UUID> assignment : this.assignments) {
 +                UUID first = F.first(assignment);
 +                if (first != null)
 +                    nodes.add(first);
 +                assignments.add(first != null ? Collections.singletonList(first) : Collections.emptyList());
 +            }
 +
 +            return new ColocationGroup(sourceIds, new ArrayList<>(nodes), assignments);
 +        }
 +
 +        return forNodes0(nodeIds);
 +    }
 +
 +    /** */
 +    public ColocationGroup mapToNodes(List<UUID> nodeIds) {
 +        return !F.isEmpty(this.nodeIds) ? this : forNodes0(nodeIds);
 +    }
 +
 +    /** */
 +    @NotNull private ColocationGroup forNodes0(List<UUID> nodeIds) {
 +        List<List<UUID>> assignments = new ArrayList<>(SYNTHETIC_PARTITIONS_COUNT);
 +        for (int i = 0; i < SYNTHETIC_PARTITIONS_COUNT; i++)
 +            assignments.add(F.asList(nodeIds.get(i % nodeIds.size())));
 +        return new ColocationGroup(sourceIds, nodeIds, assignments);
 +    }
 +
 +    /**
 +     * Returns List of partitions to scan on the given node.
 +     *
 +     * @param nodeId Cluster node ID.
 +     * @return List of partitions to scan on the given node.
 +     */
 +    public int[] partitions(UUID nodeId) {
 +        GridIntList parts = new GridIntList(assignments.size());
 +
 +        for (int i = 0; i < assignments.size(); i++) {
 +            List<UUID> assignment = assignments.get(i);
 +            if (Objects.equals(nodeId, F.first(assignment)))
 +                parts.add(i);
 +        }
 +
 +        return parts.array();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public MessageType type() {
 +        return MessageType.COLOCATION_GROUP;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) {
 +        writer.setBuffer(buf);
 +
 +        if (!writer.isHeaderWritten()) {
 +            if (!writer.writeHeader(directType(), fieldsCount()))
 +                return false;
 +
 +            writer.onHeaderWritten();
 +        }
 +
 +        switch (writer.state()) {
 +            case 0:
 +                if (!writer.writeCollection("assignments0", assignments0, MessageCollectionItemType.MSG))
 +                    return false;
 +
 +                writer.incrementState();
 +
 +            case 1:
 +                if (!writer.writeCollection("nodeIds", nodeIds, MessageCollectionItemType.UUID))
 +                    return false;
 +
 +                writer.incrementState();
 +
 +            case 2:
 +                if (!writer.writeCollection("sourceIds", sourceIds, MessageCollectionItemType.LONG))
 +                    return false;
 +
 +                writer.incrementState();
 +
 +        }
 +
 +        return true;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) {
 +        reader.setBuffer(buf);
 +
 +        if (!reader.beforeMessageRead())
 +            return false;
 +
 +        switch (reader.state()) {
 +            case 0:
 +                assignments0 = reader.readCollection("assignments0", MessageCollectionItemType.MSG);
 +
 +                if (!reader.isLastRead())
 +                    return false;
 +
 +                reader.incrementState();
 +
 +            case 1:
 +                nodeIds = reader.readCollection("nodeIds", MessageCollectionItemType.UUID);
 +
 +                if (!reader.isLastRead())
 +                    return false;
 +
 +                reader.incrementState();
 +
 +            case 2:
 +                sourceIds = reader.readCollection("sourceIds", MessageCollectionItemType.LONG);
 +
 +                if (!reader.isLastRead())
 +                    return false;
 +
 +                reader.incrementState();
 +
 +        }
 +
 +        return reader.afterMessageRead(ColocationGroup.class);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public byte fieldsCount() {
 +        return 3;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void prepareMarshal(MarshallingContext ctx) {
 +        if (assignments != null && assignments0 == null)
 +            assignments0 = Commons.transform(assignments, this::transform);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void prepareUnmarshal(MarshallingContext ctx) {
 +        if (assignments0 != null && assignments == null)
 +            assignments = Commons.transform(assignments0, this::transform);
 +    }
 +
 +    /** */
 +    private List<UUID> transform(UUIDCollectionMessage message) {
 +        return message.uuids() instanceof List ? (List<UUID>)message.uuids() : new ArrayList<>(message.uuids());
 +    }
 +
 +    /** */
 +    private UUIDCollectionMessage transform(List<UUID> uuids) {
 +        return new UUIDCollectionMessage(uuids);
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdSelectivity.java
index 86ad57a,0000000..83bfc8f
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdSelectivity.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdSelectivity.java
@@@ -1,123 -1,0 +1,124 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.metadata;
 +
 +import java.util.List;
 +
 +import org.apache.calcite.plan.RelOptUtil;
 +import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
 +import org.apache.calcite.rel.metadata.RelMdSelectivity;
 +import org.apache.calcite.rel.metadata.RelMdUtil;
 +import org.apache.calcite.rel.metadata.RelMetadataProvider;
 +import org.apache.calcite.rel.metadata.RelMetadataQuery;
 +import org.apache.calcite.rex.RexCall;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.calcite.rex.RexUtil;
 +import org.apache.calcite.sql.SqlKind;
 +import org.apache.calcite.util.BuiltInMethod;
 +import org.apache.ignite.internal.processors.query.calcite.rel.AbstractIndexScan;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteHashIndexSpool;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteSortedIndexSpool;
 +import org.apache.ignite.internal.processors.query.calcite.rel.ProjectableFilterableTableScan;
 +import org.apache.ignite.internal.processors.query.calcite.util.RexUtils;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +/** */
 +public class IgniteMdSelectivity extends RelMdSelectivity {
 +    /** */
 +    public static final RelMetadataProvider SOURCE =
 +        ReflectiveRelMetadataProvider.reflectiveSource(
 +            BuiltInMethod.SELECTIVITY.method, new IgniteMdSelectivity());
 +
 +    /** */
 +    public Double getSelectivity(AbstractIndexScan rel, RelMetadataQuery mq, RexNode predicate) {
 +        if (predicate != null)
 +            return getSelectivity((ProjectableFilterableTableScan)rel, mq, predicate);
 +
 +        List<RexNode> lowerCond = rel.lowerCondition();
 +        List<RexNode> upperCond = rel.upperCondition();
 +
 +        if (F.isEmpty(lowerCond) && F.isEmpty(upperCond))
 +            return RelMdUtil.guessSelectivity(rel.condition());
 +
 +        double idxSelectivity = 1.0;
-         int len = F.isEmpty(lowerCond) ? upperCond.size() : F.isEmpty(upperCond) ? lowerCond.size() : Math.max(lowerCond.size(), upperCond.size());
++        int len = F.isEmpty(lowerCond) ? upperCond.size() : F.isEmpty(upperCond) ? lowerCond.size() :
++            Math.max(lowerCond.size(), upperCond.size());
 +
 +        for (int i = 0; i < len; i++) {
 +            RexCall lower = F.isEmpty(lowerCond) || lowerCond.size() <= i ? null : (RexCall)lowerCond.get(i);
 +            RexCall upper = F.isEmpty(upperCond) || upperCond.size() <= i ? null : (RexCall)upperCond.get(i);
 +
 +            assert lower != null || upper != null;
 +
 +            if (lower != null && upper != null)
 +                idxSelectivity *= lower.op.kind == SqlKind.EQUALS ? .1 : .2;
 +            else
 +                idxSelectivity *= .35;
 +        }
 +
 +        List<RexNode> conjunctions = RelOptUtil.conjunctions(rel.condition());
 +
 +        if (!F.isEmpty(lowerCond))
 +            conjunctions.removeAll(lowerCond);
 +        if (!F.isEmpty(upperCond))
 +            conjunctions.removeAll(upperCond);
 +
 +        RexNode remaining = RexUtil.composeConjunction(RexUtils.builder(rel), conjunctions, true);
 +
 +        return idxSelectivity * RelMdUtil.guessSelectivity(remaining);
 +    }
 +
 +    /** */
 +    public Double getSelectivity(ProjectableFilterableTableScan rel, RelMetadataQuery mq, RexNode predicate) {
 +        if (predicate == null)
 +            return RelMdUtil.guessSelectivity(rel.condition());
 +
 +        RexNode condition = rel.pushUpPredicate();
 +        if (condition == null)
 +            return RelMdUtil.guessSelectivity(predicate);
 +
 +        RexNode diff = RelMdUtil.minusPreds(RexUtils.builder(rel), predicate, condition);
 +        return RelMdUtil.guessSelectivity(diff);
 +    }
 +
 +    /** */
 +    public Double getSelectivity(IgniteSortedIndexSpool rel, RelMetadataQuery mq, RexNode predicate) {
 +        if (predicate != null) {
 +            return mq.getSelectivity(rel.getInput(),
 +                RelMdUtil.minusPreds(
 +                    rel.getCluster().getRexBuilder(),
 +                    predicate,
 +                    rel.condition()));
 +        }
 +
 +        return mq.getSelectivity(rel.getInput(), rel.condition());
 +    }
 +
 +    /** */
 +    public Double getSelectivity(IgniteHashIndexSpool rel, RelMetadataQuery mq, RexNode predicate) {
 +        if (predicate != null) {
 +            return mq.getSelectivity(rel.getInput(),
 +                RelMdUtil.minusPreds(
 +                    rel.getCluster().getRexBuilder(),
 +                    predicate,
 +                    rel.condition()));
 +        }
 +
 +        return mq.getSelectivity(rel.getInput(), rel.condition());
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/MappingServiceImpl.java
index b823830,0000000..6f464a3
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/MappingServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/MappingServiceImpl.java
@@@ -1,77 -1,0 +1,78 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.metadata;
 +
 +import java.util.ArrayList;
 +import java.util.List;
 +import java.util.UUID;
 +import java.util.concurrent.ThreadLocalRandom;
 +import java.util.function.Predicate;
 +import java.util.stream.Collectors;
 +import org.apache.ignite.cluster.ClusterNode;
 +import org.apache.ignite.internal.GridKernalContext;
 +import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
 +import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 +import org.apache.ignite.internal.processors.query.calcite.util.AbstractService;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.typedef.F;
 +import org.jetbrains.annotations.NotNull;
 +import org.jetbrains.annotations.Nullable;
 +
 +/**
 + *
 + */
 +public class MappingServiceImpl extends AbstractService implements MappingService {
 +    /** */
 +    private GridDiscoveryManager discoveryManager;
 +
 +    /**
 +     * @param ctx Kernal.
 +     */
 +    public MappingServiceImpl(GridKernalContext ctx) {
 +        super(ctx);
 +    }
 +
 +    /**
 +     * @param discoveryManager Discovery manager.
 +     */
 +    public void discoveryManager(GridDiscoveryManager discoveryManager) {
 +        this.discoveryManager = discoveryManager;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void onStart(GridKernalContext ctx) {
 +        discoveryManager(ctx.discovery());
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override public List<UUID> executionNodes(@NotNull AffinityTopologyVersion topVer, boolean single, @Nullable Predicate<ClusterNode> nodeFilter) {
++    @Override public List<UUID> executionNodes(@NotNull AffinityTopologyVersion topVer, boolean single,
++        @Nullable Predicate<ClusterNode> nodeFilter) {
 +        List<ClusterNode> nodes = new ArrayList<>(discoveryManager.discoCache(topVer).serverNodes());
 +
 +        if (nodeFilter != null)
 +            nodes = nodes.stream().filter(nodeFilter).collect(Collectors.toList());
 +
 +        if (single && nodes.size() > 1)
 +            nodes = F.asList(nodes.get(ThreadLocalRandom.current().nextInt(nodes.size())));
 +
 +        if (F.isEmpty(nodes))
 +            throw new IllegalStateException("failed to map query to execution nodes. Nodes list is empty.");
 +
 +        return Commons.transform(nodes, ClusterNode::id);
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/CalciteQueryFieldMetadata.java
index 4113a1e,0000000..13627ea
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/CalciteQueryFieldMetadata.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/CalciteQueryFieldMetadata.java
@@@ -1,118 -1,0 +1,129 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.prepare;
 +
 +import java.io.IOException;
 +import java.io.ObjectInput;
 +import java.io.ObjectOutput;
++import java.sql.ResultSetMetaData;
 +
 +import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
 +
 +/**
 + *
 + */
 +public class CalciteQueryFieldMetadata implements GridQueryFieldMetadata {
 +    /** */
 +    private String schemaName;
 +
 +    /** */
 +    private String typeName;
 +
 +    /** */
 +    private String fieldName;
 +
 +    /** */
 +    private String fieldTypeName;
 +
 +    /** */
 +    private int precision;
 +
 +    /** */
 +    private int scale;
 +
++    /** */
++    private boolean isNullable;
++
 +    /** Blank constructor for external serialization. */
 +    public CalciteQueryFieldMetadata() {
 +    }
 +
 +    /**
 +     * @param schemaName Schema name.
 +     * @param typeName Type name.
 +     * @param fieldName Field name.
 +     * @param fieldTypeName Field type name.
 +     * @param precision Precision.
 +     * @param scale Scale.
 +     */
-     public CalciteQueryFieldMetadata(String schemaName, String typeName, String fieldName, String fieldTypeName, int precision, int scale) {
++    public CalciteQueryFieldMetadata(String schemaName, String typeName, String fieldName, String fieldTypeName,
++        int precision, int scale, boolean isNullable) {
 +        this.schemaName = schemaName;
 +        this.typeName = typeName;
 +        this.fieldName = fieldName;
 +        this.fieldTypeName = fieldTypeName;
 +        this.precision = precision;
 +        this.scale = scale;
++        this.isNullable = isNullable;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public String schemaName() {
 +        return schemaName;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public String typeName() {
 +        return typeName;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public String fieldName() {
 +        return fieldName;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public String fieldTypeName() {
 +        return fieldTypeName;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public int precision() {
 +        return precision;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public int scale() {
 +        return scale;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void writeExternal(ObjectOutput out) throws IOException {
 +        out.writeUTF(schemaName);
 +        out.writeUTF(typeName);
 +        out.writeUTF(fieldName);
 +        out.writeUTF(fieldTypeName);
 +        out.writeInt(precision);
 +        out.writeInt(scale);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
 +        schemaName = in.readUTF();
 +        typeName = in.readUTF();
 +        fieldName = in.readUTF();
 +        fieldTypeName = in.readUTF();
 +        precision = in.readInt();
 +        scale = in.readInt();
 +    }
++
++    /** {@inheritDoc} */
++    @Override public int nullability() {
++        return isNullable ? ResultSetMetaData.columnNullable : ResultSetMetaData.columnNoNulls;
++    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FieldsMetadata.java
index ed02794,0000000..492926c
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FieldsMetadata.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FieldsMetadata.java
@@@ -1,74 -1,0 +1,75 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.prepare;
 +
 +import java.lang.reflect.Type;
 +import java.util.List;
 +import com.google.common.collect.ImmutableList;
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.calcite.rel.type.RelDataTypeField;
 +import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
 +import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +/**
 + *
 + */
 +public interface FieldsMetadata {
 +    /**
 +     * @return Result row type.
 +     */
 +    RelDataType rowType();
 +
 +    /**
 +     * @return Result row origins (or where a field value comes from).
 +     */
 +    List<List<String>> origins();
 +
 +    /**
 +     * @param typeFactory Type factory.
 +     * @return Query field descriptors collection&
 +     */
 +    default List<GridQueryFieldMetadata> queryFieldsMetadata(IgniteTypeFactory typeFactory) {
 +        RelDataType rowType = rowType();
 +        List<List<String>> origins = origins();
 +        List<RelDataTypeField> fields = rowType.getFieldList();
 +
 +        assert origins == null || fields.size() == origins.size();
 +
 +        ImmutableList.Builder<GridQueryFieldMetadata> b = ImmutableList.builder();
 +
 +        for (int i = 0; i < fields.size(); i++) {
 +            List<String> origin = origins != null ? origins.get(i) : null;
 +            RelDataTypeField field = fields.get(i);
 +            RelDataType fieldType = field.getType();
 +            Type fieldCls = typeFactory.getResultClass(fieldType);
 +
 +            b.add(new CalciteQueryFieldMetadata(
 +                F.isEmpty(origin) ? null : origin.get(0),
 +                F.isEmpty(origin) ? null : origin.get(1),
 +                F.isEmpty(origin) ? field.getName() : origin.get(2),
 +                fieldCls == null ? Void.class.getName() : fieldCls.getTypeName(),
 +                fieldType.getPrecision(),
-                 fieldType.getScale()
++                fieldType.getScale(),
++                fieldType.isNullable()
 +            ));
 +        }
 +
 +        return b.build();
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
index 735fa85,0000000..249a48b
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
@@@ -1,122 -1,0 +1,123 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.prepare;
 +
 +import java.util.ArrayList;
 +import java.util.Deque;
 +import java.util.LinkedList;
 +import java.util.List;
 +
 +import com.google.common.collect.ImmutableList;
 +import org.apache.calcite.plan.RelOptCluster;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteIndexScan;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteReceiver;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteRel;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteSender;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTableScan;
 +import org.apache.ignite.internal.processors.query.calcite.rel.IgniteTrimExchange;
 +
 +/**
 + * Splits a query into a list of query fragments.
 + */
 +public class Splitter extends IgniteRelShuttle {
 +    /** */
 +    private final Deque<FragmentProto> stack = new LinkedList<>();
 +
 +    /** */
 +    private FragmentProto curr;
 +
 +    /** */
 +    public List<Fragment> go(IgniteRel root) {
 +        ArrayList<Fragment> res = new ArrayList<>();
 +
 +        stack.push(new FragmentProto(IdGenerator.nextId(), root));
 +
 +        while (!stack.isEmpty()) {
 +            curr = stack.pop();
 +
 +            curr.root = visit(curr.root);
 +
 +            res.add(curr.build());
 +
 +            curr = null;
 +        }
 +
 +        return res;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel visit(IgniteReceiver rel) {
 +        throw new AssertionError();
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel visit(IgniteExchange rel) {
 +        RelOptCluster cluster = rel.getCluster();
 +
 +        long targetFragmentId = curr.id;
 +        long sourceFragmentId = IdGenerator.nextId();
 +        long exchangeId = sourceFragmentId;
 +
 +        IgniteReceiver receiver = new IgniteReceiver(cluster, rel.getTraitSet(), rel.getRowType(), exchangeId, sourceFragmentId);
-         IgniteSender sender = new IgniteSender(cluster, rel.getTraitSet(), rel.getInput(), exchangeId, targetFragmentId, rel.distribution());
++        IgniteSender sender = new IgniteSender(cluster, rel.getTraitSet(), rel.getInput(), exchangeId, targetFragmentId,
++            rel.distribution());
 +
 +        curr.remotes.add(receiver);
 +        stack.push(new FragmentProto(sourceFragmentId, sender));
 +
 +        return receiver;
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel visit(IgniteTrimExchange rel) {
 +        return ((IgniteTrimExchange)processNode(rel)).clone(IdGenerator.nextId());
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel visit(IgniteIndexScan rel) {
 +        return rel.clone(IdGenerator.nextId());
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel visit(IgniteTableScan rel) {
 +        return rel.clone(IdGenerator.nextId());
 +    }
 +
 +    /** */
 +    private static class FragmentProto {
 +        /** */
 +        private final long id;
 +
 +        /** */
 +        private IgniteRel root;
 +
 +        /** */
 +        private final ImmutableList.Builder<IgniteReceiver> remotes = ImmutableList.builder();
 +
 +        /** */
 +        private FragmentProto(long id, IgniteRel root) {
 +            this.id = id;
 +            this.root = root;
 +        }
 +
 +        Fragment build() {
 +            return new Fragment(id, root, remotes.build());
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
index 984ffb9,0000000..f0c43ba
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
@@@ -1,372 -1,0 +1,373 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.prepare.ddl;
 +
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.function.BiConsumer;
 +import java.util.function.BiFunction;
 +import java.util.function.Function;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
 +
 +import org.apache.calcite.rel.type.RelDataType;
 +import org.apache.calcite.sql.SqlDdl;
 +import org.apache.calcite.sql.SqlIdentifier;
 +import org.apache.calcite.sql.SqlLiteral;
 +import org.apache.calcite.sql.SqlNode;
 +import org.apache.calcite.sql.SqlNodeList;
 +import org.apache.calcite.sql.SqlNumericLiteral;
 +import org.apache.calcite.sql.ddl.SqlColumnDeclaration;
 +import org.apache.calcite.sql.ddl.SqlDropTable;
 +import org.apache.calcite.sql.ddl.SqlKeyConstraint;
 +import org.apache.ignite.cache.CacheAtomicityMode;
 +import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 +import org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode;
 +import org.apache.ignite.internal.processors.query.IgniteSQLException;
 +import org.apache.ignite.internal.processors.query.QueryUtils;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner;
 +import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 +import org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTable;
 +import org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOption;
 +import org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +import static org.apache.calcite.sql.type.SqlTypeName.BOOLEAN;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.AFFINITY_KEY;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.ATOMICITY;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.BACKUPS;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.CACHE_GROUP;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.CACHE_NAME;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.DATA_REGION;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.ENCRYPTED;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.KEY_TYPE;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.TEMPLATE;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.VALUE_TYPE;
 +import static org.apache.ignite.internal.processors.query.calcite.sql.IgniteSqlCreateTableOptionEnum.WRITE_SYNCHRONIZATION_MODE;
 +
 +/** */
 +public class DdlSqlToCommandConverter {
 +    /** Processor that validates a value is a Sql Identifier. */
 +    private static final BiFunction<IgniteSqlCreateTableOption, PlanningContext, String> VALUE_IS_IDENTIFIER_VALIDATOR = (opt, ctx) -> {
 +        if (!(opt.value() instanceof SqlIdentifier) || !((SqlIdentifier)opt.value()).isSimple())
 +            throwOptionParsingException(opt, "a simple identifier", ctx.query());
 +
 +        return ((SqlIdentifier)opt.value()).getSimple();
 +    };
 +
 +    /** Processor that unconditionally throws an AssertionException. */
 +    private static final TableOptionProcessor<Void> UNSUPPORTED_OPTION_PROCESSOR = new TableOptionProcessor<>(
 +        null,
 +        (opt, ctx) -> {
 +            throw new AssertionError("Unsupported option " + opt.key());
 +        },
 +        null);
 +
 +    /** Map of the supported table option processors. */
 +    private final Map<IgniteSqlCreateTableOptionEnum, TableOptionProcessor<?>> tblOptionProcessors = Stream.of(
 +        new TableOptionProcessor<>(TEMPLATE, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::templateName),
 +        new TableOptionProcessor<>(AFFINITY_KEY, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::affinityKey),
 +        new TableOptionProcessor<>(CACHE_GROUP, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::cacheGroup),
 +        new TableOptionProcessor<>(CACHE_NAME, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::cacheName),
 +        new TableOptionProcessor<>(DATA_REGION, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::dataRegionName),
 +        new TableOptionProcessor<>(KEY_TYPE, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::keyTypeName),
 +        new TableOptionProcessor<>(VALUE_TYPE, VALUE_IS_IDENTIFIER_VALIDATOR, CreateTableCommand::valueTypeName),
 +        new TableOptionProcessor<>(ATOMICITY, validatorForEnumValue(CacheAtomicityMode.class), CreateTableCommand::atomicityMode),
-         new TableOptionProcessor<>(WRITE_SYNCHRONIZATION_MODE, validatorForEnumValue(CacheWriteSynchronizationMode.class), CreateTableCommand::writeSynchronizationMode),
++        new TableOptionProcessor<>(WRITE_SYNCHRONIZATION_MODE, validatorForEnumValue(CacheWriteSynchronizationMode.class),
++            CreateTableCommand::writeSynchronizationMode),
 +        new TableOptionProcessor<>(BACKUPS, (opt, ctx) -> {
 +                if (!(opt.value() instanceof SqlNumericLiteral)
 +                    || !((SqlNumericLiteral)opt.value()).isInteger()
 +                    || ((SqlLiteral)opt.value()).intValue(true) < 0
 +                )
 +                    throwOptionParsingException(opt, "a non-negative integer", ctx.query());
 +
 +                return ((SqlLiteral)opt.value()).intValue(true);
 +            }, CreateTableCommand::backups),
 +        new TableOptionProcessor<>(ENCRYPTED, (opt, ctx) -> {
 +            if (!(opt.value() instanceof SqlLiteral) && ((SqlLiteral)opt.value()).getTypeName() != BOOLEAN)
 +                throwOptionParsingException(opt, "a boolean", ctx.query());
 +
 +            return ((SqlLiteral)opt.value()).booleanValue();
 +        }, CreateTableCommand::encrypted)
 +        ).collect(Collectors.toMap(TableOptionProcessor::key, Function.identity()));
 +
 +    /**
 +     * Converts a given ddl AST to a ddl command.
 +     *
 +     * @param ddlNode Root node of the given AST.
 +     * @param ctx Planning context.
 +     */
 +    public DdlCommand convert(SqlDdl ddlNode, PlanningContext ctx) {
 +        if (ddlNode instanceof IgniteSqlCreateTable)
 +            return convertCreateTable((IgniteSqlCreateTable)ddlNode, ctx);
 +
 +        if (ddlNode instanceof SqlDropTable)
 +            return convertDropTable((SqlDropTable)ddlNode, ctx);
 +
 +        throw new IgniteSQLException("Unsupported operation [" +
 +            "sqlNodeKind=" + ddlNode.getKind() + "; " +
 +            "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
 +    }
 +
 +    /**
 +     * Converts a given CreateTable AST to a CreateTable command.
 +     *
 +     * @param createTblNode Root node of the given AST.
 +     * @param ctx Planning context.
 +     */
 +    private CreateTableCommand convertCreateTable(IgniteSqlCreateTable createTblNode, PlanningContext ctx) {
 +        CreateTableCommand createTblCmd = new CreateTableCommand();
 +
 +        createTblCmd.schemaName(deriveSchemaName(createTblNode.name(), ctx));
 +        createTblCmd.tableName(deriveObjectName(createTblNode.name(), ctx, "tableName"));
 +        createTblCmd.ifNotExists(createTblNode.ifNotExists());
 +        createTblCmd.templateName(QueryUtils.TEMPLATE_PARTITIONED);
 +
 +        if (createTblNode.createOptionList() != null) {
 +            for (SqlNode optNode : createTblNode.createOptionList().getList()) {
 +                IgniteSqlCreateTableOption opt = (IgniteSqlCreateTableOption)optNode;
 +
 +                tblOptionProcessors.getOrDefault(opt.key(), UNSUPPORTED_OPTION_PROCESSOR).process(opt, ctx, createTblCmd);
 +            }
 +        }
 +
 +        List<SqlColumnDeclaration> colDeclarations = createTblNode.columnList().getList().stream()
 +            .filter(SqlColumnDeclaration.class::isInstance)
 +            .map(SqlColumnDeclaration.class::cast)
 +            .collect(Collectors.toList());
 +
 +        IgnitePlanner planner = ctx.planner();
 +
 +        List<ColumnDefinition> cols = new ArrayList<>();
 +
 +        for (SqlColumnDeclaration col : colDeclarations) {
 +            if (!col.name.isSimple())
 +                throw new IgniteSQLException("Unexpected value of columnName [" +
 +                    "expected a simple identifier, but was " + col.name + "; " +
 +                    "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.PARSING);
 +
 +            String name = col.name.getSimple();
 +            RelDataType type = planner.convert(col.dataType);
 +
 +            Object dflt = null;
 +            if (col.expression != null)
 +                dflt = ((SqlLiteral)col.expression).getValue();
 +
 +            cols.add(new ColumnDefinition(name, type, dflt));
 +        }
 +
 +        createTblCmd.columns(cols);
 +
 +        List<SqlKeyConstraint> pkConstraints = createTblNode.columnList().getList().stream()
 +            .filter(SqlKeyConstraint.class::isInstance)
 +            .map(SqlKeyConstraint.class::cast)
 +            .collect(Collectors.toList());
 +
 +        if (pkConstraints.size() > 1)
 +            throw new IgniteSQLException("Unexpected amount of primary key constraints [" +
 +                "expected at most one, but was " + pkConstraints.size() + "; " +
 +                "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.PARSING);
 +
 +        if (!F.isEmpty(pkConstraints)) {
 +            Set<String> dedupSet = new HashSet<>();
 +
 +            List<String> pkCols = pkConstraints.stream()
 +                .map(pk -> pk.getOperandList().get(1))
 +                .map(SqlNodeList.class::cast)
 +                .flatMap(l -> l.getList().stream())
 +                .map(SqlIdentifier.class::cast)
 +                .map(SqlIdentifier::getSimple)
 +                .filter(dedupSet::add)
 +                .collect(Collectors.toList());
 +
 +            createTblCmd.primaryKeyColumns(pkCols);
 +        }
 +
 +        return createTblCmd;
 +    }
 +
 +    /**
 +     * Converts a given DropTable AST to a DropTable command.
 +     *
 +     * @param dropTblNode Root node of the given AST.
 +     * @param ctx Planning context.
 +     */
 +    private DropTableCommand convertDropTable(SqlDropTable dropTblNode, PlanningContext ctx) {
 +        DropTableCommand dropTblCmd = new DropTableCommand();
 +
 +        dropTblCmd.schemaName(deriveSchemaName(dropTblNode.name, ctx));
 +        dropTblCmd.tableName(deriveObjectName(dropTblNode.name, ctx, "tableName"));
 +        dropTblCmd.ifExists(dropTblNode.ifExists);
 +
 +        return dropTblCmd;
 +    }
 +
 +    /** Derives a schema name from the compound identifier. */
 +    private String deriveSchemaName(SqlIdentifier id, PlanningContext ctx) {
 +        String schemaName;
 +        if (id.isSimple())
 +            schemaName = ctx.schemaName();
 +        else {
 +            SqlIdentifier schemaId = id.skipLast(1);
 +
 +            if (!schemaId.isSimple()) {
 +                throw new IgniteSQLException("Unexpected value of schemaName [" +
 +                    "expected a simple identifier, but was " + schemaId + "; " +
 +                    "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.PARSING);
 +            }
 +
 +            schemaName = schemaId.getSimple();
 +        }
 +
 +        ensureSchemaExists(ctx, schemaName);
 +
 +        return schemaName;
 +    }
 +
 +    /** Derives an object(a table, an index, etc) name from the compound identifier. */
 +    private String deriveObjectName(SqlIdentifier id, PlanningContext ctx, String objDesc) {
 +        if (id.isSimple())
 +            return id.getSimple();
 +
 +        SqlIdentifier objId = id.getComponent(id.skipLast(1).names.size());
 +
 +        if (!objId.isSimple()) {
 +            throw new IgniteSQLException("Unexpected value of " + objDesc + " [" +
 +                "expected a simple identifier, but was " + objId + "; " +
 +                "querySql=\"" + ctx.query() + "\"]", IgniteQueryErrorCode.PARSING);
 +        }
 +
 +        return objId.getSimple();
 +    }
 +
 +    /** */
 +    private void ensureSchemaExists(PlanningContext ctx, String schemaName) {
 +        if (ctx.catalogReader().getRootSchema().getSubSchema(schemaName, true) == null)
 +            throw new IgniteSQLException("Schema with name " + schemaName + " not found",
 +                IgniteQueryErrorCode.SCHEMA_NOT_FOUND);
 +    }
 +
 +    /**
 +     * Short cut for validating that option value is a simple identifier.
 +     *
 +     * @param opt An option to validate.
 +     * @param ctx Planning context.
 +     * @throws IgniteSQLException In case the validation was failed.
 +     */
 +    private String paramIsSqlIdentifierValidator(IgniteSqlCreateTableOption opt, PlanningContext ctx) {
 +        if (!(opt.value() instanceof SqlIdentifier) || !((SqlIdentifier)opt.value()).isSimple())
 +            throwOptionParsingException(opt, "a simple identifier", ctx.query());
 +
 +        return ((SqlIdentifier)opt.value()).getSimple();
 +    }
 +    
 +    /**
 +     * Creates a validator for an option which value should be value of given enumeration.
 +     *
 +     * @param clz Enumeration class to create validator for.
 +     */
 +    private static <T extends Enum<T>> BiFunction<IgniteSqlCreateTableOption, PlanningContext, T> validatorForEnumValue(
 +        Class<T> clz
 +    ) {
 +        return (opt, ctx) -> {
 +            T val = null;
 +
 +            if (opt.value() instanceof SqlIdentifier) {
 +                val = Arrays.stream(clz.getEnumConstants())
 +                    .filter(m -> m.name().equalsIgnoreCase(opt.value().toString()))
 +                    .findFirst()
 +                    .orElse(null);
 +            }
 +
 +            if (val == null)
 +                throwOptionParsingException(opt, "values are "
 +                    + Arrays.toString(clz.getEnumConstants()), ctx.query());
 +
 +            return val;
 +        };
 +    }
 +
 +    /**
 +     * Throws exception with message relates to validation of create table option.
 +     *
 +     * @param opt An option which validation was failed.
 +     * @param exp A string representing expected values.
 +     * @param qry A query the validation was failed for.
 +     */
 +    private static void throwOptionParsingException(IgniteSqlCreateTableOption opt, String exp, String qry) {
 +        throw new IgniteSQLException("Unexpected value for param " + opt.key() + " [" +
 +            "expected " + exp + ", but was " + opt.value() + "; " +
 +            "querySql=\"" + qry + "\"]", IgniteQueryErrorCode.PARSING);
 +    }
 +
 +    /** */
 +    private static class TableOptionProcessor<T> {
 +        /** */
 +        private final IgniteSqlCreateTableOptionEnum key;
 +
 +        /** */
 +        private final BiFunction<IgniteSqlCreateTableOption, PlanningContext, T> validator;
 +
 +        /** */
 +        private final BiConsumer<CreateTableCommand, T> valSetter;
 +
 +        /**
 +         * @param key Option key this processor is supopsed to handle.
 +         * @param validator Validator that derives a value from a {@link SqlNode},
 +         *                 validates it and then returns if validation passed,
 +         *                 throws an exeption otherwise.
 +         * @param valSetter Setter sets the value recived from the validator
 +         *                 to the given {@link CreateTableCommand}.
 +         */
 +        private TableOptionProcessor(
 +            IgniteSqlCreateTableOptionEnum key,
 +            BiFunction<IgniteSqlCreateTableOption, PlanningContext, T> validator,
 +            BiConsumer<CreateTableCommand, T> valSetter
 +        ) {
 +            this.key = key;
 +            this.validator = validator;
 +            this.valSetter = valSetter;
 +        }
 +
 +        /**
 +         * Processes the given option, validates it's value and then sets the appropriate
 +         * field in a given command, throws an exception if the validation failed.
 +         *
 +         * @param opt Option to validate.
 +         * @param ctx Planning context.
 +         * @param cmd Command instance to set a validation result.
 +         */
 +        private void process(IgniteSqlCreateTableOption opt, PlanningContext ctx, CreateTableCommand cmd) {
 +            assert key == null || key == opt.key() : "Unexpected create table option [expected=" + key + ", actual=" + opt.key() + "]";
 +
 +            valSetter.accept(cmd, validator.apply(opt, ctx));
 +        }
 +
 +        /**
 +         * @return Key this processor is supposed to handle.
 +         */
 +        private IgniteSqlCreateTableOptionEnum key() {
 +            return key;
 +        }
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
index 956ae76,0000000..28f2820
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
@@@ -1,317 -1,0 +1,318 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.rel;
 +
 +import java.util.ArrayList;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +
 +import com.google.common.collect.ImmutableList;
 +import org.apache.calcite.plan.RelOptCluster;
 +import org.apache.calcite.plan.RelTraitSet;
 +import org.apache.calcite.rel.RelCollation;
 +import org.apache.calcite.rel.RelCollations;
 +import org.apache.calcite.rel.RelDistribution;
 +import org.apache.calcite.rel.RelFieldCollation;
 +import org.apache.calcite.rel.RelNode;
 +import org.apache.calcite.rel.RelWriter;
 +import org.apache.calcite.rel.core.CorrelationId;
 +import org.apache.calcite.rel.core.Join;
 +import org.apache.calcite.rel.core.JoinRelType;
 +import org.apache.calcite.rel.metadata.RelMetadataQuery;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.calcite.sql.SqlExplainLevel;
 +import org.apache.calcite.util.ImmutableIntList;
 +import org.apache.calcite.util.Pair;
 +import org.apache.calcite.util.Util;
 +import org.apache.calcite.util.mapping.Mappings;
 +import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTrait;
 +import org.apache.ignite.internal.processors.query.calcite.trait.DistributionFunction;
 +import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribution;
 +import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTrait;
 +import org.apache.ignite.internal.processors.query.calcite.trait.TraitUtils;
 +import org.apache.ignite.internal.processors.query.calcite.trait.TraitsAwareIgniteRel;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +import static org.apache.calcite.rel.RelDistribution.Type.HASH_DISTRIBUTED;
 +import static org.apache.calcite.rel.core.JoinRelType.RIGHT;
 +import static org.apache.ignite.internal.processors.query.calcite.metadata.IgniteMdRowCount.joinRowCount;
 +import static org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions.broadcast;
 +import static org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions.hash;
 +import static org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions.random;
 +import static org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions.single;
 +
 +/** */
 +public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgniteRel {
 +    /** */
 +    protected AbstractIgniteJoin(RelOptCluster cluster, RelTraitSet traitSet, RelNode left, RelNode right,
 +        RexNode condition, Set<CorrelationId> variablesSet, JoinRelType joinType) {
 +        super(cluster, traitSet, left, right, condition, variablesSet, joinType);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public RelWriter explainTerms(RelWriter pw) {
 +        return super.explainTerms(pw)
-             .itemIf("variablesSet", Commons.transform(variablesSet.asList(), CorrelationId::getId), pw.getDetailLevel() == SqlExplainLevel.ALL_ATTRIBUTES);
++            .itemIf("variablesSet", Commons.transform(variablesSet.asList(), CorrelationId::getId),
++                pw.getDetailLevel() == SqlExplainLevel.ALL_ATTRIBUTES);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
 +        // We preserve left collation since it's translated into a nested loop join with an outer loop
 +        // over a left edge. The code below checks and projects left collation on an output row type.
 +
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        RelTraitSet outTraits, leftTraits, rightTraits;
 +
 +        RelCollation collation = TraitUtils.collation(left);
 +
 +        // If nulls are possible at left we has to check whether NullDirection.LAST flag is set on sorted fields.
 +        // TODO set NullDirection.LAST for insufficient fields instead of erasing collation.
 +        if (joinType == RIGHT || joinType == JoinRelType.FULL) {
 +            for (RelFieldCollation field : collation.getFieldCollations()) {
 +                if (RelFieldCollation.NullDirection.LAST != field.nullDirection) {
 +                    collation = RelCollations.EMPTY;
 +                    break;
 +                }
 +            }
 +        }
 +
 +        outTraits = nodeTraits.replace(collation);
 +        leftTraits = left.replace(collation);
 +        rightTraits = right.replace(RelCollations.EMPTY);
 +
 +        return ImmutableList.of(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveRewindability(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
 +        // The node is rewindable only if both sources are rewindable.
 +
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        RewindabilityTrait leftRewindability = TraitUtils.rewindability(left);
 +        RewindabilityTrait rightRewindability = TraitUtils.rewindability(right);
 +
 +        List<Pair<RelTraitSet, List<RelTraitSet>>> pairs = new ArrayList<>();
 +
 +        pairs.add(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
 +            ImmutableList.of(left.replace(RewindabilityTrait.ONE_WAY), right.replace(RewindabilityTrait.ONE_WAY))));
 +
 +        if (leftRewindability.rewindable() && rightRewindability.rewindable())
 +            pairs.add(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE),
 +                ImmutableList.of(left.replace(RewindabilityTrait.REWINDABLE), right.replace(RewindabilityTrait.REWINDABLE))));
 +
 +        return ImmutableList.copyOf(pairs);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveDistribution(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
 +        // There are several rules:
 +        // 1) any join is possible on broadcast or single distribution
 +        // 2) hash distributed join is possible when join keys are superset of source distribution keys
 +        // 3) hash and broadcast distributed tables can be joined when join keys equal to hash
 +        //    distributed table distribution keys and:
 +        //      3.1) it's a left join and a hash distributed table is at left
 +        //      3.2) it's a right join and a hash distributed table is at right
 +        //      3.3) it's an inner join, this case a hash distributed table may be at any side
 +
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        List<Pair<RelTraitSet, List<RelTraitSet>>> res = new ArrayList<>();
 +
 +        IgniteDistribution leftDistr = TraitUtils.distribution(left);
 +        IgniteDistribution rightDistr = TraitUtils.distribution(right);
 +
 +        IgniteDistribution left2rightProjectedDistr = leftDistr.apply(buildProjectionMapping(true));
 +        IgniteDistribution right2leftProjectedDistr = rightDistr.apply(buildProjectionMapping(false));
 +
 +        RelTraitSet outTraits;
 +        RelTraitSet leftTraits;
 +        RelTraitSet rightTraits;
 +
 +        if (leftDistr == broadcast() && rightDistr == broadcast()) {
 +            outTraits = nodeTraits.replace(broadcast());
 +            leftTraits = left.replace(broadcast());
 +            rightTraits = right.replace(broadcast());
 +        }
 +        else {
 +            outTraits = nodeTraits.replace(single());
 +            leftTraits = left.replace(single());
 +            rightTraits = right.replace(single());
 +        }
 +
 +        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +
 +        if (F.isEmpty(joinInfo.pairs()))
 +            return ImmutableList.copyOf(res);
 +
 +        if (leftDistr.getType() == HASH_DISTRIBUTED && left2rightProjectedDistr != random()) {
 +            outTraits = nodeTraits.replace(leftDistr);
 +            leftTraits = left.replace(leftDistr);
 +            rightTraits = right.replace(left2rightProjectedDistr);
 +
 +            res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +        }
 +
 +        if (rightDistr.getType() == HASH_DISTRIBUTED && right2leftProjectedDistr != random()) {
 +            outTraits = nodeTraits.replace(rightDistr);
 +            leftTraits = left.replace(right2leftProjectedDistr);
 +            rightTraits = right.replace(rightDistr);
 +
 +            res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +        }
 +
 +        leftTraits = left.replace(hash(joinInfo.leftKeys, DistributionFunction.hash()));
 +        rightTraits = right.replace(hash(joinInfo.rightKeys, DistributionFunction.hash()));
 +
 +        outTraits = nodeTraits.replace(hash(joinInfo.leftKeys, DistributionFunction.hash()));
 +        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +
 +        outTraits = nodeTraits.replace(hash(joinInfo.rightKeys, DistributionFunction.hash()));
 +        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
 +
 +        return ImmutableList.copyOf(res);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCorrelation(RelTraitSet nodeTraits,
 +        List<RelTraitSet> inTraits) {
 +        // left correlations
 +        Set<CorrelationId> corrIds = new HashSet<>(TraitUtils.correlation(inTraits.get(0)).correlationIds());
 +        // right correlations
 +        corrIds.addAll(TraitUtils.correlation(inTraits.get(1)).correlationIds());
 +
 +        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
 +        // We preserve left collation since it's translated into a nested loop join with an outer loop
 +        // over a left edge. The code below checks whether a desired collation is possible and requires
 +        // appropriate collation from the left edge.
 +
 +        RelCollation collation = TraitUtils.collation(nodeTraits);
 +
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        if (collation.equals(RelCollations.EMPTY))
 +            return Pair.of(nodeTraits,
 +                ImmutableList.of(left.replace(RelCollations.EMPTY), right.replace(RelCollations.EMPTY)));
 +
 +        if (!projectsLeft(collation))
 +            collation = RelCollations.EMPTY;
 +        else if (joinType == RIGHT || joinType == JoinRelType.FULL) {
 +            for (RelFieldCollation field : collation.getFieldCollations()) {
 +                if (RelFieldCollation.NullDirection.LAST != field.nullDirection) {
 +                    collation = RelCollations.EMPTY;
 +                    break;
 +                }
 +            }
 +        }
 +
 +        return Pair.of(nodeTraits.replace(collation),
 +            ImmutableList.of(left.replace(collation), right.replace(RelCollations.EMPTY)));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughDistribution(
 +        RelTraitSet nodeTraits,
 +        List<RelTraitSet> inputTraits
 +    ) {
 +        // Tere are several rules:
 +        // 1) any join is possible on broadcast or single distribution
 +        // 2) hash distributed join is possible when join keys equal to source distribution keys
 +        // 3) hash and broadcast distributed tables can be joined when join keys equal to hash
 +        //    distributed table distribution keys and:
 +        //      3.1) it's a left join and a hash distributed table is at left
 +        //      3.2) it's a right join and a hash distributed table is at right
 +        //      3.3) it's an inner join, this case a hash distributed table may be at any side
 +
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        IgniteDistribution distribution = TraitUtils.distribution(nodeTraits);
 +
 +        RelDistribution.Type distrType = distribution.getType();
 +        switch (distrType) {
 +            case BROADCAST_DISTRIBUTED:
 +            case SINGLETON:
 +                return Pair.of(nodeTraits, Commons.transform(inputTraits, t -> t.replace(distribution)));
 +
 +            case HASH_DISTRIBUTED:
 +            case RANDOM_DISTRIBUTED:
 +                // Such join may be replaced as a cross join with a filter uppon it.
 +                // It's impossible to get random or hash distribution from a cross join.
 +                if (F.isEmpty(joinInfo.pairs()))
 +                    break;
 +
 +                // We cannot provide random distribution without unique constrain on join keys,
 +                // so, we require hash distribution (wich satisfies random distribution) instead.
 +                DistributionFunction function = distrType == HASH_DISTRIBUTED
 +                    ? distribution.function()
 +                    : DistributionFunction.hash();
 +
 +                IgniteDistribution outDistr = hash(joinInfo.leftKeys, function);
 +
 +                if (distrType != HASH_DISTRIBUTED || outDistr.satisfies(distribution)) {
 +                    return Pair.of(nodeTraits.replace(outDistr),
 +                        ImmutableList.of(left.replace(outDistr), right.replace(hash(joinInfo.rightKeys, function))));
 +                }
 +
 +            default:
 +                // NO-OP
 +        }
 +
 +        return Pair.of(nodeTraits.replace(single()), Commons.transform(inputTraits, t -> t.replace(single())));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public double estimateRowCount(RelMetadataQuery mq) {
 +        return Util.first(joinRowCount(mq, this), 1D);
 +    }
 +
 +    /** */
 +    protected boolean projectsLeft(RelCollation collation) {
 +        int leftFieldCount = getLeft().getRowType().getFieldCount();
 +        for (int field : RelCollations.ordinals(collation)) {
 +            if (field >= leftFieldCount)
 +                return false;
 +        }
 +        return true;
 +    }
 +
 +    /** Creates mapping from left join keys to the right and vice versa with regards to {@code left2Right}. */
 +    protected Mappings.TargetMapping buildProjectionMapping(boolean left2Right) {
 +        ImmutableIntList sourceKeys = left2Right ? joinInfo.leftKeys : joinInfo.rightKeys;
 +        ImmutableIntList targetKeys = left2Right ? joinInfo.rightKeys : joinInfo.leftKeys;
 +
 +        Map<Integer, Integer> keyMap = new HashMap<>();
 +        for (int i = 0; i < joinInfo.leftKeys.size(); i++)
 +            keyMap.put(sourceKeys.get(i), targetKeys.get(i));
 +
 +        return Mappings.target(
 +            keyMap,
 +            (left2Right ? left : right).getRowType().getFieldCount(),
 +            (left2Right ? right : left).getRowType().getFieldCount()
 +        );
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
index c760dc6,0000000..bd62f1e
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
@@@ -1,238 -1,0 +1,241 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.rel;
 +
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Set;
 +
 +import com.google.common.collect.ImmutableList;
 +import com.google.common.collect.ImmutableSet;
 +import org.apache.calcite.plan.RelOptCluster;
 +import org.apache.calcite.plan.RelOptCost;
 +import org.apache.calcite.plan.RelOptPlanner;
 +import org.apache.calcite.plan.RelTraitSet;
 +import org.apache.calcite.rel.RelCollation;
 +import org.apache.calcite.rel.RelCollations;
 +import org.apache.calcite.rel.RelInput;
 +import org.apache.calcite.rel.RelNode;
 +import org.apache.calcite.rel.RelWriter;
 +import org.apache.calcite.rel.core.CorrelationId;
 +import org.apache.calcite.rel.core.Join;
 +import org.apache.calcite.rel.core.JoinRelType;
 +import org.apache.calcite.rel.metadata.RelMetadataQuery;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.calcite.util.Pair;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.cost.IgniteCost;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.cost.IgniteCostFactory;
 +import org.apache.ignite.internal.processors.query.calcite.trait.CorrelationTrait;
 +import org.apache.ignite.internal.processors.query.calcite.trait.RewindabilityTrait;
 +import org.apache.ignite.internal.processors.query.calcite.trait.TraitUtils;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +import org.apache.ignite.internal.util.typedef.F;
 +
 +import static org.apache.ignite.internal.processors.query.calcite.util.Commons.maxPrefix;
 +
 +/**
 + * Relational expression that combines two relational expressions according to
 + * some condition.
 + *
 + * <p>Each output row has columns from the left and right inputs.
 + * The set of output rows is a subset of the cartesian product of the two
 + * inputs; precisely which subset depends on the join condition.
 + */
 +public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
 +    /**
 +     * Creates a Join.
 +     *
 +     * @param cluster          Cluster
 +     * @param traitSet         Trait set
 +     * @param left             Left input
 +     * @param right            Right input
 +     * @param condition        Join condition
 +     * @param joinType         Join type
 +     * @param variablesSet     Set variables that are set by the
 +     *                         LHS and used by the RHS and are not available to
 +     *                         nodes above this Join in the tree
 +     */
-     public IgniteCorrelatedNestedLoopJoin(RelOptCluster cluster, RelTraitSet traitSet, RelNode left, RelNode right, RexNode condition, Set<CorrelationId> variablesSet, JoinRelType joinType) {
++    public IgniteCorrelatedNestedLoopJoin(RelOptCluster cluster, RelTraitSet traitSet, RelNode left, RelNode right,
++        RexNode condition, Set<CorrelationId> variablesSet, JoinRelType joinType) {
 +        super(cluster, traitSet, left, right, condition, variablesSet, joinType);
 +    }
 +
 +    /** */
 +    public IgniteCorrelatedNestedLoopJoin(RelInput input) {
 +        this(input.getCluster(),
 +            input.getTraitSet().replace(IgniteConvention.INSTANCE),
 +            input.getInputs().get(0),
 +            input.getInputs().get(1),
 +            input.getExpression("condition"),
 +            ImmutableSet.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
 +            input.getEnum("joinType", JoinRelType.class));
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override public Join copy(RelTraitSet traitSet, RexNode condition, RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone) {
++    @Override public Join copy(RelTraitSet traitSet, RexNode condition, RelNode left, RelNode right, JoinRelType joinType,
++        boolean semiJoinDone) {
 +        return new IgniteCorrelatedNestedLoopJoin(getCluster(), traitSet, left, right, condition, variablesSet, joinType);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public <T> T accept(IgniteRelVisitor<T> visitor) {
 +        return visitor.visit(this);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(
 +        RelTraitSet nodeTraits,
 +        List<RelTraitSet> inputTraits
 +    ) {
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +        RelCollation leftCollation = TraitUtils.collation(left), rightCollation = TraitUtils.collation(right);
 +
 +        List<Integer> newRightCollationFields = maxPrefix(rightCollation.getKeys(), joinInfo.leftKeys);
 +
 +        if (F.isEmpty(newRightCollationFields))
 +            return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY), inputTraits));
 +
 +        // We preserve left edge collation only if batch size == 1
 +        if (variablesSet.size() == 1)
 +            nodeTraits = nodeTraits.replace(leftCollation);
 +        else
 +            nodeTraits = nodeTraits.replace(RelCollations.EMPTY);
 +
 +        return ImmutableList.of(Pair.of(nodeTraits, inputTraits));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveRewindability(
 +        RelTraitSet nodeTraits,
 +        List<RelTraitSet> inputTraits
 +    ) {
 +        // Correlated nested loop requires rewindable right edge.
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        RewindabilityTrait rewindability = TraitUtils.rewindability(left);
 +
 +        return ImmutableList.of(Pair.of(nodeTraits.replace(rewindability),
 +            ImmutableList.of(left, right.replace(RewindabilityTrait.REWINDABLE))));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughCollation(
 +        RelTraitSet nodeTraits,
 +        List<RelTraitSet> inputTraits
 +    ) {
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        // We preserve left edge collation only if batch size == 1
 +        if (variablesSet.size() == 1) {
 +            Pair<RelTraitSet, List<RelTraitSet>> baseTraits = super.passThroughCollation(nodeTraits, inputTraits);
 +
 +            return Pair.of(
 +                baseTraits.getKey(),
 +                ImmutableList.of(
 +                    baseTraits.getValue().get(0),
 +                    baseTraits.getValue().get(1)
 +                )
 +            );
 +        }
 +
 +        return Pair.of(nodeTraits.replace(RelCollations.EMPTY),
 +            ImmutableList.of(left.replace(RelCollations.EMPTY), right));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughRewindability(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
 +        // Correlated nested loop requires rewindable right edge.
 +        RelTraitSet left = inputTraits.get(0), right = inputTraits.get(1);
 +
 +        RewindabilityTrait rewindability = TraitUtils.rewindability(nodeTraits);
 +
 +        return Pair.of(nodeTraits.replace(rewindability),
 +            ImmutableList.of(left.replace(rewindability), right.replace(RewindabilityTrait.REWINDABLE)));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
 +        IgniteCostFactory costFactory = (IgniteCostFactory)planner.getCostFactory();
 +
 +        double leftCount = mq.getRowCount(getLeft());
 +
 +        if (Double.isInfinite(leftCount))
 +            return costFactory.makeInfiniteCost();
 +
 +        double rightCount = mq.getRowCount(getRight());
 +
 +        if (Double.isInfinite(rightCount))
 +            return costFactory.makeInfiniteCost();
 +
 +        double rows = leftCount * rightCount;
 +
 +        return costFactory.makeCost(rows,
 +            rows * (IgniteCost.ROW_COMPARISON_COST + IgniteCost.ROW_PASS_THROUGH_COST), 0);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughCorrelation(RelTraitSet nodeTraits,
 +        List<RelTraitSet> inTraits) {
 +        CorrelationTrait nodeCorr = TraitUtils.correlation(nodeTraits);
 +
 +        Set<CorrelationId> selfCorrIds = new HashSet<>(CorrelationTrait.correlations(variablesSet).correlationIds());
 +        selfCorrIds.addAll(nodeCorr.correlationIds());
 +
 +        return Pair.of(nodeTraits,
 +            ImmutableList.of(
 +                inTraits.get(0).replace(nodeCorr),
 +                inTraits.get(1).replace(CorrelationTrait.correlations(selfCorrIds))
 +            )
 +        );
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCorrelation(RelTraitSet nodeTraits,
 +        List<RelTraitSet> inTraits) {
 +        Set<CorrelationId> rightCorrIds = TraitUtils.correlation(inTraits.get(1)).correlationIds();
 +
 +        if (!rightCorrIds.containsAll(variablesSet))
 +            return ImmutableList.of();
 +
 +        Set<CorrelationId> corrIds = new HashSet<>(rightCorrIds);
 +
 +        // Left + right
 +        corrIds.addAll(TraitUtils.correlation(inTraits.get(0)).correlationIds());
 +
 +        corrIds.removeAll(variablesSet);
 +
 +        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
-         return new IgniteCorrelatedNestedLoopJoin(cluster, getTraitSet(), inputs.get(0), inputs.get(1), getCondition(), getVariablesSet(), getJoinType());
++        return new IgniteCorrelatedNestedLoopJoin(cluster, getTraitSet(), inputs.get(0), inputs.get(1), getCondition(),
++            getVariablesSet(), getJoinType());
 +    }
 +
 +    /** */
 +    @Override public RelWriter explainTerms(RelWriter pw) {
 +        return super.explainTerms(pw).item("correlationVariables", getVariablesSet());
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public double estimateRowCount(RelMetadataQuery mq) {
 +        // condition selectivity already counted within the external filter
 +        return super.estimateRowCount(mq) / mq.getSelectivity(this, getCondition());
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
index 8614ece,0000000..3e8c6da
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
@@@ -1,112 -1,0 +1,115 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.rel;
 +
 +import java.util.List;
 +import java.util.Set;
 +
 +import com.google.common.collect.ImmutableSet;
 +import org.apache.calcite.plan.RelOptCluster;
 +import org.apache.calcite.plan.RelOptCost;
 +import org.apache.calcite.plan.RelOptPlanner;
 +import org.apache.calcite.plan.RelTraitSet;
 +import org.apache.calcite.rel.RelInput;
 +import org.apache.calcite.rel.RelNode;
 +import org.apache.calcite.rel.core.CorrelationId;
 +import org.apache.calcite.rel.core.Join;
 +import org.apache.calcite.rel.core.JoinRelType;
 +import org.apache.calcite.rel.metadata.RelMetadataQuery;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.cost.IgniteCost;
 +import org.apache.ignite.internal.processors.query.calcite.metadata.cost.IgniteCostFactory;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +
 +/**
 + * Relational expression that combines two relational expressions according to
 + * some condition.
 + *
 + * <p>Each output row has columns from the left and right inputs.
 + * The set of output rows is a subset of the cartesian product of the two
 + * inputs; precisely which subset depends on the join condition.
 + */
 +public class IgniteNestedLoopJoin extends AbstractIgniteJoin {
 +    /**
 +     * Creates a Join.
 +     *
 +     * @param cluster          Cluster
 +     * @param traitSet         Trait set
 +     * @param left             Left input
 +     * @param right            Right input
 +     * @param condition        Join condition
 +     * @param joinType         Join type
 +     * @param variablesSet     Set variables that are set by the
 +     *                         LHS and used by the RHS and are not available to
 +     *                         nodes above this Join in the tree
 +     */
-     public IgniteNestedLoopJoin(RelOptCluster cluster, RelTraitSet traitSet, RelNode left, RelNode right, RexNode condition, Set<CorrelationId> variablesSet, JoinRelType joinType) {
++    public IgniteNestedLoopJoin(RelOptCluster cluster, RelTraitSet traitSet, RelNode left, RelNode right,
++        RexNode condition, Set<CorrelationId> variablesSet, JoinRelType joinType) {
 +        super(cluster, traitSet, left, right, condition, variablesSet, joinType);
 +    }
 +
 +    /** */
 +    public IgniteNestedLoopJoin(RelInput input) {
 +        this(input.getCluster(),
 +            input.getTraitSet().replace(IgniteConvention.INSTANCE),
 +            input.getInputs().get(0),
 +            input.getInputs().get(1),
 +            input.getExpression("condition"),
 +            ImmutableSet.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
 +            input.getEnum("joinType", JoinRelType.class));
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) {
 +        IgniteCostFactory costFactory = (IgniteCostFactory)planner.getCostFactory();
 +
 +        double leftCount = mq.getRowCount(getLeft());
 +
 +        if (Double.isInfinite(leftCount))
 +            return costFactory.makeInfiniteCost();
 +
 +        double rightCount = mq.getRowCount(getRight());
 +
 +        if (Double.isInfinite(rightCount))
 +            return costFactory.makeInfiniteCost();
 +
 +        double rows = leftCount * rightCount;
 +
 +        double rightSize = rightCount * getRight().getRowType().getFieldCount() * IgniteCost.AVERAGE_FIELD_SIZE;
 +
 +        return costFactory.makeCost(rows,
 +            rows * (IgniteCost.ROW_COMPARISON_COST + IgniteCost.ROW_PASS_THROUGH_COST), 0, rightSize, 0);
 +    }
 +
 +    /** {@inheritDoc} */
-     @Override public Join copy(RelTraitSet traitSet, RexNode condition, RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone) {
++    @Override public Join copy(RelTraitSet traitSet, RexNode condition, RelNode left, RelNode right, JoinRelType joinType,
++        boolean semiJoinDone) {
 +        return new IgniteNestedLoopJoin(getCluster(), traitSet, left, right, condition, variablesSet, joinType);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public <T> T accept(IgniteRelVisitor<T> visitor) {
 +        return visitor.visit(this);
 +    }
 +
 +    /** {@inheritDoc} */
 +    @Override public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
-         return new IgniteNestedLoopJoin(cluster, getTraitSet(), inputs.get(0), inputs.get(1), getCondition(), getVariablesSet(), getJoinType());
++        return new IgniteNestedLoopJoin(cluster, getTraitSet(), inputs.get(0), inputs.get(1), getCondition(),
++            getVariablesSet(), getJoinType());
 +    }
 +}
diff --cc modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableModify.java
index 66c274d,0000000..166c432
mode 100644,000000..100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableModify.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableModify.java
@@@ -1,103 -1,0 +1,104 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *      http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package org.apache.ignite.internal.processors.query.calcite.rel;
 +
 +import java.util.List;
 +import org.apache.calcite.plan.RelOptCluster;
 +import org.apache.calcite.plan.RelOptTable;
 +import org.apache.calcite.plan.RelTraitSet;
 +import org.apache.calcite.rel.RelInput;
 +import org.apache.calcite.rel.RelNode;
 +import org.apache.calcite.rel.core.TableModify;
 +import org.apache.calcite.rex.RexNode;
 +import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 +
 +/** */
 +public class IgniteTableModify extends TableModify implements IgniteRel {
 +    /**
 +     * Creates a {@code TableModify}.
 +     *
 +     * <p>The UPDATE operation has format like this:
 +     * <blockquote>
... 12564 lines suppressed ...