This is an automated email from the ASF dual-hosted git repository.
petrov-mg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 23a92230b00 IGNITE-28740 Refactored Ignite product version
initialization and usages (#13199)
23a92230b00 is described below
commit 23a92230b001a4912ff2c666906e2a2c86f47351
Author: Mikhail Petrov <[email protected]>
AuthorDate: Thu Jun 4 10:44:11 2026 +0300
IGNITE-28740 Refactored Ignite product version initialization and usages
(#13199)
---
.../apache/ignite/internal/IgniteVersionUtils.java | 73 +++-------------------
.../apache/ignite/lang/IgniteProductVersion.java | 36 ++++++++++-
.../internal/commandline/CommandHandler.java | 4 +-
modules/core/pom.xml | 9 ---
.../java/org/apache/ignite/dump/DumpReader.java | 4 +-
.../org/apache/ignite/internal/IgniteKernal.java | 11 +---
.../apache/ignite/internal/IgniteMXBeanImpl.java | 3 +-
.../org/apache/ignite/internal/cdc/CdcMain.java | 4 +-
.../internal/plugin/IgniteLogInfoProviderImpl.java | 15 ++---
.../ignite/spi/discovery/tcp/ClientImpl.java | 5 +-
.../ignite/spi/discovery/tcp/ServerImpl.java | 5 +-
.../ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 9 +++
.../startup/cmdline/CdcCommandLineStartup.java | 4 +-
.../ignite/startup/cmdline/CommandLineStartup.java | 14 +++--
modules/core/src/main/resources/ignite.properties | 1 -
.../internal/IgniteVersionUtilsSelfTest.java | 15 +++--
.../product/GridProductVersionSelfTest.java | 5 --
.../plugin/IgniteExtLogInfoProviderImpl.java | 4 +-
18 files changed, 93 insertions(+), 128 deletions(-)
diff --git
a/modules/commons/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
b/modules/commons/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
index 58f0887b0d5..f72e339c2b2 100644
---
a/modules/commons/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
+++
b/modules/commons/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java
@@ -17,91 +17,36 @@
package org.apache.ignite.internal;
-import java.time.Instant;
import java.time.LocalDate;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.Locale;
import org.apache.ignite.lang.IgniteProductVersion;
+import static java.time.ZoneOffset.UTC;
+
/**
* Ignite version utils.
*/
public class IgniteVersionUtils {
- /** Ignite version in String form. */
+ /** Ignite artifact version. See {@link IgniteProperties} file generation
by Maven build scripts. */
public static final String VER_STR;
/** Ignite version. */
public static final IgniteProductVersion VER;
- /** UTC build date formatter. */
- private static final DateTimeFormatter BUILD_TSTAMP_DATE_FORMATTER;
-
- /** Formatted build date. */
- public static final String BUILD_TSTAMP_STR;
-
- /** Build timestamp in seconds. */
- public static final long BUILD_TSTAMP;
-
- /** Build timestamp string property value. */
- private static final String BUILD_TSTAMP_FROM_PROPERTY;
-
- /** Revision hash. */
- public static final String REV_HASH_STR;
-
- /** Release date. */
- public static final LocalDate RELEASE_DATE;
-
- /** Compound version. */
- public static final String ACK_VER_STR;
-
/** Copyright blurb. */
public static final String COPYRIGHT;
- /**
- * Static initializer.
- */
static {
- VER_STR = IgniteProperties.get("ignite.version")
- .replace(".a", "-a") // Backward compatibility fix.
- .replace(".b", "-b")
- .replace(".final", "-final");
-
- BUILD_TSTAMP_FROM_PROPERTY = IgniteProperties.get("ignite.build");
+ VER_STR = IgniteProperties.get("ignite.version");
- //Development ignite.properties file contains ignite.build = 0, so we
will add the check for it.
- BUILD_TSTAMP = !BUILD_TSTAMP_FROM_PROPERTY.isEmpty() &&
Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) != 0
- ? Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) :
System.currentTimeMillis() / 1000;
+ long revTs = Long.parseLong(IgniteProperties.get("ignite.build"));
- BUILD_TSTAMP_DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("UTC"));
+ String revHash = IgniteProperties.get("ignite.revision");
- BUILD_TSTAMP_STR = formatBuildTimeStamp(BUILD_TSTAMP * 1000);
+ VER = IgniteProductVersion.fromString(VER_STR + '-' + revTs + '-' +
revHash);
- COPYRIGHT = BUILD_TSTAMP_STR.substring(0, 4) + " Copyright(C) Apache
Software Foundation";
+ int year = revTs == 0 ? LocalDate.now(UTC).getYear() :
VER.buildTime().atZone(UTC).getYear();
- REV_HASH_STR = IgniteProperties.get("ignite.revision");
-
- String releaseDateStr = IgniteProperties.get("ignite.rel.date");
-
- DateTimeFormatter releaseDateFormatter =
DateTimeFormatter.ofPattern("ddMMyyyy", Locale.US);
-
- RELEASE_DATE = LocalDate.parse(releaseDateStr, releaseDateFormatter);
-
- String rev = REV_HASH_STR.length() > 8 ? REV_HASH_STR.substring(0, 8)
: REV_HASH_STR;
-
- ACK_VER_STR = VER_STR + '#' + BUILD_TSTAMP_STR + "-sha1:" + rev;
-
- VER = IgniteProductVersion.fromString(VER_STR + '-' + BUILD_TSTAMP +
'-' + REV_HASH_STR);
- }
-
- /**
- * Builds string date representation in "yyyyMMdd" format.
- *
- * @param ts Timestamp.
- * @return Timestamp date in UTC timezone.
- */
- public static String formatBuildTimeStamp(long ts) {
- return BUILD_TSTAMP_DATE_FORMATTER.format(Instant.ofEpochMilli(ts));
+ COPYRIGHT = year + " Copyright(C) Apache Software Foundation";
}
/**
diff --git
a/modules/commons/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
b/modules/commons/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
index 3bd6a109805..4e84d0f3e08 100644
---
a/modules/commons/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
+++
b/modules/commons/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java
@@ -21,14 +21,18 @@ import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.time.Instant;
+import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.IgniteVersionUtils;
import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.internal.util.typedef.F;
import org.jetbrains.annotations.NotNull;
+import static java.time.ZoneOffset.UTC;
+
/**
* Represents node version.
* <p>
@@ -41,6 +45,9 @@ public class IgniteProductVersion implements
Comparable<IgniteProductVersion>, E
/** */
private static final long serialVersionUID = 0L;
+ /** Ignite version build time format. */
+ public static final DateTimeFormatter BUILD_TIME_FORMAT =
DateTimeFormatter.ofPattern("yyyyMMdd").withZone(UTC);
+
/** Size of the {@link #revHash }*/
public static final int REV_HASH_SIZE = 20;
@@ -161,11 +168,22 @@ public class IgniteProductVersion implements
Comparable<IgniteProductVersion>, E
return revHash;
}
+ /**
+ * Gets build time.
+ *
+ * @return Build time.
+ */
+ public Instant buildTime() {
+ return Instant.ofEpochSecond(revTs);
+ }
+
/**
* Gets release date.
*
* @return Release date.
+ * @deprecated Use {@link #buildTime()} instead.
*/
+ @Deprecated
public Date releaseDate() {
return new Date(revTs * 1000);
}
@@ -267,13 +285,25 @@ public class IgniteProductVersion implements
Comparable<IgniteProductVersion>, E
/** {@inheritDoc} */
@Override public String toString() {
- String revTsStr = IgniteVersionUtils.formatBuildTimeStamp(revTs *
1000);
+ String ts = BUILD_TIME_FORMAT.format(buildTime());
String hash = CommonUtils.byteArray2HexString(revHash).toLowerCase();
hash = hash.length() > 8 ? hash.substring(0, 8) : hash;
- return major + "." + minor + "." + maintenance + "#" + revTsStr +
"-sha1:" + hash;
+ StringBuilder sb = new StringBuilder();
+
+ sb.append(major)
+ .append(".").append(minor)
+ .append(".").append(maintenance);
+
+ if (!F.isEmpty(stage))
+ sb.append("-").append(stage);
+
+ sb.append("#").append(ts)
+ .append("-sha1:").append(hash);
+
+ return sb.toString();
}
/**
diff --git
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index bd987ad52dd..4d7230eb0a6 100644
---
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -71,8 +71,8 @@ import static java.lang.System.lineSeparator;
import static java.util.Objects.nonNull;
import static
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
import static org.apache.ignite.IgniteSystemProperties.getBoolean;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static
org.apache.ignite.internal.commandline.ArgumentParser.CMD_AUTO_CONFIRMATION;
import static
org.apache.ignite.internal.commandline.ArgumentParser.CMD_ENABLE_EXPERIMENTAL;
import static
org.apache.ignite.internal.commandline.ArgumentParser.CMD_VERBOSE;
@@ -207,7 +207,7 @@ public class CommandHandler {
Thread.currentThread().setName("session=" + ses);
- logger.info("Control utility [ver. " + ACK_VER_STR + "]");
+ logger.info("Control utility [ver. " + VER + "]");
logger.info(COPYRIGHT);
logger.info("User: " + System.getProperty("user.name"));
logger.info("Time: " + startTime.format(formatter));
diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index 959a706488e..aebc94795a5 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -463,10 +463,6 @@
<configuration>
<failOnError>false</failOnError>
<target>
- <tstamp>
- <format property="ignite.rel.date"
pattern="ddMMyyyy" locale="en" />
- </tstamp>
-
<property name="props.file"
value="../../modules/core/target/classes/ignite.properties" />
<replaceregexp file="${props.file}"
byline="true">
@@ -474,11 +470,6 @@
<substitution
expression="ignite.update.notifier.enabled.by.default=${update.notifier.enabled.by.default}"
/>
</replaceregexp>
- <replaceregexp file="${props.file}"
byline="true">
- <regexp
pattern="ignite.rel.date=.*" />
- <substitution
expression="ignite.rel.date=${ignite.rel.date}" />
- </replaceregexp>
-
<replaceregexp file="${props.file}"
byline="true">
<regexp
pattern="ignite.update.status.params=.*" />
<substitution
expression="ignite.update.status.params=ver=${project.version}&product=${ignite.update.notifier.product}"
/>
diff --git a/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
b/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
index d720c7b66f0..039b7941fd3 100644
--- a/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
+++ b/modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java
@@ -64,8 +64,8 @@ import org.apache.ignite.spi.encryption.EncryptionSpi;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.apache.ignite.internal.IgniteKernal.NL;
import static org.apache.ignite.internal.IgniteKernal.SITE;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.closeAllComponents;
import static
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.startAllComponents;
@@ -206,7 +206,7 @@ public class DumpReader implements Runnable {
/** */
private void ackAsciiLogo() {
- String ver = "ver. " + ACK_VER_STR;
+ String ver = "ver. " + VER;
if (log.isInfoEnabled()) {
log.info(NL + NL +
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index d62afb99c95..303b0355960 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -269,11 +269,11 @@ import static
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_SPI_CLASS;
import static
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_TX_AWARE_QUERIES_ENABLED;
import static
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_TX_SERIALIZABLE_ENABLED;
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_USER_NAME;
-import static org.apache.ignite.internal.IgniteVersionUtils.BUILD_TSTAMP_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
import static org.apache.ignite.internal.util.IgniteUtils.validateRamUsage;
+import static org.apache.ignite.lang.IgniteProductVersion.BUILD_TIME_FORMAT;
import static org.apache.ignite.lifecycle.LifecycleEventType.AFTER_NODE_START;
import static org.apache.ignite.lifecycle.LifecycleEventType.BEFORE_NODE_START;
import static org.apache.ignite.mxbean.IgniteMXBean.ACTIVE_DESC;
@@ -577,11 +577,6 @@ public class IgniteKernal implements IgniteEx,
Externalizable {
return X.timeSpan2DHMSM(upTime());
}
- /** @return String representation of version of current Ignite instance. */
- String fullVersion() {
- return VER_STR + '-' + BUILD_TSTAMP_STR;
- }
-
/** @return String representation of the checkpoint SPI. */
String checkpointSpiFormatted() {
assert cfg != null;
@@ -1560,7 +1555,7 @@ public class IgniteKernal implements IgniteEx,
Externalizable {
// Stick in some system level attributes
add(ATTR_JIT_NAME, U.getCompilerMx() == null ? "" :
U.getCompilerMx().getName());
add(ATTR_BUILD_VER, VER_STR);
- add(ATTR_BUILD_DATE, BUILD_TSTAMP_STR);
+ add(ATTR_BUILD_DATE, BUILD_TIME_FORMAT.format(VER.buildTime()));
add(ATTR_MARSHALLER, ctx.marshaller().getClass().getName());
add(ATTR_MARSHALLER_USE_DFLT_SUID,
getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID,
Marshallers.USE_DFLT_SUID));
@@ -3413,7 +3408,7 @@ public class IgniteKernal implements IgniteEx,
Externalizable {
MetricRegistry reg =
ctx.metric().registry(GridMetricManager.IGNITE_METRICS);
- reg.register("fullVersion", this::fullVersion, String.class,
FULL_VER_DESC);
+ reg.register("fullVersion", VER::toString, String.class,
FULL_VER_DESC);
reg.register("copyright", () -> COPYRIGHT, String.class,
COPYRIGHT_DESC);
reg.register("startTimestampFormatted", this::startTimeFormatted,
String.class,
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteMXBeanImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteMXBeanImpl.java
index 286f05f4216..fc4749be1d3 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteMXBeanImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteMXBeanImpl.java
@@ -33,6 +33,7 @@ import org.apache.ignite.mxbean.IgniteMXBean;
import static org.apache.ignite.cluster.ClusterState.ACTIVE;
import static org.apache.ignite.cluster.ClusterState.INACTIVE;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
/** Implementation of {@link IgniteMXBean}. */
public class IgniteMXBeanImpl implements IgniteMXBean {
@@ -103,7 +104,7 @@ public class IgniteMXBeanImpl implements IgniteMXBean {
/** {@inheritDoc} */
@Override public String getFullVersion() {
- return kernal.fullVersion();
+ return VER.toString();
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
index d7f22658fdd..b874a1c9665 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
@@ -78,8 +78,8 @@ import
org.apache.ignite.startup.cmdline.CdcCommandLineStartup;
import static org.apache.ignite.internal.IgniteKernal.NL;
import static org.apache.ignite.internal.IgniteKernal.SITE;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static
org.apache.ignite.internal.IgnitionEx.initializeDefaultMBeanServer;
import static
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_DATA_RECORD;
import static
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_MANAGER_RECORD;
@@ -916,7 +916,7 @@ public class CdcMain implements Runnable {
/** */
private void ackAsciiLogo() {
- String ver = "ver. " + ACK_VER_STR;
+ String ver = "ver. " + VER;
if (log.isInfoEnabled()) {
log.info(NL + NL +
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/plugin/IgniteLogInfoProviderImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/plugin/IgniteLogInfoProviderImpl.java
index b39e391f551..8678793f624 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/plugin/IgniteLogInfoProviderImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/plugin/IgniteLogInfoProviderImpl.java
@@ -71,11 +71,8 @@ import static
org.apache.ignite.IgniteSystemProperties.IGNITE_NO_ASCII;
import static
org.apache.ignite.internal.IgniteKernal.DFLT_LOG_CLASSPATH_CONTENT_ON_STARTUP;
import static org.apache.ignite.internal.IgniteKernal.NL;
import static org.apache.ignite.internal.IgniteKernal.SITE;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
-import static org.apache.ignite.internal.IgniteVersionUtils.BUILD_TSTAMP_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
-import static org.apache.ignite.internal.IgniteVersionUtils.REV_HASH_STR;
-import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.INTERNAL_DATA_REGION_NAMES;
import static org.apache.ignite.internal.util.IgniteUtils.MB;
@@ -158,7 +155,7 @@ public class IgniteLogInfoProviderImpl implements
IgniteLogInfoProvider {
if (System.getProperty(IGNITE_NO_ASCII) != null)
return;
- String ver = "ver. " + ACK_VER_STR;
+ String ver = "ver. " + VER;
// Big thanks to: http://patorjk.com/software/taag
// Font name "Small Slant"
@@ -632,7 +629,7 @@ public class IgniteLogInfoProviderImpl implements
IgniteLogInfoProvider {
}
if (log.isInfoEnabled()) {
- String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR +
"-sha1:" + REV_HASH_STR;
+ String ack = "Ignite ver. " + VER;
String dash = U.dash(ack.length());
@@ -943,8 +940,7 @@ public class IgniteLogInfoProviderImpl implements
IgniteLogInfoProvider {
return;
if (!err) {
- String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR +
"-sha1:" + REV_HASH_STR +
- " stopped OK";
+ String ack = "Ignite ver. " + VER + " stopped OK";
String dash = U.dash(ack.length());
@@ -958,8 +954,7 @@ public class IgniteLogInfoProviderImpl implements
IgniteLogInfoProvider {
NL);
}
else {
- String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR +
"-sha1:" + REV_HASH_STR +
- " stopped with ERRORS";
+ String ack = "Ignite ver. " + VER + " stopped with ERRORS";
String dash = U.dash(ack.length());
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
index 0d424a7a9dc..d3a5f13fe23 100644
---
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
@@ -2220,6 +2220,8 @@ class ClientImpl extends TcpDiscoveryImpl {
rmtNodes.clear();
for (TcpDiscoveryNode n : top) {
+ spi.restoreRemoteNodeVersion(n);
+
if (n.order() > 0)
n.visible(true);
@@ -2363,8 +2365,7 @@ class ClientImpl extends TcpDiscoveryImpl {
node.order(topVer);
node.visible(true);
- if (spi.locNodeVer.equals(node.version()))
- node.version(spi.locNodeVer);
+ spi.restoreRemoteNodeVersion(node);
evt = true;
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index f11ab667db0..d16d5994878 100644
---
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -5263,6 +5263,8 @@ class ServerImpl extends TcpDiscoveryImpl {
assert n.internalOrder() <
node.internalOrder() :
"Invalid node [topNode=" + n + ", added="
+ node + ']';
+ spi.restoreRemoteNodeVersion(n);
+
// Make all preceding nodes and local node
visible.
n.visible(true);
}
@@ -5405,8 +5407,7 @@ class ServerImpl extends TcpDiscoveryImpl {
assert node.internalOrder() > locNode.internalOrder() :
"Invalid order [node=" + node +
", locNode=" + locNode + ", msg=" + msg + ", ring=" + ring
+ ']';
- if (spi.locNodeVer.equals(node.version()))
- node.version(spi.locNodeVer);
+ spi.restoreRemoteNodeVersion(node);
if (!locNodeCoord) {
boolean b = ring.topologyVersion(topVer);
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 6e14dfa8f27..0ccf594f1f6 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
@@ -2482,6 +2482,15 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter
implements IgniteDiscovery
}
}
+ /**
+ * Tries to restore the node's {@link IgniteProductVersion#stage()} field,
since it is transient and is not
+ * automatically restored after Cluster Node deserialization.
+ */
+ protected void restoreRemoteNodeVersion(TcpDiscoveryNode rmtNode) {
+ if (locNodeVer.equals(rmtNode.version()))
+ rmtNode.version(locNodeVer);
+ }
+
/**
* Socket timeout object.
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java
index 63d645122ad..3e434309b6a 100644
---
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java
+++
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CdcCommandLineStartup.java
@@ -26,8 +26,8 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_SHUTDOWN_HOOK;
import static org.apache.ignite.internal.IgniteKernal.NL;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static org.apache.ignite.startup.cmdline.CommandLineStartup.isHelp;
/**
@@ -57,7 +57,7 @@ public class CdcCommandLineStartup {
" / _/ ___/ |/ / _/_ __/ __/ / ___/ _ \\/ ___/" +
NL +
" _/ // (7 7 // / / / / _/ / /__/ // / /__ " +
NL +
" /___/\\___/_/|_/___/ /_/ /___/ \\___/____/\\___/");
- X.println("Ignite Change Data Capture Command Line Startup, ver. "
+ ACK_VER_STR);
+ X.println("Ignite Change Data Capture Command Line Startup, ver. "
+ VER);
X.println(COPYRIGHT);
X.println();
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
index 59fe4a22035..f1e5f928512 100644
---
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
+++
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
@@ -58,12 +58,12 @@ import
org.apache.ignite.spi.deployment.local.LocalDeploymentSpi;
import org.jetbrains.annotations.Nullable;
import static java.lang.String.format;
+import static java.time.ZoneOffset.UTC;
import static org.apache.ignite.IgniteState.STARTED;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_PROG_NAME;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_RESTART_CODE;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
-import static org.apache.ignite.internal.IgniteVersionUtils.RELEASE_DATE;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
/**
@@ -177,8 +177,12 @@ public final class CommandLineStartup {
new Class<?>[] {aboutHndCls},
new InvocationHandler() {
@Override public Object invoke(Object proxy, Method mtd,
Object[] args) throws Throwable {
- AboutDialog.centerShow("Ignite Node",
bannerUrl.toExternalForm(), VER_STR,
- RELEASE_DATE, COPYRIGHT);
+ AboutDialog.centerShow(
+ "Ignite Node",
+ bannerUrl.toExternalForm(),
+ VER_STR,
+ VER.buildTime().atZone(UTC).toLocalDate(),
+ COPYRIGHT);
return null;
}
@@ -315,7 +319,7 @@ public final class CommandLineStartup {
*/
public static void main(String[] args) {
if (!QUITE) {
- X.println("Ignite Command Line Startup, ver. " + ACK_VER_STR);
+ X.println("Ignite Command Line Startup, ver. " + VER);
X.println(COPYRIGHT);
X.println();
}
diff --git a/modules/core/src/main/resources/ignite.properties
b/modules/core/src/main/resources/ignite.properties
index cb91ffada9d..ec6fa7dd30f 100644
--- a/modules/core/src/main/resources/ignite.properties
+++ b/modules/core/src/main/resources/ignite.properties
@@ -18,6 +18,5 @@
ignite.version=2.19.0-SNAPSHOT
ignite.build=0
ignite.revision=DEV
-ignite.rel.date=01011970
ignite.update.status.params=test=vfvfvskfkeievskjv
ignite.update.notifier.enabled.by.default=false
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteVersionUtilsSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteVersionUtilsSelfTest.java
index 5ec6ef5203b..cdf83796c14 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteVersionUtilsSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteVersionUtilsSelfTest.java
@@ -17,19 +17,18 @@
package org.apache.ignite.internal;
-import java.util.Calendar;
+import java.time.LocalDate;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
-/**
- */
+import static java.time.ZoneOffset.UTC;
+
+/** */
public class IgniteVersionUtilsSelfTest extends GridCommonAbstractTest {
- /**
- * @throws Exception If failed.
- */
+ /** */
@Test
- public void testIgniteCopyrights() throws Exception {
- final String COPYRIGHT =
String.valueOf(Calendar.getInstance().get(Calendar.YEAR)) + " Copyright(C)
Apache Software Foundation";
+ public void testIgniteCopyrights() {
+ final String COPYRIGHT = LocalDate.now(UTC).getYear() + " Copyright(C)
Apache Software Foundation";
assertNotNull(IgniteVersionUtils.COPYRIGHT);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/product/GridProductVersionSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/product/GridProductVersionSelfTest.java
index 79a47b625fd..51c734667e9 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/product/GridProductVersionSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/product/GridProductVersionSelfTest.java
@@ -21,9 +21,6 @@ import org.apache.ignite.lang.IgniteProductVersion;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
-import static org.apache.ignite.internal.IgniteVersionUtils.BUILD_TSTAMP;
-import static org.apache.ignite.internal.IgniteVersionUtils.REV_HASH_STR;
-import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
import static org.junit.Assert.assertArrayEquals;
/**
@@ -137,7 +134,5 @@ public class GridProductVersionSelfTest extends
GridCommonAbstractTest {
assertEquals(4, ver.revisionTimestamp());
assertArrayEquals(new byte[]{24, -27, -89, -20, -98, 50, 2, 18, 106,
105, -68, 35, 26, 107, -106, 91, -63, -41, 61, -18},
ver.revisionHash());
-
- IgniteProductVersion.fromString(VER_STR + '-' + BUILD_TSTAMP + '-' +
REV_HASH_STR);
}
}
diff --git
a/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/plugin/IgniteExtLogInfoProviderImpl.java
b/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/plugin/IgniteExtLogInfoProviderImpl.java
index 826c7e333a1..525b9c4ba5b 100644
---
a/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/plugin/IgniteExtLogInfoProviderImpl.java
+++
b/modules/extdata/pluggable/src/test/java/org/apache/ignite/internal/plugin/IgniteExtLogInfoProviderImpl.java
@@ -23,8 +23,8 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.util.typedef.internal.U;
import static org.apache.ignite.internal.IgniteKernal.NL;
-import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.IgniteVersionUtils.VER;
/**
* Change the message output for metrics log.
@@ -32,7 +32,7 @@ import static
org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
public class IgniteExtLogInfoProviderImpl extends IgniteLogInfoProviderImpl {
/** {@inheritDoc} */
@Override void ackAsciiLogo(IgniteLogger log, IgniteConfiguration cfg,
RuntimeMXBean rtBean) {
- String ver = "ver. " + ACK_VER_STR;
+ String ver = "ver. " + VER;
U.quietAndInfo(log,
NL + NL +