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