Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Fix typo

...

IDIEP-87
Author
Sponsor
Created

 

Status

Status
colourGreyGreen
titleDRAFTCOMPLETED

Table of Contents

Motivation

...

  • io.micronaut:micronaut-inject:jar:3.4.1
  • javax.annotation:javax.annotation-api:jar:1.3.2 (transitive from micronaut-inject)
  • jakarta.inject:jakarta.inject-api:jar:2.0.1
  • io.micronaut:micronaut-core:jar:3.4.1
  • io.micronaut:micronaut-http-server-netty:jar:3.4.1
  • io.micronaut:micronaut-http-server:jar:3.4.1
  • io.micronaut:micronaut-router:jar:3.4.1
  • io.micronaut:micronaut-http-netty:jar:3.4.1
  • io.micronaut:micronaut-buffer-netty:jar:3.4.1
  • io.micronaut:micronaut-runtime:jar:3.4.1
  • io.micronaut:micronaut-http:jar:3.4.1
  • io.micronaut:micronaut-aop:jar:3.4.1
  • io.micronaut:micronaut-context:jar:3.4.1
  • io.micronaut:micronaut-core-reactive:jar:3.4.1
  • Io.micronaut:micronaut-json-core:jar:3.3.3
  • io.micronaut:micronaut-jackson-core:jar:3.3.3
  • io.micronaut.serde:micronaut-serde-api:jar:1.0.1
  • io.micronaut.serde:micronaut-serde-support:jar:1.0.1
  • javax.validation:validation-api:jar:2.0.1.Final (transitive from micronaut-runtime)
  • jakarta.annotation:jakarta.annotation-api:jar:2.0.0
  • io.swagger.core.v3:swagger-annotations:jar:2.1.12

any other module that wants to expose an enpoint:

...

:

...

  • jakarta.annotation:jakarta.annotation-api:jar:2.0.0
  • jakarta.inject:jakarta.inject-api:jar:2.0.0:compile
  • io.swagger.core.v3:swagger-annotations:jar:2.1.12
  • io.micronaut.serde:micronaut-serde-jackson:jar:1.0.1
  • io.micronaut:micronaut-jackson-core:jar:3.3.3
  • io.micronaut:micronaut-json-core:jar:3.3.3
  • com.fasterxml.jackson.core:jackson-core:jar:2.13.1
  • io.micronaut:micronaut-context:jar:3.3.3
  • io.micronaut.serde:micronaut-serde-api:jar:1.0.1
  • io.micronaut.serde:micronaut-serde-support:jar:1.0.1
  • io.micronaut:micronaut-http:jar:3.4.1
  • io.micronaut:micronaut-inject:jar:3.4.1
  • io.micronaut:micronaut-http-server:jar:3.4.1
  • io.micronaut:micronaut-runtime:jar:3.4.1

...

  1. Add /api/v1. API version 1, openapi.yaml#version: 1.0.
  2. Add backward compatible change to /api/v1.  API version 1, openapi.yaml#version: 1.1
  3. Add breacking breaking change to /api/v1, so introduce /api/v2. API version 2, openapi-v2.yaml#version: 2.0, openapi.yaml#version: 1.1.

...

"build time" means that the micronaut annotation processor will discover classes annotated with io.micronaut.http.annotation.Controller and register them as request handlers at server bootstrap. This is done by default but it is always possible to register request handlers at runtime.

Why micronaut

Here is a discussion about adding 3rd party dependencies (micronaut and swagger). The main advantages of micronaut:

The last point is important. Ignite 3 will definitely need to implement security protocols and strategies. Micronaut already has implementations for the most popular ones (OAuth2/OpenID, LDAP, etc), they are tested in production by a community and have a little chance to introduce a vulnerability to the server compering with our own implementation. All these standards are going to be implemented in Ignite 3.


Implementation example


Code Block
languagejava
titleRestComponent
@OpenAPIDefinition(
        info = @Info(
                title = "Ignite REST module",
                version = "3.0.0-alpha",
                license = @License(name = "Apache 2.0", url = "https://ignite.apache.org"),
                contact = @Contact(email = "dev@ignite.apache.org")
        )
)
@OpenAPIInclude(classes = {ClusterConfigurationController.class, NodeConfigurationController.class}) // include to openapi specification
public class RestComponent implements IgniteComponent {
    // ...

    public RestComponent(List<MicronautFactory> micronautFactories, RestConfiguration restConfiguration) {
        // register all factories in micronaut context
    }

    @Override
    public void start() {
       // start REST server
    }

...

MethodPathParametersDescription
GET/management/v1/configuration/node/
Return node configuration in HOCON format
GET/management/v1/configuration/node/{configPath}
  • configPath: subtree selector in format root.subtree.subsubtree

Return node configuration subtree in HOCON format specified with configPath parameter.

PATCH/management/v1/configuration/node/
  • request body: configuration to update patch in HOCON format
Update Patch node configuration with a given body.
GET/management/v1/configuration/cluster/
Return cluster configuration in HOCON format.
GET/management/v1/configuration/cluster/{configPath}
  • configPath: subtree selector in format root.subtree.subsubtree

Return cluster configuration subtree in HOCON format specified with configPath parameter.

PATCH/management/v1/configuration/cluster/
  • request body: configuration to update patch in HOCON format

Update Patch cluster configuration with a given body.

...

MethodPathParametersDescription
POST/management/v1/cluster/init/
  • body: list of meta storage node names and list of cmg nodes
Initialize cluster

...

Provide information about cluster topology.

MethodPathParametersDescription
GET/management/v1/topology/physical


Return physical cluster topology information(consistent ID, ID, address, status).


MethodPathParametersDescription
GET/management/v1/topology/logical


Return logical cluster topology information(consistent ID, ID, address, status).

...

MethodPathParametersDescription
GET/management/v1/node/version/


Return node build version in semver format.

...