diff --git a/hbase-protocol-shaded/src/main/protobuf/rest/VersionMessage.proto b/hbase-protocol-shaded/src/main/protobuf/rest/VersionMessage.proto index 742d8828d4f6..4ce5afe71410 100644 --- a/hbase-protocol-shaded/src/main/protobuf/rest/VersionMessage.proto +++ b/hbase-protocol-shaded/src/main/protobuf/rest/VersionMessage.proto @@ -24,4 +24,6 @@ message Version { optional string osVersion = 3; optional string serverVersion = 4; optional string jerseyVersion = 5; + optional string version = 6; + optional string revision = 7; } diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/VersionModel.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/VersionModel.java index 359211ef5e28..3ab5e4db6b58 100644 --- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/VersionModel.java +++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/model/VersionModel.java @@ -25,6 +25,7 @@ import org.apache.hadoop.hbase.rest.ProtobufMessageHandler; import org.apache.hadoop.hbase.rest.RESTServlet; import org.apache.hadoop.hbase.rest.RestUtil; +import org.apache.hadoop.hbase.util.VersionInfo; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hbase.thirdparty.com.google.protobuf.CodedInputStream; @@ -54,6 +55,8 @@ public class VersionModel implements Serializable, ProtobufMessageHandler { private String osVersion; private String serverVersion; private String jerseyVersion; + private String version; + private String revision; /** * Default constructor. Do not use. @@ -75,6 +78,9 @@ public VersionModel(ServletContext context) { jerseyVersion = ServletContainer.class.getPackage().getImplementationVersion(); // Currently, this will always be null because the manifest doesn't have any useful information if (jerseyVersion == null) jerseyVersion = ""; + + version = VersionInfo.getVersion(); + revision = VersionInfo.getRevision(); } /** Returns the REST gateway version */ @@ -107,6 +113,18 @@ public String getJerseyVersion() { return jerseyVersion; } + /** Returns the build version of the REST server component */ + @XmlAttribute(name = "Version") + public String getVersion() { + return version; + } + + /** Returns the source control revision of the REST server component */ + @XmlAttribute(name = "Revision") + public String getRevision() { + return revision; + } + /** * @param version the REST gateway version string */ @@ -142,6 +160,20 @@ public void setJerseyVersion(String version) { this.jerseyVersion = version; } + /** + * @param version the REST server component build version string + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * @param revision the REST server component source control revision string + */ + public void setRevision(String revision) { + this.revision = revision; + } + /* * (non-Javadoc) * @see java.lang.Object#toString() @@ -159,6 +191,10 @@ public String toString() { sb.append(serverVersion); sb.append("] [Jersey: "); sb.append(jerseyVersion); + sb.append("] [Version: "); + sb.append(version); + sb.append("] [Revision: "); + sb.append(revision); sb.append("]\n"); return sb.toString(); } @@ -171,6 +207,8 @@ public Message messageFromObject() { builder.setOsVersion(osVersion); builder.setServerVersion(serverVersion); builder.setJerseyVersion(jerseyVersion); + builder.setVersion(version); + builder.setRevision(revision); return builder.build(); } @@ -193,6 +231,12 @@ public ProtobufMessageHandler getObjectFromMessage(CodedInputStream cis) throws if (builder.hasJerseyVersion()) { jerseyVersion = builder.getJerseyVersion(); } + if (builder.hasVersion()) { + version = builder.getVersion(); + } + if (builder.hasRevision()) { + revision = builder.getRevision(); + } return this; } } diff --git a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/TestVersionResource.java b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/TestVersionResource.java index 39593d566aac..158d412971b1 100644 --- a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/TestVersionResource.java +++ b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/TestVersionResource.java @@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.RestTests; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.VersionInfo; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -77,8 +78,9 @@ public static void tearDownAfterClass() throws Exception { private static void validate(VersionModel model) { assertNotNull(model); - assertNotNull(model.getRESTVersion()); - assertEquals(RESTServlet.VERSION_STRING, model.getRESTVersion()); + String restVersion = model.getRESTVersion(); + assertNotNull(restVersion); + assertEquals(RESTServlet.VERSION_STRING, restVersion); String osVersion = model.getOSVersion(); assertNotNull(osVersion); assertTrue(osVersion.contains(System.getProperty("os.name"))); @@ -94,6 +96,13 @@ private static void validate(VersionModel model) { assertNotNull(jerseyVersion); // TODO: fix when we actually get a jersey version // assertEquals(jerseyVersion, ServletContainer.class.getPackage().getImplementationVersion()); + + String version = model.getVersion(); + assertNotNull(version); + assertEquals(VersionInfo.getVersion(), version); + String revision = model.getRevision(); + assertNotNull(revision); + assertEquals(VersionInfo.getRevision(), revision); } @Test diff --git a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/model/TestVersionModel.java b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/model/TestVersionModel.java index 166a68c5228b..8062e97e8e0f 100644 --- a/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/model/TestVersionModel.java +++ b/hbase-rest/src/test/java/org/apache/hadoop/hbase/rest/model/TestVersionModel.java @@ -37,19 +37,25 @@ public class TestVersionModel extends TestModelBase { private static final String JVM_VERSION = "Sun Microsystems Inc. 1.6.0_13-11.3-b02"; private static final String JETTY_VERSION = "6.1.14"; private static final String JERSEY_VERSION = "1.1.0-ea"; + private static final String VERSION = "4.0.0-alpha-1-SNAPSHOT"; + private static final String REVISION = "5085d27ab17d857118a96ae3f37c00b60c925471"; public TestVersionModel() throws Exception { super(VersionModel.class); AS_XML = ""; + + "OS=\"Linux 2.6.18-128.1.6.el5.centos.plusxen amd64\" REST=\"0.0.1\" Server=\"6.1.14\" " + + "Version=\"4.0.0-alpha-1-SNAPSHOT\" " + + "Revision=\"5085d27ab17d857118a96ae3f37c00b60c925471\"/>"; - AS_PB = "CgUwLjAuMRInU3VuIE1pY3Jvc3lzdGVtcyBJbmMuIDEuNi4wXzEzLTExLjMtYjAyGi1MaW51eCAy" - + "LjYuMTgtMTI4LjEuNi5lbDUuY2VudG9zLnBsdXN4ZW4gYW1kNjQiBjYuMS4xNCoIMS4xLjAtZWE="; + AS_PB = "CgUwLjAuMRInU3VuIE1pY3Jvc3lzdGVtcyBJbmMuIDEuNi4wXzEzLTExLjMtYjAyGi1MaW51eCAyLjYuMTg" + + "tMTI4LjEuNi5lbDUuY2VudG9zLnBsdXN4ZW4gYW1kNjQiBjYuMS4xNCoIMS4xLjAtZWEyFjQuMC4wLWFscGhhLT" + + "EtU05BUFNIT1Q6KDUwODVkMjdhYjE3ZDg1NzExOGE5NmFlM2YzN2MwMGI2MGM5MjU0NzE="; AS_JSON = "{\"JVM\":\"Sun Microsystems Inc. 1.6.0_13-11.3-b02\",\"Jersey\":\"1.1.0-ea\"," + "\"OS\":\"Linux 2.6.18-128.1.6.el5.centos.plusxen amd64\",\"" - + "REST\":\"0.0.1\",\"Server\":\"6.1.14\"}"; + + "REST\":\"0.0.1\",\"Server\":\"6.1.14\", \"Version\":\"4.0.0-alpha-1-SNAPSHOT\"," + + "\"Revision\":\"5085d27ab17d857118a96ae3f37c00b60c925471\"}"; } @Override @@ -60,6 +66,8 @@ protected VersionModel buildTestModel() { model.setJVMVersion(JVM_VERSION); model.setServerVersion(JETTY_VERSION); model.setJerseyVersion(JERSEY_VERSION); + model.setVersion(VERSION); + model.setRevision(REVISION); return model; } @@ -70,5 +78,7 @@ protected void checkModel(VersionModel model) { assertEquals(JVM_VERSION, model.getJVMVersion()); assertEquals(JETTY_VERSION, model.getServerVersion()); assertEquals(JERSEY_VERSION, model.getJerseyVersion()); + assertEquals(VERSION, model.getVersion()); + assertEquals(REVISION, model.getRevision()); } } diff --git a/src/main/asciidoc/_chapters/external_apis.adoc b/src/main/asciidoc/_chapters/external_apis.adoc index 2ea4113981ba..29df51d41922 100644 --- a/src/main/asciidoc/_chapters/external_apis.adoc +++ b/src/main/asciidoc/_chapters/external_apis.adoc @@ -101,6 +101,13 @@ creation or mutation, and `DELETE` for deletion. -H "Accept: text/xml" \ "http://example.com:8000/version/cluster" +|/version/rest +|GET +|Version of the HBase REST Server +|curl -vi -X GET \ +-H "Accept: text/xml" \ +"http://example.com:8000/version/rest" + |/status/cluster |GET |Cluster status @@ -565,6 +572,8 @@ Detailed Explanation: + + @@ -719,6 +728,8 @@ message Version { optional string osVersion = 3; optional string serverVersion = 4; optional string jerseyVersion = 5; + optional string version = 6; + optional string revision = 7; } message StorageClusterStatus {