- Prerequisites
- Quick Start
- Building Ignite
- Running sanity checks
- Running tests
- Checking and generating Javadoc
- Setting up IntelliJ Idea project
- Use prepared IntelliJ Idea run configurations
- Code structure
- Release candidate verification
- Java 11 SDK
Apache Ignite 3 follows standard guidelines for multi-module Gradle projects, so it can be built by using the following command from the project root directory:
./gradlew clean build
This command builds a project and performs a few additional actions, for example it also runs tests. The build runs faster if these actions are disabled as described in the next section.
To start an ignite-3 instance, package Apache Ignite 3 as described below and then follow the user guide.
Apache Ignite 3 follows standard guidelines for multi-module Gradle projects, so it can be built by using the following command from the
project root directory (the tests are disabled with -x test -x integrationTest
options):
./gradlew clean build -x test -x integrationTest
For a really fast build some other actions can be disabled too:
./gradlew clean build -x assembleDist -x distTar -x distZip -x check
Run all checks:
./gradlew clean check
Skip all checks:
./gradlew clean build -x check
Code style is checked with Gradle Checkstyle Plugin.
It is enabled by default and is bound to check
task.
Build project without code style check:
./gradlew clean build -x checkstyleMain -x checkstyleIntegrationTest -x checkstyleTest -x checkstyleTestFixtures
Run code style checks only:
./gradlew checkstyleMain checkstyleIntegrationTest checkstyleTest checkstyleTestFixtures
Code style check results are generated at:
<mudule-dir>/build/reports/checkstyle/
The project is checked for bugs with Spotbugs Gradle Plugin.
Plugin is enabled by default and is bound to build
task.
Note that currently only main sources are validated with Spotbugs.
Build project without spotbugs checks:
./gradlew clean build -x spotbugsMain
Run spotbugs checks only:
./gradlew spotbugsMain
Static code analyzer is run with Apache Gradle PMD Plugin.
./gradlew pmdMain pmdTest
PMD check result (only if there are any violations) is generated at <module-name>/build/reports/pmd/
.
Run unit tests only:
./gradlew clean test
Run unit + integration tests:
./gradlew clean test integrationTest
Run integration tests only:
./gradlew clean integrationTest
Javadoc is generated and checked for correctness with Gradle Javadoc Plugin.
Build Javadoc site (found in build/docs/aggregateJavadoc/index.html
):
./gradlew aggregateJavadoc
If you don't need to aggregate all javadoc you can use javadoc task and find generated
artifacts in each module (for example modules/api/build/docs/javadoc
)
./gradlew javadoc
You can quickly import Ignite project to your IDE using the root build.gradle
file. In IntelliJ, choose Open Project
from the
Quick Start
box or choose Open...
from the File
menu and select the root build.gradle
file.
After opening the project in IntelliJ, double check that the Java SDK is properly configured for the project:
- Open the
File
menu and selectProject Structure...
- In the SDKs section, ensure that JDK 11 is selected (create one if none exist)
- In the
Project
section, make sure the project language level is set to 11.0 as Ignite makes use of several Java 11 language features
Apache Ignite 3 uses machine code generation for some of its modules. Occasionally, IDEs may fail to trigger this code generation. In this case, run a gradle build command from the command line. Subsequent builds can be performed from IDE without problems.
The Apache Ignite 3 project contains prebuilt IntelliJ Idea run configurations that can be useful in common cases.
These configurations are stored in .run
root folder and committed to GIT repo.
NOTE: DO NOT MODIFY THESE CONFIGURATION FILES MANUALLY.
For modification use Idea Edit Configurations...
option.
High-level modules structure and detailed modules description can be found in the modules readme.
Change the
<version>
placeholder into the version you'd like to use.
./gradlew clean allDistZip
Uber zip package will be located in packaging/build/distributions
.
If you wand to build CLI, you can do it with:
./gradlew clean packaging-cli:distZip
Zip package will be located in packaging/cli/build/distributions
.
For Ignite node:
./gradlew clean packaging-db:distZip
Zip package will be located in packaging/db/build/distributions
.
You can build zip and run CLI with the following commands:
./gradlew clean packaging-cli:distZip
cd packaging/cli/build/distributions
unzip ignite3-cli-<version>
cd ignite3-cli-<version>
./bin/ignite3
To build a zip file with ignite-runner and run it:
./gradlew clean packaging-db:distZip
cd packaging/db/build/distributions
unzip ignite3-db-<version>
cd ignite3-db-<version>
./bin/ignite3db start
To stop the started node run:
./bin/ignite3db stop
There is also RPM/DEB packaging for Ignite. To build those packages run:
./gradlew clean buildDeb buildRpm -x check
ignite3-cli
packages are located in packaging/cli/build/distributions/
and ignite3-db
packages in packaging/db/build/distributions/
.
To install RPM packages run:
rpm -i ignite3-cli-<version>.noarch.rpm
rpm -i ignite3-db-<version>.noarch.rpm
To install DEB packages run:
dpkg --install ignite3-cli_<version>_all.deb
dpkg --install ignite3-db_<version>_all.deb
Run ignite3db service:
service ignite3db start
Stop ignite3db service:
service ignite3db stop
Use CLI:
ignite3
To uninstall RPM packages run:
rpm -e ignite3-cli
rpm -e ignite3-db
To uninstall DEB packages run:
dpkg --remove ignite3-cli
dpkg --remove ignite3-db
Gradle build also provides the task that can build docker image. To run this task make sure you have docker installed.
./gradlew clean docker -x test -x check
Run docker container with ignite node:
docker run -it --rm -p 10300:10300 -p 10800:10800 apacheignite/ignite3
There's a sample docker compose file which allows to run 3 nodes in a cluster in the packaging/docker
directory. You can also use CLI from
the docker image using cli
parameter and connect to nodes using their names from the docker network.
docker compose -f packaging/docker/docker-compose.yml up -d
docker run -it --rm --net ignite3_default apacheignite/ignite3 cli
> connect http://node1:10300
> cluster init --name cluster --metastorage-group=node1,node2,node3
Node names could be obtained using following command:
> cluster topology physical
The easiest way to start as many nodes as you want is to use the docker-compose file located in the packaging/docker
directory.
If instead you want to start nodes manually, you can use the following commands:
./gradlew clean allDistZip
mkdir ignite-3-cluster
cd ignite-3-cluster
unzip ../packaging/build/distributions/ignite3-<version>.zip
This is what you've already done when you've launched single-node Ignite cluster. Now you need to copy node directory as many times as you
want to start nodes. Then you need to change the name of the node in the etc/ignite-config.conf
file in each node directory.
Let's first rename current node directory to node1
and copy it to node2
and node3
:
mv ignite3-db-<version> node1
cp -r node1 node2
cp -r node1 node3
After that you have to change the name of the node in etc/vars.env
file in each node directory:
Linux:
sed -i 's/NODE_NAME=defaultNode/NODE_NAME=node1/' node1/etc/vars.env
sed -i 's/NODE_NAME=defaultNode/NODE_NAME=node2/' node2/etc/vars.env
sed -i 's/NODE_NAME=defaultNode/NODE_NAME=node3/' node3/etc/vars.env
MacOS:
sed -i '' 's/NODE_NAME=defaultNode/NODE_NAME=node1/' node1/etc/vars.env
sed -i '' 's/NODE_NAME=defaultNode/NODE_NAME=node2/' node2/etc/vars.env
sed -i '' 's/NODE_NAME=defaultNode/NODE_NAME=node3/' node3/etc/vars.env
Each node binds to its set of ports: HTTP, HTTPS(if configured), internal TCP for communication between nodes, and client TCP. By default the following configuration is used:
clientConnector.port = 10800,
network.port = 3344,
rest: { port = 10300, ssl.port = 10400 }
If you want to start nodes on the same machine, you have to change the ports in the etc/ignite-config.conf
file in each node directory.
You can do it manually or use the following commands:
Linux:
sed -i 's/port=10300/port=10301/' node1/etc/ignite-config.conf
sed -i 's/port=10300/port=10302/' node2/etc/ignite-config.conf
sed -i 's/port=10300/port=10303/' node3/etc/ignite-config.conf
sed -i 's/port=3344/port=3301/' node1/etc/ignite-config.conf
sed -i 's/port=3344/port=3302/' node2/etc/ignite-config.conf
sed -i 's/port=3344/port=3303/' node3/etc/ignite-config.conf
sed -i 's/port=10800/port=10801/' node1/etc/ignite-config.conf
sed -i 's/port=10800/port=10802/' node2/etc/ignite-config.conf
sed -i 's/port=10800/port=10803/' node3/etc/ignite-config.conf
sed -i '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node1/etc/ignite-config.conf
sed -i '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node2/etc/ignite-config.conf
sed -i '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node3/etc/ignite-config.conf
MacOS:
sed -i '' 's/port=10300/port=10301/' node1/etc/ignite-config.conf
sed -i '' 's/port=10300/port=10302/' node2/etc/ignite-config.conf
sed -i '' 's/port=10300/port=10303/' node3/etc/ignite-config.conf
sed -i '' 's/port=3344/port=3301/' node1/etc/ignite-config.conf
sed -i '' 's/port=3344/port=3302/' node2/etc/ignite-config.conf
sed -i '' 's/port=3344/port=3303/' node3/etc/ignite-config.conf
sed -i '' 's/port=10800/port=10801/' node1/etc/ignite-config.conf
sed -i '' 's/port=10800/port=10802/' node2/etc/ignite-config.conf
sed -i '' 's/port=10800/port=10803/' node3/etc/ignite-config.conf
sed -i '' '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node1/etc/ignite-config.conf
sed -i '' '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node2/etc/ignite-config.conf
sed -i '' '/netClusterNodes=\[/,/\]/s/"localhost:3344"/"localhost:3301", "localhost:3302", "localhost:3303"/' node3/etc/ignite-config.conf
Now all the nodes are set up and you can start them with the following commands:
./node1/bin/ignite3db start
./node2/bin/ignite3db start
./node3/bin/ignite3db start
After that connect to any node with CLI:
./ignite3-cli-<version>/bin/ignite3 connect http://localhost:10301
Then you can check that all nodes see each other:
cluster topology physical
To initialize a cluster run the following command inside Ignite CLI:
cluster init
--name myClusterOfThreeNodes
--cluster-management-group=node1,node2,node3
--metastorage-group=node1,node2,node3
To stop all nodes:
./node1/bin/ignite3db stop
./node2/bin/ignite3db stop
./node3/bin/ignite3db stop
To run Swagger UI in docker, run the following command:
cd modules/rest-api/openapi
docker-compose up
Swagger UI will be available at http://localhost:8082
- Build all packages (this will also run unit tests and all checks)
./gradlew clean docker distZip allDistZip buildRpm buildDeb
- Go to the
packaging/build/distributions
directory which now contains the packaged CLI tool and Ignitecd packaging/build/distributions unzip ignite3-<version>
- Run the tool without parameters (full list of available commands should appear)
cd ignite3-cli-<version> ./bin/ignite3
- Start a node
cd ../ignite3-db-<version> ./bin/ignite3db start
- Check that the new node is up and running
cd ../ignite3-cli-<version> ./bin/ignite3 node status
- Stop the node
cd ../ignite3-db-<version> ./bin/ignite3db stop