From ab0e4d3e1402b7e146532ed88aa10c3f5e5bf7c6 Mon Sep 17 00:00:00 2001 From: Egor Baranov Date: Thu, 28 May 2026 11:52:50 +0300 Subject: [PATCH 1/4] IGNITE-15735 Ingite configuration log message improvements --- .../DataStorageConfiguration.java | 2 + .../EncryptionConfiguration.java | 3 ++ .../configuration/IgniteConfiguration.java | 14 +++++ .../SystemDataRegionConfiguration.java | 6 +++ .../spi/discovery/tcp/TcpDiscoverySpi.java | 1 + .../IgniteConfigurationTest.java | 52 +++++++++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java index a6e7a2db23b29..10bd7b1fb869e 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataStorageConfiguration.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOFactory; import org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory; import org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory; +import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; @@ -301,6 +302,7 @@ public class DataStorageConfiguration implements Serializable { private boolean alwaysWriteFullPages = DFLT_WAL_ALWAYS_WRITE_FULL_PAGES; /** Factory to provide I/O interface for data storage files */ + @GridToStringExclude private FileIOFactory fileIOFactory = IgniteSystemProperties.getBoolean(IGNITE_USE_ASYNC_FILE_IO_FACTORY, DFLT_USE_ASYNC_FILE_IO_FACTORY) ? new AsyncFileIOFactory() : new RandomAccessFileIOFactory(); diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/EncryptionConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/EncryptionConfiguration.java index 6b9345d4c7550..320795026ec2e 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/EncryptionConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/EncryptionConfiguration.java @@ -18,11 +18,14 @@ package org.apache.ignite.configuration; import java.io.Serializable; + +import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.A; /** * Encryption configuration. */ +@GridToStringExclude public class EncryptionConfiguration implements Serializable { /** */ private static final long serialVersionUID = 0L; diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java index 16d0bac76cf53..6033892fe37ee 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java @@ -49,6 +49,7 @@ import org.apache.ignite.failure.FailureHandler; import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager; import org.apache.ignite.internal.processors.odbc.ClientListenerProcessor; +import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -326,6 +327,7 @@ public class IgniteConfiguration { private String igniteWorkDir; /** MBean server. */ + @GridToStringExclude private MBeanServer mbeanSrv; /** Local node ID. */ @@ -389,42 +391,54 @@ public class IgniteConfiguration { private long segChkFreq = DFLT_SEG_CHK_FREQ; /** Communication SPI. */ + @GridToStringExclude private CommunicationSpi commSpi; /** Event storage SPI. */ + @GridToStringExclude private EventStorageSpi evtSpi; /** Collision SPI. */ + @GridToStringExclude private CollisionSpi colSpi; /** Deployment SPI. */ + @GridToStringExclude private DeploymentSpi deploySpi; /** Checkpoint SPI. */ + @GridToStringExclude private CheckpointSpi[] cpSpi; /** Failover SPI. */ + @GridToStringExclude private FailoverSpi[] failSpi; /** Load balancing SPI. */ + @GridToStringExclude private LoadBalancingSpi[] loadBalancingSpi; /** Indexing SPI. */ + @GridToStringExclude private IndexingSpi indexingSpi; /** Address resolver. */ private AddressResolver addrRslvr; /** Encryption SPI. */ + @GridToStringExclude private EncryptionSpi encryptionSpi; /** Metric exporter SPI. */ + @GridToStringExclude private MetricExporterSpi[] metricExporterSpi; /** System view exporter SPI. */ + @GridToStringExclude private SystemViewExporterSpi[] sysViewExporterSpi; /** Tracing SPI. */ + @GridToStringExclude private TracingSpi tracingSpi; /** Cache configurations. */ diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/SystemDataRegionConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/SystemDataRegionConfiguration.java index bfa20048a7d6e..76b2b1e3a0a59 100644 --- a/modules/core/src/main/java/org/apache/ignite/configuration/SystemDataRegionConfiguration.java +++ b/modules/core/src/main/java/org/apache/ignite/configuration/SystemDataRegionConfiguration.java @@ -18,6 +18,7 @@ import java.io.Serializable; import org.apache.ignite.internal.util.typedef.internal.A; +import org.apache.ignite.internal.util.typedef.internal.S; /** * This class allows defining system data region configuration with various parameters for Apache Ignite @@ -90,4 +91,9 @@ public SystemDataRegionConfiguration setMaxSize(long maxSize) { return this; } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(SystemDataRegionConfiguration.class, this); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java index 6e14dfa8f272f..0bd41ea160826 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java @@ -383,6 +383,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery private Marshaller marsh; /** Statistics. */ + @GridToStringExclude protected final TcpDiscoveryStatistics stats = new TcpDiscoveryStatistics(); /** Local port which node uses. */ diff --git a/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java new file mode 100644 index 0000000000000..08b4e6b99114e --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java @@ -0,0 +1,52 @@ +package org.apache.ignite.configuration; + +import org.apache.ignite.internal.IgniteEx; +import org.apache.ignite.testframework.ListeningTestLogger; +import org.apache.ignite.testframework.LogListener; +import org.apache.ignite.testframework.junits.WithSystemProperty; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +import org.junit.Assert; +import org.junit.Test; + +import java.util.regex.Pattern; + +import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET; + +/** + * Test covers cases where Ignite configuration, + * or it's nested objects has default implementation of {@link Object#toString()} + */ +@WithSystemProperty(key = IGNITE_QUIET, value = "false") +public class IgniteConfigurationTest extends GridCommonAbstractTest { + /** Error message to be prompted */ + private static final String ASSERTION_ERROR_MESSAGE = + "Ignite configuration log message contains objects with default toString implementation!"; + + /** Pattern to check any object has default {@link Object#toString()} implementation */ + private static final Pattern ERROR_PATTERN = Pattern.compile("^(?=.*IgniteConfiguration \\[)(?!.*@\\d+).*$"); + + /** */ + private final ListeningTestLogger listeningLog = new ListeningTestLogger(log); + + /** + * Check ignite configuration log message contains no @ letters + * It's a common way to ensure all objects in prompt has {@link Object#toString()} overriden + */ + @Test + public void testIgniteConfigurationPrompt() throws Exception { + LogListener igniteConfigurationLogListener = LogListener + .matches(ERROR_PATTERN) + .atLeast(1) + .build(); + listeningLog.registerListener(igniteConfigurationLogListener); + try (IgniteEx ignored = startGrid(0)){ + Assert.assertTrue(ASSERTION_ERROR_MESSAGE, igniteConfigurationLogListener.check()); + } + } + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { + return super.getConfiguration(igniteInstanceName) + .setGridLogger(listeningLog); + } +} From 485e993ea7d44cec1a76f41d9d6d936cefbd9bae Mon Sep 17 00:00:00 2001 From: Egor Baranov Date: Fri, 29 May 2026 16:01:53 +0300 Subject: [PATCH 2/4] IGNITE-15735 Ingite configuration log message improvements --- .../apache/ignite/configuration/IgniteConfigurationTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java index 08b4e6b99114e..11662311c0347 100644 --- a/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java @@ -1,5 +1,6 @@ package org.apache.ignite.configuration; +import java.util.regex.Pattern; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.testframework.ListeningTestLogger; import org.apache.ignite.testframework.LogListener; @@ -8,8 +9,6 @@ import org.junit.Assert; import org.junit.Test; -import java.util.regex.Pattern; - import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET; /** @@ -39,7 +38,7 @@ public void testIgniteConfigurationPrompt() throws Exception { .atLeast(1) .build(); listeningLog.registerListener(igniteConfigurationLogListener); - try (IgniteEx ignored = startGrid(0)){ + try (IgniteEx ignored = startGrid(0)) { Assert.assertTrue(ASSERTION_ERROR_MESSAGE, igniteConfigurationLogListener.check()); } } From 2c0d750ba33361bd5eb00cd41cc869dc0cb3eb0b Mon Sep 17 00:00:00 2001 From: Egor Baranov Date: Fri, 29 May 2026 16:38:30 +0300 Subject: [PATCH 3/4] IGNITE-15735 Ingite configuration log message improvements --- .../configuration/IgniteConfigurationTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java index 11662311c0347..098a8e0e70e85 100644 --- a/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java +++ b/modules/core/src/test/java/org/apache/ignite/configuration/IgniteConfigurationTest.java @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.apache.ignite.configuration; import java.util.regex.Pattern; From 23cd1d0be3ce3886655dbe2a6bee4df06559cccc Mon Sep 17 00:00:00 2001 From: Egor Baranov Date: Fri, 29 May 2026 16:58:53 +0300 Subject: [PATCH 4/4] IGNITE-15735 Ingite configuration log message improvements --- .../org/apache/ignite/testsuites/IgniteBasicTestSuite2.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite2.java index def9e319d2310..9b5ca62ce8523 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite2.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite2.java @@ -19,6 +19,7 @@ import org.apache.ignite.ClassPathContentLoggingTest; import org.apache.ignite.cache.RemoveAllDeadlockTest; +import org.apache.ignite.configuration.IgniteConfigurationTest; import org.apache.ignite.events.ClusterActivationStartedEventTest; import org.apache.ignite.failure.ExchangeTaskHandlerWaitingForTasksTest; import org.apache.ignite.failure.FailureHandlerTriggeredTest; @@ -227,6 +228,8 @@ FreeListCutTailDifferentGcTest.class, MdcCacheReadRequestsRoutingTest.class, + + IgniteConfigurationTest.class, }) public class IgniteBasicTestSuite2 { }