diff --git a/hazelcast/src/main/java/com/hazelcast/config/ConfigAccessor.java b/hazelcast/src/main/java/com/hazelcast/config/ConfigAccessor.java index d754e992f38c..53a6fb855838 100644 --- a/hazelcast/src/main/java/com/hazelcast/config/ConfigAccessor.java +++ b/hazelcast/src/main/java/com/hazelcast/config/ConfigAccessor.java @@ -41,4 +41,8 @@ public static NetworkConfig getActiveMemberNetworkConfig(Config config) { public static ServicesConfig getServicesConfig(Config config) { return config.getServicesConfig(); } + + public static boolean isInstanceTrackingEnabledSet(Config config) { + return config.getInstanceTrackingConfig().isEnabledSet; + } } diff --git a/hazelcast/src/main/java/com/hazelcast/config/InstanceTrackingConfig.java b/hazelcast/src/main/java/com/hazelcast/config/InstanceTrackingConfig.java index 4b576964a029..d1fcdf720397 100644 --- a/hazelcast/src/main/java/com/hazelcast/config/InstanceTrackingConfig.java +++ b/hazelcast/src/main/java/com/hazelcast/config/InstanceTrackingConfig.java @@ -16,6 +16,10 @@ package com.hazelcast.config; +import com.hazelcast.internal.util.EmptyStatement; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Objects; @@ -41,16 +45,24 @@ public class InstanceTrackingConfig { */ public static final Path DEFAULT_FILE = Paths.get(System.getProperty("java.io.tmpdir"), "Hazelcast.process"); + /** + * Default setting whether instance tracking should be enabled or not. + * It depends on whether the instance is an OEM/NLC build or not. + */ + public static final boolean DEFAULT_ENABLED = isOEMBuild(); + /** * Namespace for the placeholders in the file name and format pattern to * distinguish between different types of placeholders. */ public static final String PLACEHOLDER_NAMESPACE = "HZ_INSTANCE_TRACKING"; - private boolean enabled; + private boolean enabled = DEFAULT_ENABLED; private String fileName; private String formatPattern; + boolean isEnabledSet; + public InstanceTrackingConfig() { super(); } @@ -76,6 +88,7 @@ public boolean isEnabled() { */ public InstanceTrackingConfig setEnabled(boolean enabled) { this.enabled = enabled; + this.isEnabledSet = true; return this; } @@ -311,4 +324,21 @@ public String getModeName() { return modeName; } } + + /** + * Returns whether this build is an OEM/NLC build or not. + */ + private static boolean isOEMBuild() { + try { + Class helper = Class.forName("com.hazelcast.license.util.LicenseHelper"); + Method getLicense = helper.getMethod("getBuiltInLicense"); + // enabled for OEM/NLC build + return getLicense.invoke(null) != null; + } catch (ClassNotFoundException | NoSuchMethodException + | IllegalAccessException | InvocationTargetException e) { + // running OS, instance tracking is disabled by default + EmptyStatement.ignore(e); + } + return false; + } } diff --git a/hazelcast/src/main/java/com/hazelcast/internal/config/AbstractDomConfigProcessor.java b/hazelcast/src/main/java/com/hazelcast/internal/config/AbstractDomConfigProcessor.java index 31a8622cb5fa..f14e93193b13 100644 --- a/hazelcast/src/main/java/com/hazelcast/internal/config/AbstractDomConfigProcessor.java +++ b/hazelcast/src/main/java/com/hazelcast/internal/config/AbstractDomConfigProcessor.java @@ -48,6 +48,7 @@ import static com.hazelcast.internal.config.DomConfigHelper.cleanNodeName; import static com.hazelcast.internal.config.DomConfigHelper.getBooleanValue; import static com.hazelcast.internal.config.DomConfigHelper.getIntegerValue; +import static com.hazelcast.internal.util.StringUtil.isNullOrEmptyAfterTrim; import static com.hazelcast.internal.util.StringUtil.upperCaseInternal; /** @@ -404,8 +405,10 @@ protected LoginModuleConfig handleLoginModule(Node node) { protected void handleInstanceTracking(Node node, InstanceTrackingConfig trackingConfig) { Node attrEnabled = getNamedItemNode(node, "enabled"); - boolean enabled = getBooleanValue(getTextContent(attrEnabled)); - trackingConfig.setEnabled(enabled); + String textContent = getTextContent(attrEnabled); + if (!isNullOrEmptyAfterTrim(textContent)) { + trackingConfig.setEnabled(getBooleanValue(textContent)); + } for (Node n : childElements(node)) { final String name = cleanNodeName(n); diff --git a/hazelcast/src/main/resources/hazelcast-default.xml b/hazelcast/src/main/resources/hazelcast-default.xml index e6812a5a169f..8ee9fb094b2c 100644 --- a/hazelcast/src/main/resources/hazelcast-default.xml +++ b/hazelcast/src/main/resources/hazelcast-default.xml @@ -329,10 +329,6 @@ 5 - - - - -1 0 diff --git a/hazelcast/src/main/resources/hazelcast-default.yaml b/hazelcast/src/main/resources/hazelcast-default.yaml index f3b6ad08b32e..a7ac3a054b1f 100644 --- a/hazelcast/src/main/resources/hazelcast-default.yaml +++ b/hazelcast/src/main/resources/hazelcast-default.yaml @@ -331,9 +331,6 @@ hazelcast: enabled: true collection-frequency-seconds: 5 - instance-tracking: - enabled: false - sql: executor-pool-size: -1 statement-timeout-millis: 0