This is an automated email from the ASF dual-hosted git repository.
weichiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 3cc079478b HDDS-6176. Ozone service WebUI is not accessible with 404
error. (#4308)
3cc079478b is described below
commit 3cc079478b47ea976b5872a7e80b69f5c6ed1501
Author: Arafat2198 <[email protected]>
AuthorDate: Thu Mar 2 23:57:20 2023 +0530
HDDS-6176. Ozone service WebUI is not accessible with 404 error. (#4308)
---
.../common/src/main/resources/ozone-default.xml | 9 ++---
.../hadoop/hdds/server/http/BaseHttpServer.java | 19 +++++++--
.../scm/TestStorageContainerManagerHttpServer.java | 5 ++-
.../ozone/om/TestOzoneManagerHttpServer.java | 46 +++++++++++++++++++---
4 files changed, 63 insertions(+), 16 deletions(-)
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index d5f00e397a..854f643a88 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -2935,11 +2935,10 @@
<description>
The base dir for HTTP Jetty server to extract contents. If this property
is not configured, by default, Jetty will create a directory inside the
- directory named by the java.io.tmpdir System property(/tmp by default).
- While in production environment, it's strongly suggested to instruct
Jetty
- to use a different parent directory by setting this property to the name
- of the desired parent directory. The value of the property will be used
to
- set Jetty context attribute 'org.eclipse.jetty.webapp.basetempdir'.
+ directory named by the ${ozone.metadata.dirs}/webserver. While in
production environment,
+ it's strongly suggested instructing Jetty to use a different parent
directory by
+ setting this property to the name of the desired parent directory. The
value of the
+ property will be used to set Jetty context attribute
'org.eclipse.jetty.webapp.basetempdir'.
The directory named by this property must exist and be writeable.
</description>
</property>
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/BaseHttpServer.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/BaseHttpServer.java
index 144cec8620..1e1b9bd66a 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/BaseHttpServer.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/BaseHttpServer.java
@@ -24,6 +24,7 @@ import java.net.URI;
import java.util.Optional;
import java.util.OptionalInt;
+import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdds.DFSConfigKeysLegacy;
import org.apache.hadoop.hdds.HddsConfigKeys;
@@ -43,6 +44,7 @@ import org.apache.commons.lang3.StringUtils;
import static org.apache.hadoop.hdds.HddsUtils.getHostNameFromConfigKeys;
import static org.apache.hadoop.hdds.HddsUtils.getPortNumberFromConfigKeys;
import static org.apache.hadoop.hdds.HddsUtils.createDir;
+import static org.apache.hadoop.hdds.server.ServerUtils.getOzoneMetaDirPath;
import static org.apache.hadoop.hdds.server.http.HttpConfig.getHttpPolicy;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ADMINISTRATORS;
import static
org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ADMINISTRATORS_GROUPS;
@@ -70,6 +72,7 @@ public abstract class BaseHttpServer {
static final String PROMETHEUS_SINK = "PROMETHEUS_SINK";
private static final String JETTY_BASETMPDIR =
"org.eclipse.jetty.webapp.basetempdir";
+ public static final String SERVER_DIR = "/webserver";
private HttpServer2 httpServer;
private final MutableConfigurationSource conf;
@@ -178,14 +181,22 @@ public abstract class BaseHttpServer {
}
String baseDir = conf.get(OzoneConfigKeys.OZONE_HTTP_BASEDIR);
- if (!StringUtils.isEmpty(baseDir)) {
- createDir(baseDir);
- httpServer.getWebAppContext().setAttribute(JETTY_BASETMPDIR, baseDir);
- LOG.info("HTTP server of {} uses base directory {}", name, baseDir);
+
+ if (StringUtils.isEmpty(baseDir)) {
+ baseDir = getOzoneMetaDirPath(conf) + SERVER_DIR;
}
+ createDir(baseDir);
+ httpServer.getWebAppContext().setAttribute(JETTY_BASETMPDIR, baseDir);
+ LOG.info("HTTP server of {} uses base directory {}", name, baseDir);
}
}
+ @VisibleForTesting
+ public String getJettyBaseTmpDir() {
+ return httpServer.getWebAppContext().getAttribute(JETTY_BASETMPDIR)
+ .toString();
+ }
+
/**
* Return a HttpServer.Builder that the OzoneManager/SCM/Datanode/S3Gateway/
* Recon to initialize their HTTP / HTTPS server.
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
index 4446631851..eb244f3f40 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
@@ -56,7 +56,8 @@ public class TestStorageContainerManagerHttpServer {
public static void setUp() throws Exception {
File base = new File(BASEDIR);
FileUtil.fullyDelete(base);
- base.mkdirs();
+ File ozoneMetadataDirectory = new File(BASEDIR, "metadata");
+ ozoneMetadataDirectory.mkdirs();
conf = new OzoneConfiguration();
keystoresDir = new File(BASEDIR).getAbsolutePath();
sslConfDir = KeyStoreTestUtil.getClasspathDir(
@@ -68,6 +69,8 @@ public class TestStorageContainerManagerHttpServer {
KeyStoreTestUtil.getClientSSLConfigFileName());
conf.set(OzoneConfigKeys.OZONE_SERVER_HTTPS_KEYSTORE_RESOURCE_KEY,
KeyStoreTestUtil.getServerSSLConfigFileName());
+ conf.set(OzoneConfigKeys.OZONE_METADATA_DIRS,
+ ozoneMetadataDirectory.getAbsolutePath());
}
@AfterAll
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHttpServer.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHttpServer.java
index 5e8909a127..4c75ed9191 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHttpServer.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerHttpServer.java
@@ -27,6 +27,7 @@ import java.util.Collection;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.server.http.BaseHttpServer;
import org.apache.hadoop.hdfs.web.URLConnectionFactory;
import org.apache.hadoop.http.HttpConfig;
import org.apache.hadoop.http.HttpConfig.Policy;
@@ -40,6 +41,7 @@ import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@@ -55,6 +57,7 @@ public class TestOzoneManagerHttpServer {
private static String sslConfDir;
private static OzoneConfiguration conf;
private static URLConnectionFactory connectionFactory;
+ private static File ozoneMetadataDirectory;
@Parameters public static Collection<Object[]> policy() {
Object[][] params = new Object[][] {
@@ -74,7 +77,12 @@ public class TestOzoneManagerHttpServer {
@BeforeClass public static void setUp() throws Exception {
File base = new File(BASEDIR);
FileUtil.fullyDelete(base);
- base.mkdirs();
+
+ // Create metadata directory
+ ozoneMetadataDirectory = new File(BASEDIR, "metadata");
+ ozoneMetadataDirectory.mkdirs();
+
+ // Initialize the OzoneConfiguration
conf = new OzoneConfiguration();
keystoresDir = new File(BASEDIR).getAbsolutePath();
sslConfDir = KeyStoreTestUtil.getClasspathDir(
@@ -86,6 +94,14 @@ public class TestOzoneManagerHttpServer {
KeyStoreTestUtil.getClientSSLConfigFileName());
conf.set(OzoneConfigKeys.OZONE_SERVER_HTTPS_KEYSTORE_RESOURCE_KEY,
KeyStoreTestUtil.getServerSSLConfigFileName());
+
+ // Set up OM HTTP and HTTPS addresses
+ conf.set(OzoneConfigKeys.OZONE_METADATA_DIRS,
+ ozoneMetadataDirectory.getAbsolutePath());
+ conf.set(OMConfigKeys.OZONE_OM_HTTP_ADDRESS_KEY, "localhost:0");
+ conf.set(OMConfigKeys.OZONE_OM_HTTPS_ADDRESS_KEY, "localhost:0");
+ conf.set(OMConfigKeys.OZONE_OM_HTTP_BIND_HOST_KEY, "localhost");
+ conf.set(OMConfigKeys.OZONE_OM_HTTPS_BIND_HOST_KEY, "localhost");
}
@AfterClass public static void tearDown() throws Exception {
@@ -96,11 +112,6 @@ public class TestOzoneManagerHttpServer {
@Test public void testHttpPolicy() throws Exception {
conf.set(OzoneConfigKeys.OZONE_HTTP_POLICY_KEY, policy.name());
- conf.set(OMConfigKeys.OZONE_OM_HTTP_ADDRESS_KEY, "localhost:0");
- conf.set(OMConfigKeys.OZONE_OM_HTTPS_ADDRESS_KEY, "localhost:0");
- conf.set(OMConfigKeys.OZONE_OM_HTTP_BIND_HOST_KEY, "localhost");
- conf.set(OMConfigKeys.OZONE_OM_HTTPS_BIND_HOST_KEY, "localhost");
-
OzoneManagerHttpServer server = null;
try {
server = new OzoneManagerHttpServer(conf, null);
@@ -117,7 +128,30 @@ public class TestOzoneManagerHttpServer {
canAccess("https", server.getHttpsAddress())));
Assert.assertTrue(implies(policy.isHttpsEnabled(),
!canAccess("http", server.getHttpsAddress())));
+ } finally {
+ if (server != null) {
+ server.stop();
+ }
+ }
+ }
+ @Test
+ // Verify if jetty-dir will be created inside ozoneMetadataDirectory path
+ public void testJettyDirectoryCreation() throws Exception {
+ OzoneManagerHttpServer server = null;
+ try {
+ server = new OzoneManagerHttpServer(conf, null);
+ DefaultMetricsSystem.initialize("TestOzoneManagerHttpServer");
+ server.start();
+ // Checking if the /webserver directory does get created
+ File webServerDir =
+ new File(ozoneMetadataDirectory, BaseHttpServer.SERVER_DIR);
+ Assert.assertTrue(webServerDir.exists());
+ // Verify that the jetty directory is set correctly
+ String expectedJettyDirLocation =
+ ozoneMetadataDirectory.getAbsolutePath() + BaseHttpServer.SERVER_DIR;
+ Assertions.assertEquals(expectedJettyDirLocation,
+ server.getJettyBaseTmpDir());
} finally {
if (server != null) {
server.stop();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]