in modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java [548:729]
static {
boolean assertionsEnabled0 = true;
try {
assert false;
assertionsEnabled0 = false;
}
catch (AssertionError ignored) {
assertionsEnabled0 = true;
}
finally {
assertionsEnabled = assertionsEnabled0;
}
String osName = System.getProperty("os.name");
String osLow = osName.toLowerCase();
// OS type detection.
if (osLow.contains("win"))
win = true;
else if (osLow.contains("mac os"))
mac = true;
else {
// UNIXs flavors tokens.
for (CharSequence os : new String[] {"ix", "inux", "olaris", "un", "ux", "sco", "bsd", "att"})
if (osLow.contains(os)) {
unix = true;
break;
}
if (osLow.contains("inux"))
linux = true;
}
String osArch = System.getProperty("os.arch");
String javaRtName = System.getProperty("java.runtime.name");
String javaRtVer = System.getProperty("java.runtime.version");
String jdkName = System.getProperty("java.specification.name");
String jdkVer = System.getProperty("java.specification.version");
String osVer = System.getProperty("os.version");
String jvmImplVer = System.getProperty("java.vm.version");
String jvmImplVendor = System.getProperty("java.vm.vendor");
String jvmImplName = System.getProperty("java.vm.name");
// Best effort to detect a 32-bit JVM.
String jvmArchDataModel = System.getProperty("sun.arch.data.model");
String jdkStr = javaRtName + ' ' + javaRtVer + ' ' + jvmImplVendor + ' ' + jvmImplName + ' ' +
jvmImplVer;
osStr = osName + ' ' + osVer + ' ' + osArch;
// Copy auto variables to static ones.
IgniteUtils.jdkName = jdkName;
IgniteUtils.jdkVer = jdkVer;
IgniteUtils.jdkStr = jdkStr;
IgniteUtils.jvmImplName = jvmImplName;
jvm32Bit = "32".equals(jvmArchDataModel);
primitiveMap.put("byte", byte.class);
primitiveMap.put("short", short.class);
primitiveMap.put("int", int.class);
primitiveMap.put("long", long.class);
primitiveMap.put("float", float.class);
primitiveMap.put("double", double.class);
primitiveMap.put("char", char.class);
primitiveMap.put("boolean", boolean.class);
primitiveMap.put("void", void.class);
boxedClsMap.put(byte.class, Byte.class);
boxedClsMap.put(short.class, Short.class);
boxedClsMap.put(int.class, Integer.class);
boxedClsMap.put(long.class, Long.class);
boxedClsMap.put(float.class, Float.class);
boxedClsMap.put(double.class, Double.class);
boxedClsMap.put(char.class, Character.class);
boxedClsMap.put(boolean.class, Boolean.class);
boxedClsMap.put(void.class, Void.class);
// Disable hostname SSL verification for development and testing with self-signed certificates.
if (Boolean.parseBoolean(System.getProperty(IGNITE_DISABLE_HOSTNAME_VERIFIER))) {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override public boolean verify(String hostname, SSLSession sslSes) {
return true;
}
});
}
// Event names initialization.
Class<?>[] evtHolderClasses = new Class[] {EventType.class, DiscoveryCustomEvent.class};
for (Class<?> cls : evtHolderClasses) {
for (Field field : cls.getFields()) {
if (Modifier.isStatic(field.getModifiers()) && field.getType().equals(int.class)) {
if (field.getName().startsWith("EVT_")) {
try {
int type = field.getInt(null);
String prev = GRID_EVT_NAMES.put(type, field.getName().substring("EVT_".length()));
// Check for duplicate event types.
assert prev == null : "Duplicate event [type=" + type + ", name1=" + prev +
", name2=" + field.getName() + ']';
}
catch (IllegalAccessException e) {
throw new IgniteException(e);
}
}
}
}
}
// Event array initialization.
GRID_EVTS = toIntArray(GRID_EVT_NAMES.keySet());
// Sort for fast event lookup.
Arrays.sort(GRID_EVTS);
// We need to re-initialize EVTS_ALL and EVTS_ALL_MINUS_METRIC_UPDATE
// because they may have been initialized to null before GRID_EVTS were initialized.
if (EVTS_ALL == null || EVTS_ALL_MINUS_METRIC_UPDATE == null) {
try {
Field f1 = EventType.class.getDeclaredField("EVTS_ALL");
Field f2 = EventType.class.getDeclaredField("EVTS_ALL_MINUS_METRIC_UPDATE");
assert f1 != null;
assert f2 != null;
// We use unsafe operations to update static fields on interface because
// they are treated as static final and cannot be updated via standard reflection.
putObjectVolatile(staticFieldBase(f1), staticFieldOffset(f1), gridEvents());
putObjectVolatile(staticFieldBase(f2), staticFieldOffset(f2), gridEvents(EVT_NODE_METRICS_UPDATED));
assert EVTS_ALL != null;
assert EVTS_ALL.length == GRID_EVTS.length;
assert EVTS_ALL_MINUS_METRIC_UPDATE != null;
assert EVTS_ALL_MINUS_METRIC_UPDATE.length == GRID_EVTS.length - 1;
// Validate correctness.
for (int type : GRID_EVTS) {
assert containsIntArray(EVTS_ALL, type);
if (type != EVT_NODE_METRICS_UPDATED)
assert containsIntArray(EVTS_ALL_MINUS_METRIC_UPDATE, type);
}
assert !containsIntArray(EVTS_ALL_MINUS_METRIC_UPDATE, EVT_NODE_METRICS_UPDATED);
}
catch (NoSuchFieldException e) {
throw new IgniteException(e);
}
}
exceptionConverters = Collections.unmodifiableMap(exceptionConverters());
// Set the http.strictPostRedirect property to prevent redirected POST from being mapped to a GET.
System.setProperty("http.strictPostRedirect", "true");
for (Method mtd : Object.class.getMethods()) {
if ("hashCode".equals(mtd.getName()))
hashCodeMtd = mtd;
else if ("equals".equals(mtd.getName()))
equalsMtd = mtd;
else if ("toString".equals(mtd.getName()))
toStringMtd = mtd;
}
try {
clsURLClassPath = Class.forName("jdk.internal.loader.URLClassPath");
mthdURLClassPathGetUrls = clsURLClassPath.getMethod("getURLs");
}
catch (ReflectiveOperationException e) {
clsURLClassPath = null;
mthdURLClassPathGetUrls = null;
}
}