You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2021/03/10 12:39:39 UTC
[ignite-3] 01/01: IGNITE-14272 DEVNOTES.md moved to proper location,
added draft modules structure
This is an automated email from the ASF dual-hosted git repository.
agoncharuk pushed a commit to branch ignite-14272
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit a16573fe2d0ca341d4b9df8af5f76bb916eeddc8
Author: Alexey Goncharuk <al...@gmail.com>
AuthorDate: Wed Mar 10 15:39:30 2021 +0300
IGNITE-14272 DEVNOTES.md moved to proper location, added draft modules structure
---
DEVNOTES.md | 55 +++++++++++++++++++++-
modules/DEVNOTES.md | 47 ------------------
modules/README.md | 19 ++++++++
.../configuration-annotation-processor/README.md | 5 ++
modules/network/README.md | 18 +++++++
5 files changed, 95 insertions(+), 49 deletions(-)
diff --git a/DEVNOTES.md b/DEVNOTES.md
index 5575f29..0185e9b 100644
--- a/DEVNOTES.md
+++ b/DEVNOTES.md
@@ -1,13 +1,64 @@
-## Local Build
+# Setting up and building
+## Prerequisites
+ * Java 11 SDK
+ * Maven 3.6.0+ (for building)
+
+## Building Ignite
+Ignite follows standard guidelines for multi-module maven projects, so it can be easily built using the following
+command from the project root directory (you can disable the tests when building using `-DskipTests`):
mvn clean install [-DskipTests]
Upon completion, you will find the CLI tool under `modules/cli/target` directory.
Use `ignite` on Linux and MacOS, or `ignite.exe` on Windows.
-## License Headers Check
+### Running tests
+To run unit tests only, use the following command:
+ mvn test
+
+Before running integration tests, make sure to build the project using the ``package`` target.
+
+To run unit + integration tests, use the following command:
+
+ mvn integration-test
+
+To run integration tests only, use the following command:
+
+ mvn integration-test -Dskip.surefire.tests=true
+
+### Sanity check targets
+Use the following commands to run generic sanity checks before submitting a PR.
+
+RAT license validation:
+
mvn validate
+
+Checkstyle code validation:
+
+ mvn checkstyle:checkstyle:aggregate
+
+PMD static code analysis
+
+ mvn compile pmd:check
+
+
+## Setting up IntelliJ Idea project
+You can quickly import Ignite project to your IDE using the root `pom.xml` file. In IntelliJ, choose `Open Project`
+from the `Quick Start` box or choose `Open...` from the `File` menu and select the root `pom.xml` file.
+
+After opening the project in IntelliJ, double check that the Java SDK is properly configured for the project:
+
+ * Open the `File` menu and select `Project Structure...`
+ * In the SDKs section, ensure that a 1.11 JDK 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
+
+Ignite uses machine code generation for some of it's modules. To generate necessary production code, build the project
+using maven (see Building Ignite).
+
+## Code structure
+High-level modules structure and detailed modules description can be found in the [modules readme](modules/README.md).
## Release candidate verification
diff --git a/modules/DEVNOTES.md b/modules/DEVNOTES.md
deleted file mode 100644
index 8e6d2a1..0000000
--- a/modules/DEVNOTES.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Setting up and building
-## Prerequisites
- * Java 11 SDK
- * Maven 3.6.0+ (for building)
-
-## Building Ignite
-Ignite follows standard guidelines for multi-module maven projects, so it can be easily built using the following
-command from the project root directory:
-```commandline
-mvn clean install
-```
-You can disable the tests when building using the following command:
-```commandline
-mvn clean install -DskipTests
-```
-
-### Running tests
-To run unit tests only, use the following command:
-```commandline
-mvn test
-```
-
-Before running integration tests, make sure to build the project using the ``package`` target.
-
-To run unit + integration tests, use the following command:
-```commandline
-mvn integration-test
-```
-
-To run integration tests only, use the following command:
-```commandline
-mvn integration-test -Dskip.surefire.tests=true
-```
-
-## Setting up IntelliJ Idea project
-You can quickly import Ignite project to your IDE using the root `pom.xml` file. In IntelliJ, choose `Open Project`
-from the `Quick Start` box or choose `Open...` from the `File` menu and select the root `pom.xml` file.
-
-After opening the project in IntelliJ, double check that the Java SDK is properly configured for the project:
-
- * Open the `File` menu and select `Project Structure...`
- * In the SDKs section, ensure that a 1.11 JDK 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
-
-Ignite uses machine code generation for some of it's modules. To generate necessary production code, build the project
-using maven (see Building Ignite).
diff --git a/modules/README.md b/modules/README.md
new file mode 100644
index 0000000..6b3f13b
--- /dev/null
+++ b/modules/README.md
@@ -0,0 +1,19 @@
+# Apache Ignite modules
+We try to make Apache Ignite reasonably modular in order to simplify unit and integration testing.
+Each module provides an exposed API which should be used by external modules. Not exposed APIs must not be used
+by external modules. At the time of writing we do not use Java JIGSAW modules system, but it is likely that we will
+at some point, which will help us to control the exported API contract.
+
+We prohibit cyclic dependencies between modules in order to simplify JIGSAW migration in the future.
+
+## Modules list
+
+Module Name | Description
+----------- | -----------
+[network](network/README.md)|Networking module: group membership and message passing
+[configuration-annotation-processor](configuration-annotation-processor/README.md)|Tooling for generating Ignite configuration model classes from configuration schema definition
+[configuration](configuration/README.md)|Ignite configuration classes and configuration management framework
+[runner](runner/README.md)|Ignite server node runner. The module that wires up the Ignite components and handles node lifecycle
+[rest](rest/README.md)|REST management endpoint bindings and command handlers
+[cli-common](cli-common/README.md)|Shared interfaces definitions for pluggable CLI
+[cli](cli/README.md)|Ignite CLI implementation
diff --git a/modules/configuration-annotation-processor/README.md b/modules/configuration-annotation-processor/README.md
new file mode 100644
index 0000000..b459187
--- /dev/null
+++ b/modules/configuration-annotation-processor/README.md
@@ -0,0 +1,5 @@
+# Configuration annotation processor
+This module provides a build extension that is used by Ignite to automatically generate configuration POJO classes
+from configuration schema definition.
+
+*TODO* describe how annotation processor works.
\ No newline at end of file
diff --git a/modules/network/README.md b/modules/network/README.md
new file mode 100644
index 0000000..faddaab
--- /dev/null
+++ b/modules/network/README.md
@@ -0,0 +1,18 @@
+# Ignite networking module
+This module provides an abstraction and default implementation of networking layer for Ignite. The module provides
+two major functions:
+
+* Discovery and group membership. The networking layer interface provides weakly-consistent discovery and group
+membership service which uses the Scalecube implementation of the SWIM gossip protocol. The default implementation
+requires a set of seed IP addresses to provided on start.
+* Messaging service. The networking layer provides several useful abstractions that can be used for sending and
+receiving messages across nodes in the cluster. Several delivery guarantee options are available:
+ * Weak mode provides a 'shoot and forget' style of sending a message. These messages are not tracked for delivery and
+ may be dropped by either sender or receiver. This is the preferred way of communication between nodes as such messages
+ do not incur any risks of OOME or other resource shortage. For example, Raft server messages should be sent via weak
+ mode because all Raft messages can be arbitrarily dropped.
+ * Patient mode attempts to deliver a message until either it is acknowledged, or we received a notification that a
+ target cluster member left the cluster. Internally, the networking module preserves a queue which orders scheduled
+ messages and persistently attempts to establish a connection and deliver scheduled messages in that particular order.
+ Messages sent via patient mode cannot be arbitrarily dropped and are kept in a memory buffer until either they are
+ delivered or a destination node is reported as failed.