Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion src/freenet/node/updater/NodeUpdateManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,26 @@
*/
public class NodeUpdateManager {

/**
* The last build on the previous key with Java 8 support. Older nodes can
* update to this point via old UOM.
*/
public final static int TRANSITION_VERSION_JAVA8 = 1507;

/**
* The last build on the previous key with Java 7 support. Older nodes can
* update to this point via old UOM.
*/
public final static int TRANSITION_VERSION = 1481;

/** The URI for post-TRANSITION_VERSION builds' freenet.jar on modern JVMs. */
public final static String UPDATE_URI = "USK@vCKGjQtKuticcaZ-dwOgmkYPVLj~N1dm9mb3j3Smg4Y,-wz5IYtd7PlhI2Kx4cAwpUu13fW~XBglPyOn8wABn60,AQACAAE/jar/"
public final static String UPDATE_URI = "USK@rW3wdla3fvFIBcMyl1xyd8umjiQQaZaQ-UqaZQCDOMQ,FfihUHiGuHNgNchv5paweQV5oHD0k4~MdlS-eNXcDF0,AQACAAE/jar/"
+ Version.buildNumber();

/** The URI for post-TRANSITION_VERSION builds' freenet.jar on EoL JVMs. */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now we have two “post-TRANSITION_VERSION builds” and I think we should update both of these comments to be more explicit about what they are. 🙂

public final static String LEGACY_UPDATE_URI_JAVA8 = "SSK@vCKGjQtKuticcaZ-dwOgmkYPVLj~N1dm9mb3j3Smg4Y,-wz5IYtd7PlhI2Kx4cAwpUu13fW~XBglPyOn8wABn60,AQACAAE/jar-"
+ TRANSITION_VERSION_JAVA8;

/** The URI for post-TRANSITION_VERSION builds' freenet.jar on EoL JVMs. */
public final static String LEGACY_UPDATE_URI = "SSK@ugWS2VICgMcQ5ptmEE1mAvHgUn2OSCOogJIUAvbL090,ZKO1pZRI9oaBuBQuWFL4bK3K0blvmEdqYgiIJF5GcjQ,AQACAAE/jar-"
+ TRANSITION_VERSION;
Expand All @@ -108,6 +118,9 @@ public class NodeUpdateManager {
public static final long MAX_IP_TO_COUNTRY_LENGTH = 24 * 1024 * 1024;
public static final long MAX_SEEDNODES_LENGTH = 3 * 1024 * 1024;

static final FreenetURI legacyJava8MainJarSSK;
static final FreenetURI legacyJava8MainJarUSK;

static final FreenetURI legacyMainJarSSK;
static final FreenetURI legacyMainJarUSK;

Expand All @@ -121,6 +134,8 @@ public class NodeUpdateManager {

static {
try {
legacyJava8MainJarSSK = new FreenetURI(LEGACY_UPDATE_URI_JAVA8);
legacyJava8MainJarUSK = legacyJava8MainJarSSK.uskForSSK();
legacyMainJarSSK = new FreenetURI(LEGACY_UPDATE_URI);
legacyMainJarUSK = legacyMainJarSSK.uskForSSK();
previousMainJarSSK = new FreenetURI(PREVIOUS_UPDATE_URI);
Expand Down Expand Up @@ -274,8 +289,12 @@ public NodeUpdateManager(Node node, Config config)
*/
if (JVMVersion.needsLegacyUpdater()) {
transitionKey(updaterConfig, previousMainJarSSK, legacyMainJarUSK.toString());
} else if (JVMVersion.needsLegacyUpdaterJava8()) {
transitionKey(updaterConfig, previousMainJarSSK, legacyJava8MainJarUSK.toString());
transitionKey(updaterConfig, legacyMainJarSSK, legacyJava8MainJarUSK.toString());
} else {
transitionKey(updaterConfig, previousMainJarSSK, UPDATE_URI);
transitionKey(updaterConfig, legacyJava8MainJarSSK, UPDATE_URI);
transitionKey(updaterConfig, legacyMainJarSSK, UPDATE_URI);
}

Expand Down
19 changes: 18 additions & 1 deletion src/freenet/support/JVMVersion.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ public class JVMVersion {
* Java version before which to display an End-of-Life warning. Subsequent releases of Freenet will function with
* them, but that may soon not be the case.
*/
public static final String EOL_THRESHOLD = "1.8";
public static final String EOL_THRESHOLD = "17";

/**
* Java version before which to use the Java8 legacy updater URI.
*/
public static final String UPDATER_THRESHOLD_JAVA17 = "17";

/**
* Java version before which to use the legacy updater URI.
Expand Down Expand Up @@ -45,6 +50,10 @@ public static boolean isEOL() {
&& isEOL(getCurrent());
}

public static boolean needsLegacyUpdaterJava8() {
return needsLegacyUpdaterJava8(getCurrent());
}

public static boolean needsLegacyUpdater() {
return needsLegacyUpdater(getCurrent());
}
Expand All @@ -59,6 +68,14 @@ static boolean isEOL(String version) {
return compareVersion(version, EOL_THRESHOLD) < 0;
}

static boolean needsLegacyUpdaterJava8(String version) {
if (version == null) {
return false;
}

return compareVersion(version, UPDATER_THRESHOLD_JAVA17) < 0;
}

static boolean needsLegacyUpdater(String version) {
if (version == null) {
return false;
Expand Down
24 changes: 21 additions & 3 deletions test/freenet/support/JVMVersionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,22 @@ public void testTooOldWarning() {
assertTrue(JVMVersion.isEOL("1.5"));
assertTrue(JVMVersion.isEOL("1.7.0_65"));
assertTrue(JVMVersion.isEOL("1.7"));
assertTrue(JVMVersion.isEOL("10"));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This name of this method and the testRecentEnoughWarning method are terrible confusing, as e.g. Java 10 is in both of them. Is it too old or recent enough?

assertTrue(JVMVersion.isEOL("16"));
}

@Test
public void testTooOldUpdaterBefore17() {
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.6.0_32"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.6"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.5"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.7.0_65"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.7"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("1.8"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("9"));
assertTrue(JVMVersion.needsLegacyUpdaterJava8("16"));
assertFalse(JVMVersion.needsLegacyUpdaterJava8("17"));
assertFalse(JVMVersion.needsLegacyUpdaterJava8(null));
}

@Test
Expand All @@ -26,16 +42,18 @@ public void testTooOldUpdater() {

@Test
public void testRecentEnoughWarning() {
assertFalse(JVMVersion.isEOL("1.8.0_9"));
assertFalse(JVMVersion.isEOL("9-ea"));
assertFalse(JVMVersion.isEOL("10"));
assertTrue(JVMVersion.isEOL("1.8.0_9"));
assertTrue(JVMVersion.isEOL("9-ea"));
assertTrue(JVMVersion.isEOL("10"));
assertTrue(JVMVersion.isEOL("16.999"));
}

@Test
public void testRecentEnoughUpdater() {
assertFalse(JVMVersion.needsLegacyUpdater("1.8.0_9"));
assertFalse(JVMVersion.needsLegacyUpdater("9-ea"));
assertFalse(JVMVersion.needsLegacyUpdater("10"));
assertFalse(JVMVersion.needsLegacyUpdater("16"));
}

@Test
Expand Down