Skip to content

Commit 23a9223

Browse files
authored
IGNITE-28740 Refactored Ignite product version initialization and usages (#13199)
1 parent e6e830c commit 23a9223

18 files changed

Lines changed: 93 additions & 128 deletions

File tree

modules/commons/src/main/java/org/apache/ignite/internal/IgniteVersionUtils.java

Lines changed: 9 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -17,91 +17,36 @@
1717

1818
package org.apache.ignite.internal;
1919

20-
import java.time.Instant;
2120
import java.time.LocalDate;
22-
import java.time.ZoneId;
23-
import java.time.format.DateTimeFormatter;
24-
import java.util.Locale;
2521
import org.apache.ignite.lang.IgniteProductVersion;
2622

23+
import static java.time.ZoneOffset.UTC;
24+
2725
/**
2826
* Ignite version utils.
2927
*/
3028
public class IgniteVersionUtils {
31-
/** Ignite version in String form. */
29+
/** Ignite artifact version. See {@link IgniteProperties} file generation by Maven build scripts. */
3230
public static final String VER_STR;
3331

3432
/** Ignite version. */
3533
public static final IgniteProductVersion VER;
3634

37-
/** UTC build date formatter. */
38-
private static final DateTimeFormatter BUILD_TSTAMP_DATE_FORMATTER;
39-
40-
/** Formatted build date. */
41-
public static final String BUILD_TSTAMP_STR;
42-
43-
/** Build timestamp in seconds. */
44-
public static final long BUILD_TSTAMP;
45-
46-
/** Build timestamp string property value. */
47-
private static final String BUILD_TSTAMP_FROM_PROPERTY;
48-
49-
/** Revision hash. */
50-
public static final String REV_HASH_STR;
51-
52-
/** Release date. */
53-
public static final LocalDate RELEASE_DATE;
54-
55-
/** Compound version. */
56-
public static final String ACK_VER_STR;
57-
5835
/** Copyright blurb. */
5936
public static final String COPYRIGHT;
6037

61-
/**
62-
* Static initializer.
63-
*/
6438
static {
65-
VER_STR = IgniteProperties.get("ignite.version")
66-
.replace(".a", "-a") // Backward compatibility fix.
67-
.replace(".b", "-b")
68-
.replace(".final", "-final");
69-
70-
BUILD_TSTAMP_FROM_PROPERTY = IgniteProperties.get("ignite.build");
39+
VER_STR = IgniteProperties.get("ignite.version");
7140

72-
//Development ignite.properties file contains ignite.build = 0, so we will add the check for it.
73-
BUILD_TSTAMP = !BUILD_TSTAMP_FROM_PROPERTY.isEmpty() && Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) != 0
74-
? Long.parseLong(BUILD_TSTAMP_FROM_PROPERTY) : System.currentTimeMillis() / 1000;
41+
long revTs = Long.parseLong(IgniteProperties.get("ignite.build"));
7542

76-
BUILD_TSTAMP_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(ZoneId.of("UTC"));
43+
String revHash = IgniteProperties.get("ignite.revision");
7744

78-
BUILD_TSTAMP_STR = formatBuildTimeStamp(BUILD_TSTAMP * 1000);
45+
VER = IgniteProductVersion.fromString(VER_STR + '-' + revTs + '-' + revHash);
7946

80-
COPYRIGHT = BUILD_TSTAMP_STR.substring(0, 4) + " Copyright(C) Apache Software Foundation";
47+
int year = revTs == 0 ? LocalDate.now(UTC).getYear() : VER.buildTime().atZone(UTC).getYear();
8148

82-
REV_HASH_STR = IgniteProperties.get("ignite.revision");
83-
84-
String releaseDateStr = IgniteProperties.get("ignite.rel.date");
85-
86-
DateTimeFormatter releaseDateFormatter = DateTimeFormatter.ofPattern("ddMMyyyy", Locale.US);
87-
88-
RELEASE_DATE = LocalDate.parse(releaseDateStr, releaseDateFormatter);
89-
90-
String rev = REV_HASH_STR.length() > 8 ? REV_HASH_STR.substring(0, 8) : REV_HASH_STR;
91-
92-
ACK_VER_STR = VER_STR + '#' + BUILD_TSTAMP_STR + "-sha1:" + rev;
93-
94-
VER = IgniteProductVersion.fromString(VER_STR + '-' + BUILD_TSTAMP + '-' + REV_HASH_STR);
95-
}
96-
97-
/**
98-
* Builds string date representation in "yyyyMMdd" format.
99-
*
100-
* @param ts Timestamp.
101-
* @return Timestamp date in UTC timezone.
102-
*/
103-
public static String formatBuildTimeStamp(long ts) {
104-
return BUILD_TSTAMP_DATE_FORMATTER.format(Instant.ofEpochMilli(ts));
49+
COPYRIGHT = year + " Copyright(C) Apache Software Foundation";
10550
}
10651

10752
/**

modules/commons/src/main/java/org/apache/ignite/lang/IgniteProductVersion.java

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,18 @@
2121
import java.io.IOException;
2222
import java.io.ObjectInput;
2323
import java.io.ObjectOutput;
24+
import java.time.Instant;
25+
import java.time.format.DateTimeFormatter;
2426
import java.util.Date;
2527
import java.util.regex.Matcher;
2628
import java.util.regex.Pattern;
2729
import org.apache.ignite.IgniteCheckedException;
28-
import org.apache.ignite.internal.IgniteVersionUtils;
2930
import org.apache.ignite.internal.util.CommonUtils;
31+
import org.apache.ignite.internal.util.typedef.F;
3032
import org.jetbrains.annotations.NotNull;
3133

34+
import static java.time.ZoneOffset.UTC;
35+
3236
/**
3337
* Represents node version.
3438
* <p>
@@ -41,6 +45,9 @@ public class IgniteProductVersion implements Comparable<IgniteProductVersion>, E
4145
/** */
4246
private static final long serialVersionUID = 0L;
4347

48+
/** Ignite version build time format. */
49+
public static final DateTimeFormatter BUILD_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd").withZone(UTC);
50+
4451
/** Size of the {@link #revHash }*/
4552
public static final int REV_HASH_SIZE = 20;
4653

@@ -161,11 +168,22 @@ public byte[] revisionHash() {
161168
return revHash;
162169
}
163170

171+
/**
172+
* Gets build time.
173+
*
174+
* @return Build time.
175+
*/
176+
public Instant buildTime() {
177+
return Instant.ofEpochSecond(revTs);
178+
}
179+
164180
/**
165181
* Gets release date.
166182
*
167183
* @return Release date.
184+
* @deprecated Use {@link #buildTime()} instead.
168185
*/
186+
@Deprecated
169187
public Date releaseDate() {
170188
return new Date(revTs * 1000);
171189
}
@@ -267,13 +285,25 @@ public int compareToIgnoreTimestamp(@NotNull IgniteProductVersion o) {
267285

268286
/** {@inheritDoc} */
269287
@Override public String toString() {
270-
String revTsStr = IgniteVersionUtils.formatBuildTimeStamp(revTs * 1000);
288+
String ts = BUILD_TIME_FORMAT.format(buildTime());
271289

272290
String hash = CommonUtils.byteArray2HexString(revHash).toLowerCase();
273291

274292
hash = hash.length() > 8 ? hash.substring(0, 8) : hash;
275293

276-
return major + "." + minor + "." + maintenance + "#" + revTsStr + "-sha1:" + hash;
294+
StringBuilder sb = new StringBuilder();
295+
296+
sb.append(major)
297+
.append(".").append(minor)
298+
.append(".").append(maintenance);
299+
300+
if (!F.isEmpty(stage))
301+
sb.append("-").append(stage);
302+
303+
sb.append("#").append(ts)
304+
.append("-sha1:").append(hash);
305+
306+
return sb.toString();
277307
}
278308

279309
/**

modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@
7171
import static java.util.Objects.nonNull;
7272
import static org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
7373
import static org.apache.ignite.IgniteSystemProperties.getBoolean;
74-
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
7574
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
75+
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
7676
import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_AUTO_CONFIRMATION;
7777
import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_ENABLE_EXPERIMENTAL;
7878
import static org.apache.ignite.internal.commandline.ArgumentParser.CMD_VERBOSE;
@@ -207,7 +207,7 @@ public <A extends IgniteDataTransferObject> int execute(List<String> rawArgs) {
207207

208208
Thread.currentThread().setName("session=" + ses);
209209

210-
logger.info("Control utility [ver. " + ACK_VER_STR + "]");
210+
logger.info("Control utility [ver. " + VER + "]");
211211
logger.info(COPYRIGHT);
212212
logger.info("User: " + System.getProperty("user.name"));
213213
logger.info("Time: " + startTime.format(formatter));

modules/core/pom.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -463,22 +463,13 @@
463463
<configuration>
464464
<failOnError>false</failOnError>
465465
<target>
466-
<tstamp>
467-
<format property="ignite.rel.date" pattern="ddMMyyyy" locale="en" />
468-
</tstamp>
469-
470466
<property name="props.file" value="../../modules/core/target/classes/ignite.properties" />
471467

472468
<replaceregexp file="${props.file}" byline="true">
473469
<regexp pattern="ignite.update.notifier.enabled.by.default=.*" />
474470
<substitution expression="ignite.update.notifier.enabled.by.default=${update.notifier.enabled.by.default}" />
475471
</replaceregexp>
476472

477-
<replaceregexp file="${props.file}" byline="true">
478-
<regexp pattern="ignite.rel.date=.*" />
479-
<substitution expression="ignite.rel.date=${ignite.rel.date}" />
480-
</replaceregexp>
481-
482473
<replaceregexp file="${props.file}" byline="true">
483474
<regexp pattern="ignite.update.status.params=.*" />
484475
<substitution expression="ignite.update.status.params=ver=${project.version}&amp;product=${ignite.update.notifier.product}" />

modules/core/src/main/java/org/apache/ignite/dump/DumpReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@
6464
import static java.util.concurrent.TimeUnit.MILLISECONDS;
6565
import static org.apache.ignite.internal.IgniteKernal.NL;
6666
import static org.apache.ignite.internal.IgniteKernal.SITE;
67-
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
6867
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
68+
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
6969
import static org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.closeAllComponents;
7070
import static org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.startAllComponents;
7171

@@ -206,7 +206,7 @@ public DumpReader(DumpReaderConfiguration cfg, IgniteLogger log) {
206206

207207
/** */
208208
private void ackAsciiLogo() {
209-
String ver = "ver. " + ACK_VER_STR;
209+
String ver = "ver. " + VER;
210210

211211
if (log.isInfoEnabled()) {
212212
log.info(NL + NL +

modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,11 @@
269269
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_TX_AWARE_QUERIES_ENABLED;
270270
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_TX_SERIALIZABLE_ENABLED;
271271
import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_USER_NAME;
272-
import static org.apache.ignite.internal.IgniteVersionUtils.BUILD_TSTAMP_STR;
273272
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
274273
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
275274
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
276275
import static org.apache.ignite.internal.util.IgniteUtils.validateRamUsage;
276+
import static org.apache.ignite.lang.IgniteProductVersion.BUILD_TIME_FORMAT;
277277
import static org.apache.ignite.lifecycle.LifecycleEventType.AFTER_NODE_START;
278278
import static org.apache.ignite.lifecycle.LifecycleEventType.BEFORE_NODE_START;
279279
import static org.apache.ignite.mxbean.IgniteMXBean.ACTIVE_DESC;
@@ -577,11 +577,6 @@ public String upTimeFormatted() {
577577
return X.timeSpan2DHMSM(upTime());
578578
}
579579

580-
/** @return String representation of version of current Ignite instance. */
581-
String fullVersion() {
582-
return VER_STR + '-' + BUILD_TSTAMP_STR;
583-
}
584-
585580
/** @return String representation of the checkpoint SPI. */
586581
String checkpointSpiFormatted() {
587582
assert cfg != null;
@@ -1560,7 +1555,7 @@ private void fillNodeAttributes(boolean notifyEnabled) throws IgniteCheckedExcep
15601555
// Stick in some system level attributes
15611556
add(ATTR_JIT_NAME, U.getCompilerMx() == null ? "" : U.getCompilerMx().getName());
15621557
add(ATTR_BUILD_VER, VER_STR);
1563-
add(ATTR_BUILD_DATE, BUILD_TSTAMP_STR);
1558+
add(ATTR_BUILD_DATE, BUILD_TIME_FORMAT.format(VER.buildTime()));
15641559
add(ATTR_MARSHALLER, ctx.marshaller().getClass().getName());
15651560
add(ATTR_MARSHALLER_USE_DFLT_SUID,
15661561
getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, Marshallers.USE_DFLT_SUID));
@@ -3413,7 +3408,7 @@ private void registerMetrics() {
34133408

34143409
MetricRegistry reg = ctx.metric().registry(GridMetricManager.IGNITE_METRICS);
34153410

3416-
reg.register("fullVersion", this::fullVersion, String.class, FULL_VER_DESC);
3411+
reg.register("fullVersion", VER::toString, String.class, FULL_VER_DESC);
34173412
reg.register("copyright", () -> COPYRIGHT, String.class, COPYRIGHT_DESC);
34183413

34193414
reg.register("startTimestampFormatted", this::startTimeFormatted, String.class,

modules/core/src/main/java/org/apache/ignite/internal/IgniteMXBeanImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static org.apache.ignite.cluster.ClusterState.ACTIVE;
3434
import static org.apache.ignite.cluster.ClusterState.INACTIVE;
3535
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
36+
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
3637

3738
/** Implementation of {@link IgniteMXBean}. */
3839
public class IgniteMXBeanImpl implements IgniteMXBean {
@@ -103,7 +104,7 @@ public IgniteMXBeanImpl(IgniteKernal kernal) {
103104

104105
/** {@inheritDoc} */
105106
@Override public String getFullVersion() {
106-
return kernal.fullVersion();
107+
return VER.toString();
107108
}
108109

109110
/** {@inheritDoc} */

modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@
7878

7979
import static org.apache.ignite.internal.IgniteKernal.NL;
8080
import static org.apache.ignite.internal.IgniteKernal.SITE;
81-
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
8281
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
82+
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
8383
import static org.apache.ignite.internal.IgnitionEx.initializeDefaultMBeanServer;
8484
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_DATA_RECORD;
8585
import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_MANAGER_RECORD;
@@ -916,7 +916,7 @@ public void stop() {
916916

917917
/** */
918918
private void ackAsciiLogo() {
919-
String ver = "ver. " + ACK_VER_STR;
919+
String ver = "ver. " + VER;
920920

921921
if (log.isInfoEnabled()) {
922922
log.info(NL + NL +

modules/core/src/main/java/org/apache/ignite/internal/plugin/IgniteLogInfoProviderImpl.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,8 @@
7171
import static org.apache.ignite.internal.IgniteKernal.DFLT_LOG_CLASSPATH_CONTENT_ON_STARTUP;
7272
import static org.apache.ignite.internal.IgniteKernal.NL;
7373
import static org.apache.ignite.internal.IgniteKernal.SITE;
74-
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
75-
import static org.apache.ignite.internal.IgniteVersionUtils.BUILD_TSTAMP_STR;
7674
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
77-
import static org.apache.ignite.internal.IgniteVersionUtils.REV_HASH_STR;
78-
import static org.apache.ignite.internal.IgniteVersionUtils.VER_STR;
75+
import static org.apache.ignite.internal.IgniteVersionUtils.VER;
7976
import static org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager.INTERNAL_DATA_REGION_NAMES;
8077
import static org.apache.ignite.internal.util.IgniteUtils.MB;
8178

@@ -158,7 +155,7 @@ void ackAsciiLogo(IgniteLogger log, IgniteConfiguration cfg, RuntimeMXBean rtBea
158155
if (System.getProperty(IGNITE_NO_ASCII) != null)
159156
return;
160157

161-
String ver = "ver. " + ACK_VER_STR;
158+
String ver = "ver. " + VER;
162159

163160
// Big thanks to: http://patorjk.com/software/taag
164161
// Font name "Small Slant"
@@ -632,7 +629,7 @@ void ackNodeInfo(IgniteLogger log, IgniteEx ignite) {
632629
}
633630

634631
if (log.isInfoEnabled()) {
635-
String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR + "-sha1:" + REV_HASH_STR;
632+
String ack = "Ignite ver. " + VER;
636633

637634
String dash = U.dash(ack.length());
638635

@@ -943,8 +940,7 @@ void ackNodeStopped(IgniteLogger log, IgniteEx ignite, boolean err) {
943940
return;
944941

945942
if (!err) {
946-
String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR + "-sha1:" + REV_HASH_STR +
947-
" stopped OK";
943+
String ack = "Ignite ver. " + VER + " stopped OK";
948944

949945
String dash = U.dash(ack.length());
950946

@@ -958,8 +954,7 @@ void ackNodeStopped(IgniteLogger log, IgniteEx ignite, boolean err) {
958954
NL);
959955
}
960956
else {
961-
String ack = "Ignite ver. " + VER_STR + '#' + BUILD_TSTAMP_STR + "-sha1:" + REV_HASH_STR +
962-
" stopped with ERRORS";
957+
String ack = "Ignite ver. " + VER + " stopped with ERRORS";
963958

964959
String dash = U.dash(ack.length());
965960

modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2220,6 +2220,8 @@ private void processNodeAddedMessage(TcpDiscoveryNodeAddedMessage msg) {
22202220
rmtNodes.clear();
22212221

22222222
for (TcpDiscoveryNode n : top) {
2223+
spi.restoreRemoteNodeVersion(n);
2224+
22232225
if (n.order() > 0)
22242226
n.visible(true);
22252227

@@ -2363,8 +2365,7 @@ else if (log.isDebugEnabled())
23632365
node.order(topVer);
23642366
node.visible(true);
23652367

2366-
if (spi.locNodeVer.equals(node.version()))
2367-
node.version(spi.locNodeVer);
2368+
spi.restoreRemoteNodeVersion(node);
23682369

23692370
evt = true;
23702371
}

0 commit comments

Comments
 (0)