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 15:23:24 UTC

[ignite-3] branch main updated: IGNITE-14272 Move DEVNOTES.md to proper location, add modules readme

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

agoncharuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new f3775d0  IGNITE-14272 Move DEVNOTES.md to proper location, add modules readme
f3775d0 is described below

commit f3775d021c5f105785dff5977d47fac832f8d882
Author: Alexey Goncharuk <al...@gmail.com>
AuthorDate: Wed Mar 10 18:23:13 2021 +0300

    IGNITE-14272 Move DEVNOTES.md to proper location, add modules readme
---
 DEVNOTES.md                                        | 55 +++++++++++++++++++++-
 modules/DEVNOTES.md                                | 47 ------------------
 modules/README.md                                  | 19 ++++++++
 .../configuration-annotation-processor/README.md   |  5 ++
 modules/network/README.md                          | 23 +++++++++
 5 files changed, 100 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..14ce10e
--- /dev/null
+++ b/modules/network/README.md
@@ -0,0 +1,23 @@
+# 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.
+ 
+On top of the described primitives, the networking module provides a higher-level request-response primitive which can
+be thought of as an RPC call, implying a single response for the given request. This primitive requires that the message
+being sent has a unique identifier that can be matched with response on receipt.
+