This project provides a set of utilities for migrating from Apache Ignite 2 to Apache Ignite 3.
The project is split into two major artifacts:
The tools will be distributed through maven. Currently, they are in the CI/CD build.
The CLI tools are distributed in a zip
and tar.gz
packages.
The executable (migration-tools
) is in the bin
folder.
The migration tools adapter can be imported to your maven project as follows:
<dependency> <groupId>org.apache.ignite</groupId> <artifactId>migration-tools-adapter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
Display help for the available commands: migration-tools --help
Convert an Apache Ignite 2 configuration file into Apache Ignite 3 cluster and node configurations: migration-tools configuration-converter resources/ignite-config.0.xml resources/node.conf resources/cluster.conf --include-defaults
Generate an SQL DDL script for each table based on the Apache Ignite 2 file: migration-tools sql-ddl-generator resources/ignite-config.0.xml
Collection of tools to interact with the Apache Ignite 2 node's work directory.
Examples:
Show persistent-data
command help: migration-tools persistent-data --help
Lists the caches available in the Apache Ignite 2 node's work directory.
List caches on node1
:
migration-tools \ persistent-data \ node1/workDir \ d270287b-b031-4fdb-abe1-6b124b0be9ef \ resources/configs/ignite-config.xml \ list-caches
id name -1672482954 Country 2100619 City
Show list-caches
command help:
migration-tools \ persistent-data \ node1/workDir \ d270287b-b031-4fdb-abe1-6b124b0be9ef \ resources/configs/ignite-config.xml \ list-caches \ --help
Migrates data from an Apache Ignite 2 node's directory into a live Apache Ignite 3 cluster. The migration is performed partition by partition. In case of an error, you may use the saved progress file along with the --resume-from
option to skip the partitions successfully migrated in the previous run.
The mode
option defines the error handling policy in case of an irreconcilable mismatch between an Apache Ignite 2 record and the target Apache Ignite 3 table:
ABORT
(default): panics and aborts the migration.IGNORE_COLUMN
: any additional columns/fields in the cache record will be ignored (not migrated to the table; lost). The others will be migrated as usual.SKIP_RECORD
: The entire cache record will be ignored (not migrated to the table; lost).PACK_EXTRA
: Any additional columns/fields in the cache record will be serialized to JSON and stored in the __EXTRA__
column. This is an additional column that the tool adds to the table, it is not a native feature.The --rate-limiter N
option limits the number of records migrated per second by using a very basic rate limiter implementation, which may be prone to bursts.
By default, this command will save the progress in the current work directory. --no-save-progress
will not record the progress file.
The --resume-from progress-file.json
allows resuming the migration from the provided progress file. All the partitions marked as successfully migrated in this file will be skipped.
Examples:
Migrate the cache Country
cache, halting on any error using the ABORT
mode:
migration-tools \ persistent-data \ node1/workDir \ d270287b-b031-4fdb-abe1-6b124b0be9ef \ configs/ignite-config.xml \ migrate-cache \ Country \ 127.0.0.1:10800 \ --mode ABORT
The project can be built using maven: ./gradlew build
.
Make sure you meet the following dependencies.
This image is necessary for running tests. If the ignite3.docker.version
property is set to latest
, you must build the Docker image locally:
Clone the Apache Ignite 3 repository.
Recommended: clone the same revision as declared in the dependencies ignite3.version.commit
. Automatically get the revision hash by running this in migration-tools-root
:
./gradlew :properties | awk -F ': ' '/ignite3.version.commit/ {print $2}'
Build the Docker image (for tests only) : ./gradlew clean :packaging:docker -x check
.
The end-to-end tests can take significant time to run. You have the option to limit the number of caches for tests using the -Pe2e.testLimiter=10
property, where 10
is the number of cache examples to test.
Property | Description | Default |
---|---|---|
e2e.testLimiter | Limits the amount of tests run during the end-to-end tests. Can help reduce the build duration. | None |
ai2.sampleCluster.Xmx | Adjusts the max JVM memory for the sample cluster containers. | 10g |
ai2.sampleCluster.checkpointChecker.maxwaitseconds | Maximum time (s) waiting for checkpoints to happen on the sample cluster. This is used to make sure the cluster shut down gracefully. | 360 |
ai2.sampleCluster.checkpointChecker.pollingseconds | Polling period for checking if the checkpoints have completed on the sample clusters. | 10 |
ai2.sampleCluster.recreate.seeding.maxwaitseconds | Maximum time (s) spent recreating the sample cluster. The default is very optimistic. It should take around 2 hours. Check below for a faster alternative. | 7200 |
ai2.sampleCluster.recreate.seeding.pollingseconds | Polling period for checking if recreating the sample cluster has finished. | 180 |
seeddata.nCachesPerStint | Number of caches recreated with the same client instance. Reusing the client helps speeding up the process, but also consumes more resources. | 25 |
Some of the tests use an Apache Ignite 2 persistent directory. Although the framework can recreate the cluster, it can take more than 2 hours. As an alternative result, we provide a prebuilt cluster that you can download:
bash .ci/download-n-extract-sample-cluster.sh
Generates a configuration file that informs the interface adapter of the correct classes for mapping tables/caches. This tool inspects the running Apache Ignite 2 cluster to get this information.
Currently, there are no use cases for this module.