diff --git a/plugin-api/pom.xml b/plugin-api/pom.xml
index 5661d62352f..f6fb7419de4 100644
--- a/plugin-api/pom.xml
+++ b/plugin-api/pom.xml
@@ -35,18 +35,7 @@
src/main/resources
true
-
+
-
-
-
- com.carrotsearch.randomizedtesting
- junit4-maven-plugin
-
- true
-
-
-
-
\ No newline at end of file
diff --git a/plugin-api/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java b/plugin-api/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java
index 4e2cad0d5cd..b6e96c68e1e 100644
--- a/plugin-api/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java
+++ b/plugin-api/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java
@@ -62,7 +62,7 @@ public class LicenseVersion implements Serializable {
return LicenseVersion.CURRENT;
}
- String[] parts = version.split("\\.");
+ String[] parts = version.split("\\.|\\-");
if (parts.length < 3 || parts.length > 4) {
throw new IllegalArgumentException("the version needs to contain major, minor and revision, and optionally the build");
}
@@ -76,10 +76,10 @@ public class LicenseVersion implements Serializable {
int build = 99;
if (parts.length == 4) {
String buildStr = parts[3];
- if (buildStr.startsWith("Beta")) {
+ if (buildStr.startsWith("beta")) {
build = Integer.parseInt(buildStr.substring(4));
}
- if (buildStr.startsWith("RC")) {
+ if (buildStr.startsWith("rc")) {
build = Integer.parseInt(buildStr.substring(2)) + 50;
}
}
@@ -155,9 +155,9 @@ public class LicenseVersion implements Serializable {
StringBuilder sb = new StringBuilder();
sb.append(major).append('.').append(minor).append('.').append(revision);
if (build < 50) {
- sb.append(".Beta").append(build);
+ sb.append("-beta").append(build);
} else if (build < 99) {
- sb.append(".RC").append(build - 50);
+ sb.append("-rc").append(build - 50);
}
return sb.toString();
}
diff --git a/plugin-api/src/test/java/org/elasticsearch/license/plugin/LicenseVersionTests.java b/plugin-api/src/test/java/org/elasticsearch/license/plugin/LicenseVersionTests.java
new file mode 100644
index 00000000000..fa3080fd676
--- /dev/null
+++ b/plugin-api/src/test/java/org/elasticsearch/license/plugin/LicenseVersionTests.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License;
+ * you may not use this file except in compliance with the Elastic License.
+ */
+package org.elasticsearch.license.plugin;
+
+import org.elasticsearch.test.ElasticsearchTestCase;
+import org.junit.Test;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+/**
+ *
+ */
+public class LicenseVersionTests extends ElasticsearchTestCase {
+
+ @Test
+ public void testStrings() throws Exception {
+ boolean beta = randomBoolean();
+ int buildNumber = beta ? randomIntBetween(0, 49) : randomIntBetween(0, 48);
+ int major = randomIntBetween(0, 20);
+ int minor = randomIntBetween(0, 20);
+ int revision = randomIntBetween(0, 20);
+
+ String build = buildNumber == 0 ? "" :
+ beta ? "-beta" + buildNumber : "-rc" + buildNumber;
+
+
+ String versionName = new StringBuilder()
+ .append(major)
+ .append(".").append(minor)
+ .append(".").append(revision)
+ .append(build).toString();
+ LicenseVersion version = LicenseVersion.fromString(versionName);
+
+ logger.info("version: {}", versionName);
+
+ assertThat(version.major, is((byte) major));
+ assertThat(version.minor, is((byte) minor));
+ assertThat(version.revision, is((byte) revision));
+ if (buildNumber == 0) {
+ assertThat(version.build, is((byte) 99));
+ } else if (beta) {
+ assertThat(version.build, is((byte) buildNumber));
+ } else {
+ assertThat(version.build, is((byte) (buildNumber + 50)));
+ }
+
+ assertThat(version.number(), equalTo(versionName));
+ }
+
+}
diff --git a/plugin/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java b/plugin/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java
deleted file mode 100644
index 4e2cad0d5cd..00000000000
--- a/plugin/src/main/java/org/elasticsearch/license/plugin/LicenseVersion.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License;
- * you may not use this file except in compliance with the Elastic License.
- */
-package org.elasticsearch.license.plugin;
-
-import org.elasticsearch.Version;
-import org.elasticsearch.common.Nullable;
-import org.elasticsearch.common.Strings;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.io.stream.StreamOutput;
-import org.elasticsearch.license.core.License;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-@SuppressWarnings("deprecation")
-public class LicenseVersion implements Serializable {
-
- // The logic for ID is: XXYYZZAA, where XX is major version, YY is minor version, ZZ is revision, and AA is Beta/RC indicator
- // AA values below 50 are beta builds, and below 99 are RC builds, with 99 indicating a release
- // the (internal) format of the id is there so we can easily do after/before checks on the id
-
- public static final int V_1_0_0_ID = /*00*/1000099;
- public static final int V_2_0_0_ID = /*00*/2000099;
- public static final LicenseVersion V_1_0_0 = new LicenseVersion(V_1_0_0_ID, false, License.VERSION_START, Version.V_1_4_0_Beta1);
- public static final LicenseVersion V_2_0_0 = new LicenseVersion(V_2_0_0_ID, true, License.VERSION_START, Version.V_2_0_0);
-
- public static final LicenseVersion CURRENT = V_2_0_0;
-
- public static LicenseVersion readVersion(StreamInput in) throws IOException {
- return fromId(in.readVInt());
- }
-
- public static LicenseVersion fromId(int id) {
- switch (id) {
- case V_1_0_0_ID:
- return V_1_0_0;
-
- default:
- return new LicenseVersion(id, null, License.VERSION_CURRENT, Version.CURRENT);
- }
- }
-
- public static void writeVersion(LicenseVersion version, StreamOutput out) throws IOException {
- out.writeVInt(version.id);
- }
-
- /**
- * Returns the smallest version between the 2.
- */
- public static LicenseVersion smallest(LicenseVersion version1, LicenseVersion version2) {
- return version1.id < version2.id ? version1 : version2;
- }
-
- /**
- * Returns the version given its string representation, current version if the argument is null or empty
- */
- public static LicenseVersion fromString(String version) {
- if (!Strings.hasLength(version)) {
- return LicenseVersion.CURRENT;
- }
-
- String[] parts = version.split("\\.");
- if (parts.length < 3 || parts.length > 4) {
- throw new IllegalArgumentException("the version needs to contain major, minor and revision, and optionally the build");
- }
-
- try {
- //we reverse the version id calculation based on some assumption as we can't reliably reverse the modulo
- int major = Integer.parseInt(parts[0]) * 1000000;
- int minor = Integer.parseInt(parts[1]) * 10000;
- int revision = Integer.parseInt(parts[2]) * 100;
-
- int build = 99;
- if (parts.length == 4) {
- String buildStr = parts[3];
- if (buildStr.startsWith("Beta")) {
- build = Integer.parseInt(buildStr.substring(4));
- }
- if (buildStr.startsWith("RC")) {
- build = Integer.parseInt(buildStr.substring(2)) + 50;
- }
- }
-
- return fromId(major + minor + revision + build);
-
- } catch(NumberFormatException e) {
- throw new IllegalArgumentException("unable to parse version " + version, e);
- }
- }
-
- public final int id;
- public final byte major;
- public final byte minor;
- public final byte revision;
- public final byte build;
- public final Boolean snapshot;
- public final int minSignatureVersion;
- public final Version minEsCompatibilityVersion;
-
- LicenseVersion(int id, @Nullable Boolean snapshot, int minSignatureVersion, Version minEsCompatibilityVersion) {
- this.id = id;
- this.major = (byte) ((id / 1000000) % 100);
- this.minor = (byte) ((id / 10000) % 100);
- this.revision = (byte) ((id / 100) % 100);
- this.build = (byte) (id % 100);
- this.snapshot = snapshot;
- this.minSignatureVersion = minSignatureVersion;
- this.minEsCompatibilityVersion = minEsCompatibilityVersion;
- }
-
- public boolean snapshot() {
- return snapshot != null && snapshot;
- }
-
- public boolean after(LicenseVersion version) {
- return version.id < id;
- }
-
- public boolean before(LicenseVersion version) {
- return version.id > id;
- }
-
- /**
- * Returns the minimum compatible version based on the current
- * version. Ie a node needs to have at least the return version in order
- * to communicate with a node running the current version. The returned version
- * is in most of the cases the smallest major version release unless the current version
- * is a beta or RC release then the version itself is returned.
- */
- public LicenseVersion minimumCompatibilityVersion() {
- return LicenseVersion.smallest(this, fromId(major * 1000000 + 99));
- }
-
- /**
- * @return The minimum elasticsearch version this license version is compatible with.
- */
- public Version minimumEsCompatiblityVersion() {
- return minEsCompatibilityVersion;
- }
-
- /**
- * @return The minimum license signature version this license plugin is compatible with.
- */
- public int minimumSignatureVersion() {
- return minSignatureVersion;
- }
-
- /**
- * Just the version number (without -SNAPSHOT if snapshot).
- */
- public String number() {
- StringBuilder sb = new StringBuilder();
- sb.append(major).append('.').append(minor).append('.').append(revision);
- if (build < 50) {
- sb.append(".Beta").append(build);
- } else if (build < 99) {
- sb.append(".RC").append(build - 50);
- }
- return sb.toString();
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(number());
- if (snapshot()) {
- sb.append("-SNAPSHOT");
- }
- return sb.toString();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- LicenseVersion that = (LicenseVersion) o;
-
- if (id != that.id) return false;
-
- return true;
- }
-
- @Override
- public int hashCode() {
- return id;
- }
-}
diff --git a/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicenseExpiredException.java b/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicenseExpiredException.java
deleted file mode 100644
index 4fbbe351804..00000000000
--- a/plugin/src/main/java/org/elasticsearch/license/plugin/core/LicenseExpiredException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License;
- * you may not use this file except in compliance with the Elastic License.
- */
-package org.elasticsearch.license.plugin.core;
-
-import org.elasticsearch.ElasticsearchException;
-import org.elasticsearch.rest.RestStatus;
-
-/**
- * Exception to be thrown when a feature action requires a valid license
- */
-public class LicenseExpiredException extends ElasticsearchException {
-
- private final String feature;
-
- public LicenseExpiredException(String feature) {
- super("license expired for feature [" + feature + "]");
- this.feature = feature;
- }
-
- @Override
- public RestStatus status() {
- return RestStatus.UNAUTHORIZED;
- }
-
- public String feature() {
- return feature;
- }
-}