tkalkirill commented on code in PR #2386:
URL: https://github.com/apache/ignite-3/pull/2386#discussion_r1287961892


##########
modules/configuration/src/main/java/org/apache/ignite/internal/configuration/asm/ConfigurationAsmGenerator.java:
##########
@@ -160,14 +161,14 @@ public synchronized InnerNode instantiateNode(Class<?> 
schemaClass) {
      * Generates, defines, loads and initializes all dynamic classes required 
for the given configuration schema.
      *
      * @param rootSchemaClass             Class of the root configuration 
schema.
-     * @param internalSchemaExtensions    Internal extensions ({@link 
InternalConfiguration}) of configuration schemas ({@link
-     *                                    ConfigurationRoot} and {@link 
Config}). Mapping: original schema -> extensions.
+     * @param schemaExtensions            All extensions (public and internal) 
({@link ConfigurationExtension}) of configuration schemas

Review Comment:
   ```suggestion
        * @param schemaExtensions Extensions (public and internal) ({@link 
ConfigurationExtension}) of configuration schemas
   ```



##########
modules/configuration-api/src/main/java/org/apache/ignite/configuration/annotation/ConfigurationExtension.java:
##########
@@ -39,5 +40,11 @@
 @Target(TYPE)
 @Retention(RUNTIME)
 @Documented
-public @interface InternalConfiguration {
+public @interface ConfigurationExtension {
+    /**
+     * Controls whether this configuration is part of the public configuration 
or is hidden from the end user.
+     * An extension is public by default.
+     */
+    boolean internal() default false;
+

Review Comment:
   ```suggestion
   ```



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -548,42 +549,64 @@ void testCheckConfigurationTypeNoError() {
     }
 
     @Test
-    void testInternalSchemaExtensions() {
-        assertTrue(internalSchemaExtensions(List.of()).isEmpty());
+    void testExtensionsType() {
+        // public extensions
+        
assertTrue(ConfigurationUtil.isPublicExtension(PublicConfigurationSchema.class));

Review Comment:
   ```suggestion
           // Public extensions.     
assertTrue(ConfigurationUtil.isPublicExtension(PublicConfigurationSchema.class));
   ```



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -548,42 +549,64 @@ void testCheckConfigurationTypeNoError() {
     }
 
     @Test
-    void testInternalSchemaExtensions() {
-        assertTrue(internalSchemaExtensions(List.of()).isEmpty());
+    void testExtensionsType() {

Review Comment:
   It is better to divide the test into several: public/internal



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -728,6 +774,84 @@ void testGetInternalConfigs() {
         assertEquals("foo", subConfig.get("str02"));
     }
 
+    @Test
+    void testGetPublicWithInternalConfigs() {
+        Map<Class<?>, Set<Class<?>>> extensions = schemaExtensions(List.of(
+                InternalFirstRootConfigurationSchema.class,
+                InternalSecondRootConfigurationSchema.class,
+                PublicRootConfigurationSchema.class,
+                InternalFirstConfigurationSchema.class,
+                InternalSecondConfigurationSchema.class,
+                PublicConfigurationSchema.class
+        ));
+
+        ConfigurationAsmGenerator generator = new ConfigurationAsmGenerator();
+        generator.compileRootSchema(InternalRootConfigurationSchema.class, 
extensions, Map.of());
+
+        InnerNode innerNode = 
generator.instantiateNode(InternalRootConfigurationSchema.class);
+
+        addDefaults(innerNode);
+
+        Map<String, Object> config = (Map<String, Object>) innerNode.accept(
+                null,
+                null,
+                ConverterToMapVisitor.builder()
+                        .includeInternal(false)
+                        .build()
+        );
+
+        // Check that public configuration will still be received.
+

Review Comment:
   ```suggestion
   ```



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -548,42 +549,64 @@ void testCheckConfigurationTypeNoError() {
     }
 
     @Test
-    void testInternalSchemaExtensions() {
-        assertTrue(internalSchemaExtensions(List.of()).isEmpty());
+    void testExtensionsType() {
+        // public extensions
+        
assertTrue(ConfigurationUtil.isPublicExtension(PublicConfigurationSchema.class));
 
-        assertThrows(IllegalArgumentException.class, () -> 
internalSchemaExtensions(List.of(Object.class)));
+        
assertTrue(ConfigurationUtil.isPublicExtension(PublicRootConfigurationSchema.class));
+
+        //internal extensions

Review Comment:
   same



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -548,42 +549,64 @@ void testCheckConfigurationTypeNoError() {
     }
 
     @Test
-    void testInternalSchemaExtensions() {
-        assertTrue(internalSchemaExtensions(List.of()).isEmpty());
+    void testExtensionsType() {
+        // public extensions
+        
assertTrue(ConfigurationUtil.isPublicExtension(PublicConfigurationSchema.class));
 
-        assertThrows(IllegalArgumentException.class, () -> 
internalSchemaExtensions(List.of(Object.class)));
+        
assertTrue(ConfigurationUtil.isPublicExtension(PublicRootConfigurationSchema.class));
+
+        //internal extensions
+        
assertTrue(ConfigurationUtil.isInternalExtension(InternalSecondConfigurationSchema.class));
+
+        
assertTrue(ConfigurationUtil.isInternalExtension(InternalSecondRootConfigurationSchema.class));
+
+        //this one is not an extension at all

Review Comment:
   same



##########
modules/configuration/src/test/java/org/apache/ignite/internal/configuration/util/ConfigurationUtilTest.java:
##########
@@ -728,6 +774,84 @@ void testGetInternalConfigs() {
         assertEquals("foo", subConfig.get("str02"));
     }
 
+    @Test
+    void testGetPublicWithInternalConfigs() {
+        Map<Class<?>, Set<Class<?>>> extensions = schemaExtensions(List.of(
+                InternalFirstRootConfigurationSchema.class,
+                InternalSecondRootConfigurationSchema.class,
+                PublicRootConfigurationSchema.class,
+                InternalFirstConfigurationSchema.class,
+                InternalSecondConfigurationSchema.class,
+                PublicConfigurationSchema.class
+        ));
+
+        ConfigurationAsmGenerator generator = new ConfigurationAsmGenerator();
+        generator.compileRootSchema(InternalRootConfigurationSchema.class, 
extensions, Map.of());
+
+        InnerNode innerNode = 
generator.instantiateNode(InternalRootConfigurationSchema.class);
+
+        addDefaults(innerNode);
+
+        Map<String, Object> config = (Map<String, Object>) innerNode.accept(
+                null,
+                null,
+                ConverterToMapVisitor.builder()
+                        .includeInternal(false)
+                        .build()
+        );
+
+        // Check that public configuration will still be received.
+
+        assertEquals(5, config.size());
+        assertNull(config.get("str0"));
+        assertEquals("foo", config.get("str1"));
+        assertNotNull(config.get("subCfg"));
+        assertNotNull(config.get("namedCfg"));
+        assertNotNull(config.get("publicSubCfg1"));
+
+        Map<String, Object> subConfig = (Map<String, Object>) 
config.get("subCfg");
+
+        assertEquals(2, subConfig.size());
+        assertEquals("foo", subConfig.get("str00"));
+        assertEquals("bar", subConfig.get("publicStr03"));
+
+        // Check that public configuration will be received along with the 
internal one.
+

Review Comment:
   ```suggestion
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@ignite.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to