diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java index 69c4c029ce10..825f880ae64b 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/conf/OzoneConfiguration.java @@ -22,6 +22,13 @@ import static org.apache.hadoop.hdds.ratis.RatisHelper.HDDS_DATANODE_RATIS_PREFIX_KEY; import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_CONTAINER_COPY_WORKDIR; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -39,13 +46,6 @@ import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.stream.Collectors; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdds.HddsConfigKeys; import org.apache.hadoop.hdds.annotation.InterfaceAudience; diff --git a/hadoop-hdds/container-service/src/main/resources/webapps/static/.gitkeep b/hadoop-hdds/container-service/src/main/resources/webapps/static/.gitkeep new file mode 100644 index 000000000000..ae1e83eeb3d4 --- /dev/null +++ b/hadoop-hdds/container-service/src/main/resources/webapps/static/.gitkeep @@ -0,0 +1,14 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/hadoop-hdds/framework/pom.xml b/hadoop-hdds/framework/pom.xml index 8526af0d8aeb..139029c55262 100644 --- a/hadoop-hdds/framework/pom.xml +++ b/hadoop-hdds/framework/pom.xml @@ -122,11 +122,17 @@ jakarta.annotation jakarta.annotation-api + + jakarta.servlet + jakarta.servlet-api + jakarta.ws.rs jakarta.ws.rs-api + javax.servlet javax.servlet-api @@ -228,15 +234,15 @@ org.eclipse.jetty - jetty-servlet + jetty-util - org.eclipse.jetty - jetty-util + org.eclipse.jetty.ee10 + jetty-ee10-servlet - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp org.glassfish.jersey.containers diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/HddsConfServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/HddsConfServlet.java index 719ce0522763..d2a68bcd48b4 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/HddsConfServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/conf/HddsConfServlet.java @@ -19,6 +19,10 @@ import static org.apache.hadoop.hdds.conf.OzoneConfiguration.getConfigurationResourceFiles; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.Writer; @@ -26,10 +30,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.lang3.StringUtils; diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/AdminAuthorizedServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/AdminAuthorizedServlet.java index d8fad0a620fe..dc2dcac82796 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/AdminAuthorizedServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/AdminAuthorizedServlet.java @@ -17,11 +17,11 @@ package org.apache.hadoop.hdds.server.http; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.servlet.DefaultServlet; +import org.eclipse.jetty.ee10.servlet.DefaultServlet; /** * General servlet which is admin-authorized. 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 9b2a0a61fdac..deea5fa77847 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 @@ -35,13 +35,14 @@ import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SERVER_HTTPS_TRUSTSTORE_PASSWORD_KEY; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.http.HttpServlet; +import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import java.net.URI; import java.util.Map; import java.util.Optional; import java.util.OptionalInt; -import javax.servlet.http.HttpServlet; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdds.HddsConfigKeys; @@ -57,7 +58,7 @@ import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.authorize.AccessControlList; import org.apache.hadoop.security.ssl.SSLFactory; -import org.eclipse.jetty.webapp.WebAppContext; +import org.eclipse.jetty.ee10.webapp.WebAppContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,8 +70,6 @@ public abstract class BaseHttpServer implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(BaseHttpServer.class); 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; @@ -85,6 +84,7 @@ public abstract class BaseHttpServer implements AutoCloseable { private PrometheusMetricsSink prometheusMetricsSink; private boolean prometheusSupport; + private String jettyBaseTmpDir; public BaseHttpServer(MutableConfigurationSource conf, String name) throws IOException { @@ -140,6 +140,8 @@ public BaseHttpServer(MutableConfigurationSource conf, String name) builder.withoutDefaultApps(); } + builder.allowAmbiguousUri(shouldAllowAmbiguousUri()); + httpServer = builder.build(); // TODO move these to HttpServer2.addDefaultApps @@ -190,15 +192,20 @@ public BaseHttpServer(MutableConfigurationSource conf, String name) baseDir = getOzoneMetaDirPath(conf) + SERVER_DIR; } createDir(baseDir); - httpServer.getWebAppContext().setAttribute(JETTY_BASETMPDIR, baseDir); + WebAppContext webAppContext = httpServer.getWebAppContext(); + webAppContext.setTempDirectory(new File(baseDir)); + // Jetty 12 deletes a non-persistent temp directory on stop. baseDir lives + // under the Ozone metadata directory, so keep it persistent to avoid + // deleting operator data. + webAppContext.setTempDirectoryPersistent(true); + jettyBaseTmpDir = baseDir; LOG.info("HTTP server of {} uses base directory {}", name, baseDir); } } @VisibleForTesting public String getJettyBaseTmpDir() { - return httpServer.getWebAppContext().getAttribute(JETTY_BASETMPDIR) - .toString(); + return jettyBaseTmpDir; } /** @@ -496,4 +503,13 @@ protected boolean shouldAddDefaultApps() { return true; } + /** + * Override to accept ambiguous URIs (e.g. empty path segments from "//"). + * Needed by the S3 Gateway, whose object keys can contain such sequences + * that Jetty 12 rejects with 400 by default. + */ + protected boolean shouldAllowAmbiguousUri() { + return false; + } + } diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/HttpServer2.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/HttpServer2.java index 994b4c6fa15e..bf30aec73fef 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/HttpServer2.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/HttpServer2.java @@ -25,6 +25,17 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -49,32 +60,21 @@ import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; -import org.apache.hadoop.conf.ConfServlet; import org.apache.hadoop.conf.Configuration.IntegerRanges; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.hdds.annotation.InterfaceStability; import org.apache.hadoop.hdds.conf.ConfigurationSource; +import org.apache.hadoop.hdds.conf.HddsConfServlet; import org.apache.hadoop.hdds.conf.MutableConfigurationSource; import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.hdds.server.http.servletbridge.JakartaToJavaxServletContext; import org.apache.hadoop.hdds.utils.LegacyHadoopConfigurationSource; import org.apache.hadoop.hdds.utils.LogLevel; import org.apache.hadoop.http.FilterContainer; import org.apache.hadoop.http.FilterInitializer; import org.apache.hadoop.http.lib.StaticUserWebFilter; -import org.apache.hadoop.jmx.JMXJsonServlet; import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.ozone.util.ShutdownHookManager; import org.apache.hadoop.security.AuthenticationFilterInitializer; @@ -87,7 +87,17 @@ import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.Shell; import org.apache.hadoop.util.StringUtils; +import org.eclipse.jetty.ee10.servlet.DefaultServlet; +import org.eclipse.jetty.ee10.servlet.FilterHolder; +import org.eclipse.jetty.ee10.servlet.FilterMapping; +import org.eclipse.jetty.ee10.servlet.ServletContextHandler; +import org.eclipse.jetty.ee10.servlet.ServletHandler; +import org.eclipse.jetty.ee10.servlet.ServletHolder; +import org.eclipse.jetty.ee10.servlet.ServletMapping; +import org.eclipse.jetty.ee10.servlet.SessionHandler; +import org.eclipse.jetty.ee10.webapp.WebAppContext; import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.CustomRequestLog; @@ -101,21 +111,10 @@ import org.eclipse.jetty.server.Slf4jRequestLogWriter; import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.server.handler.ContextHandlerCollection; -import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.server.handler.RequestLogHandler; -import org.eclipse.jetty.server.session.SessionHandler; -import org.eclipse.jetty.servlet.DefaultServlet; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.servlet.ServletMapping; import org.eclipse.jetty.util.ArrayUtil; -import org.eclipse.jetty.util.MultiException; +import org.eclipse.jetty.util.ExceptionUtil; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.webapp.WebAppContext; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.servlet.ServletContainer; import org.slf4j.Logger; @@ -191,7 +190,7 @@ public final class HttpServer2 implements FilterContainer { private final Server webServer; - private final HandlerCollection handlers; + private final Handler.Sequence handlers; private final List listeners = Lists.newArrayList(); @@ -256,6 +255,7 @@ public static class Builder { private boolean xFrameEnabled; private XFrameOption xFrameOption = XFrameOption.SAMEORIGIN; private boolean skipDefaultApps; + private boolean allowAmbiguousUri; public Builder setName(String serverName) { this.name = serverName; @@ -463,6 +463,17 @@ public Builder withoutDefaultApps() { return this; } + /** + * Allow ambiguous URIs (e.g. empty path segments from "//") on the + * connector. Jetty 9.4 accepted these; Jetty 12 rejects them with 400 by + * default. The S3 Gateway needs this because S3 object keys can contain + * such sequences. + */ + public Builder allowAmbiguousUri(boolean value) { + this.allowAmbiguousUri = value; + return this; + } + public HttpServer2 build() throws IOException { Objects.requireNonNull(name, "name is not set"); Preconditions.checkState(!endpoints.isEmpty(), "No endpoints specified"); @@ -503,6 +514,9 @@ public HttpServer2 build() throws IOException { httpConfig.setRequestHeaderSize(requestHeaderSize); httpConfig.setResponseHeaderSize(responseHeaderSize); httpConfig.setSendServerVersion(false); + if (allowAmbiguousUri) { + httpConfig.setUriCompliance(UriCompliance.LEGACY); + } int backlogSize = conf.getInt(HTTP_SOCKET_BACKLOG_SIZE_KEY, HTTP_SOCKET_BACKLOG_SIZE_DEFAULT); @@ -613,14 +627,15 @@ private HttpServer2(final Builder b) throws IOException { final String appDir = getWebAppsPath(b.name); this.webServer = new Server(); this.adminsAcl = b.adminsAcl; - this.handlers = new HandlerCollection(); + this.handlers = new Handler.Sequence(); this.webAppContext = createWebAppContext(b, adminsAcl, appDir); this.xFrameOptionIsEnabled = b.xFrameEnabled; this.xFrameOption = b.xFrameOption; try { this.secretProvider = - constructSecretProvider(b, webAppContext.getServletContext()); + constructSecretProvider(b, new JakartaToJavaxServletContext( + webAppContext.getServletContext())); this.webAppContext.getServletContext().setAttribute( AuthenticationFilter.SIGNER_SECRET_PROVIDER_ATTRIBUTE, secretProvider); @@ -657,9 +672,7 @@ private void initializeWebServer(Builder builder) throws IOException { handlers.addHandler(contexts); RequestLog requestLog = getRequestLog(builder.name); - RequestLogHandler requestLogHandler = new RequestLogHandler(); - requestLogHandler.setRequestLog(requestLog); - handlers.addHandler(requestLogHandler); + webServer.setRequestLog(requestLog); handlers.addHandler(webAppContext); final String appDir = getWebAppsPath(builder.name); @@ -721,16 +734,23 @@ private static WebAppContext createWebAppContext(Builder b, String tempDirectory = b.conf.get(HTTP_TEMP_DIR_KEY); if (tempDirectory != null && !tempDirectory.isEmpty()) { ctx.setTempDirectory(new File(tempDirectory)); - ctx.setAttribute("javax.servlet.context.tempdir", tempDirectory); + ctx.setAttribute("jakarta.servlet.context.tempdir", tempDirectory); } ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, b.conf); ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl); addNoCacheFilter(ctx); + if (b.allowAmbiguousUri) { + // Beyond relaxing the connector's UriCompliance, Jetty 12's servlet + // layer also rejects ambiguous URIs (e.g. empty path segments from + // "//") with 400 unless decoding is enabled here. The S3 Gateway needs + // this for object keys containing such sequences. + ctx.getServletHandler().setDecodeAmbiguousURIs(true); + } return ctx; } private static SignerSecretProvider constructSecretProvider(final Builder b, - ServletContext ctx) + javax.servlet.ServletContext ctx) throws Exception { final ConfigurationSource conf = b.conf; Properties config = getFilterProperties(conf, @@ -796,13 +816,16 @@ protected void addDefaultApps(ContextHandlerCollection parent, CommonConfigurationKeysPublic.HADOOP_HTTP_LOGS_ENABLED, CommonConfigurationKeysPublic.HADOOP_HTTP_LOGS_ENABLED_DEFAULT); if (logDir != null && logsEnabled) { - ServletContextHandler logContext = - new ServletContextHandler(parent, "/logs"); - logContext.setResourceBase(logDir); + ServletContextHandler logContext = new ServletContextHandler("/logs"); + parent.addHandler(logContext); + // Jetty 12 refuses to start a context whose base resource does not + // exist, so ensure the log directory is present before serving it. + Files.createDirectories(Paths.get(logDir)); + logContext.setBaseResourceAsString(logDir); logContext.addServlet(AdminAuthorizedServlet.class, "/*"); if (conf.getBoolean(HADOOP_JETTY_LOGS_SERVE_ALIASES, DEFAULT_HADOOP_JETTY_LOGS_SERVE_ALIASES)) { Map params = logContext.getInitParams(); - params.put("org.eclipse.jetty.servlet.Default.aliases", "true"); + params.put("org.eclipse.jetty.servlet.Default.allowAliases", "true"); } logContext.setDisplayName("logs"); SessionHandler handler = new SessionHandler(); @@ -814,20 +837,47 @@ protected void addDefaultApps(ContextHandlerCollection parent, defaultContexts.put(logContext, true); } // set up the context for "/static/*" - ServletContextHandler staticContext = - new ServletContextHandler(parent, "/static"); - staticContext.setResourceBase(appDir + "/static"); - staticContext.addServlet(DefaultServlet.class, "/*"); - staticContext.setDisplayName("static"); - Map params = staticContext.getInitParams(); - params.put("org.eclipse.jetty.servlet.Default.dirAllowed", "false"); - params.put("org.eclipse.jetty.servlet.Default.gzip", "true"); - SessionHandler handler = new SessionHandler(); - handler.setHttpOnly(true); - handler.getSessionCookieConfig().setSecure(true); - staticContext.setSessionHandler(handler); - setContextAttributes(staticContext, conf); - defaultContexts.put(staticContext, true); + // Jetty 12 refuses to start a context whose base resource does not exist. + // The shared static assets are unpacked into the module's webapps + // directory at package time, so they are present in the packaged jar/dist + // but may be absent while unit tests run; serve "/static" only when the + // base resource exists (Jetty 9 silently tolerated a missing base). + String staticBase = appDir + "/static"; + if (baseResourceExists(staticBase)) { + ServletContextHandler staticContext = + new ServletContextHandler("/static"); + parent.addHandler(staticContext); + staticContext.setBaseResourceAsString(staticBase); + staticContext.addServlet(DefaultServlet.class, "/*"); + staticContext.setDisplayName("static"); + Map params = staticContext.getInitParams(); + params.put("org.eclipse.jetty.servlet.Default.dirAllowed", "false"); + params.put("org.eclipse.jetty.servlet.Default.gzip", "true"); + SessionHandler handler = new SessionHandler(); + handler.setHttpOnly(true); + handler.getSessionCookieConfig().setSecure(true); + staticContext.setSessionHandler(handler); + setContextAttributes(staticContext, conf); + defaultContexts.put(staticContext, true); + } + } + + /** + * Return whether a context base resource URL points to something that + * exists. Non-file resources (e.g. inside a packaged jar) are assumed + * present, matching the distribution layout; this only filters out the + * file-system case where the shared static assets have not been unpacked. + */ + private static boolean baseResourceExists(String resourceUrl) { + try { + URI uri = URI.create(resourceUrl); + if ("file".equals(uri.getScheme())) { + return Files.exists(Paths.get(uri)); + } + return true; + } catch (IllegalArgumentException e) { + return false; + } } private void setContextAttributes(ServletContextHandler context, @@ -844,7 +894,7 @@ protected void addDefaultServlets() { addServlet("stacks", "/stacks", StackServlet.class); addServlet("logLevel", "/logLevel", LogLevel.Servlet.class); addServlet("jmx", "/jmx", JMXJsonServlet.class); - addServlet("conf", "/conf", ConfServlet.class); + addServlet("conf", "/conf", HddsConfServlet.class); } public void addContext(ServletContextHandler ctxt, boolean isFiltered) { @@ -1023,8 +1073,8 @@ public void addInternalServlet(String name, String pathSpec, * @param handler The handler to add */ public void addHandlerAtFront(Handler handler) { - Handler[] h = ArrayUtil.prependToArray( - handler, this.handlers.getHandlers(), Handler.class); + List h = new ArrayList<>(this.handlers.getHandlers()); + h.add(0, handler); handlers.setHandlers(h); } @@ -1221,13 +1271,9 @@ public void start() throws IOException { } catch (IOException ex) { LOG.info("HttpServer.start() threw a non Bind IOException", ex); throw ex; - } catch (MultiException ex) { - LOG.info("HttpServer.start() threw a MultiException", ex); - throw ex; } // Make sure there is no handler failures. - Handler[] hs = webServer.getHandlers(); - for (Handler handler : hs) { + for (Handler handler : handlers.getHandlers()) { if (handler.isFailed()) { throw new IOException( "Problem in starting http server. Server handlers failed"); @@ -1371,7 +1417,7 @@ void openListeners() throws Exception { * stop the server. */ public void stop() throws Exception { - MultiException exception = null; + ExceptionUtil.MultiException exception = null; for (ServerConnector c : listeners) { try { c.close(); @@ -1410,10 +1456,10 @@ public void stop() throws Exception { } - private MultiException addMultiException(MultiException exception, - Exception e) { + private ExceptionUtil.MultiException addMultiException( + ExceptionUtil.MultiException exception, Exception e) { if (exception == null) { - exception = new MultiException(); + exception = new ExceptionUtil.MultiException(); } exception.add(e); return exception; @@ -1707,9 +1753,7 @@ public void doFilter(ServletRequest request, */ private String inferMimeType(ServletRequest request) { String path = ((HttpServletRequest) request).getRequestURI(); - ServletContextHandler.Context sContext = - (ServletContextHandler.Context) config.getServletContext(); - return sContext.getMimeType(path); + return config.getServletContext().getMimeType(path); } private void initHttpHeaderMap() { diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/JMXJsonServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/JMXJsonServlet.java new file mode 100644 index 000000000000..45e176691b67 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/JMXJsonServlet.java @@ -0,0 +1,448 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.lang.management.ManagementFactory; +import java.lang.reflect.Array; +import java.util.Iterator; +import java.util.Set; +import javax.management.AttributeNotFoundException; +import javax.management.InstanceNotFoundException; +import javax.management.IntrospectionException; +import javax.management.MBeanAttributeInfo; +import javax.management.MBeanException; +import javax.management.MBeanInfo; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import javax.management.RuntimeErrorException; +import javax.management.RuntimeMBeanException; +import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeType; +import javax.management.openmbean.TabularData; +import org.apache.commons.lang3.NotImplementedException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/* + * This servlet is based off of the JMXProxyServlet from Tomcat 7.0.14. It has + * been rewritten to be read only and to output in a JSON format so it is not + * really that close to the original. + */ +/** + * Provides Read only web access to JMX. + *

+ * This servlet generally will be placed under the /jmx URL for each + * HttpServer. It provides read only + * access to JMX metrics. The optional qry parameter + * may be used to query only a subset of the JMX Beans. This query + * functionality is provided through the + * {@link MBeanServer#queryNames(ObjectName, javax.management.QueryExp)} + * method. + *

+ *

+ * For example http://.../jmx?qry=Hadoop:* will return + * all hadoop metrics exposed through JMX. + *

+ *

+ * The optional get parameter is used to query an specific + * attribute of a JMX bean. The format of the URL is + * http://.../jmx?get=MXBeanName::AttributeName + *

+ *

+ * For example + * + * http://../jmx?get=Hadoop:service=NameNode,name=NameNodeInfo::ClusterId + * will return the cluster id of the namenode mxbean. + *

+ *

+ * If the qry or the get parameter is not formatted + * correctly then a 400 BAD REQUEST http response code will be returned. + *

+ *

+ * If a resouce such as a mbean or attribute can not be found, + * a 404 SC_NOT_FOUND http response code will be returned. + *

+ * The return format is JSON and in the form + *

+ *  {
+ *    "beans" : [
+ *      {
+ *        "name":"bean-name"
+ *        ...
+ *      }
+ *    ]
+ *  }
+ *  
+ * The servlet attempts to convert the the JMXBeans into JSON. Each + * bean's attributes will be converted to a JSON object member. + * + * If the attribute is a boolean, a number, a string, or an array + * it will be converted to the JSON equivalent. + * + * If the value is a {@link CompositeData} then it will be converted + * to a JSON object with the keys as the name of the JSON member and + * the value is converted following these same rules. + * + * If the value is a {@link TabularData} then it will be converted + * to an array of the {@link CompositeData} elements that it contains. + * + * All other objects will be converted to a string and output as such. + * + * The bean's name and modelerType will be returned for all beans. + * + */ +public class JMXJsonServlet extends HttpServlet { + private static final Logger LOG = + LoggerFactory.getLogger(JMXJsonServlet.class); + static final String ACCESS_CONTROL_ALLOW_METHODS = + "Access-Control-Allow-Methods"; + static final String ACCESS_CONTROL_ALLOW_ORIGIN = + "Access-Control-Allow-Origin"; + + private static final long serialVersionUID = 1L; + + /** + * MBean server. + */ + private transient MBeanServer mBeanServer; + + /** + * Json Factory to create Json generators for write objects in json format. + */ + private transient JsonFactory jsonFactory; + + /** + * Initialize this servlet. + */ + @Override + public void init() throws ServletException { + // Retrieve the MBean server + mBeanServer = ManagementFactory.getPlatformMBeanServer(); + jsonFactory = new JsonFactory(); + } + + protected boolean isInstrumentationAccessAllowed(HttpServletRequest request, + HttpServletResponse response) throws IOException { + return HttpServer2.isInstrumentationAccessAllowed(getServletContext(), + request, response); + } + + /** + * Disable TRACE method to avoid TRACE vulnerability. + */ + @Override + protected void doTrace(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); + } + + /** + * Process a GET request for the specified resource. + * + * @param request + * The servlet request we are processing + * @param response + * The servlet response we are creating + */ + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) { + try { + if (!isInstrumentationAccessAllowed(request, response)) { + return; + } + JsonGenerator jg = null; + PrintWriter writer = null; + try { + writer = response.getWriter(); + + response.setContentType("application/json; charset=utf8"); + response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET"); + response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); + + jg = jsonFactory.createGenerator(writer); + jg.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET); + jg.useDefaultPrettyPrinter(); + jg.writeStartObject(); + + // query per mbean attribute + String getmethod = request.getParameter("get"); + if (getmethod != null) { + String[] splitStrings = getmethod.split("\\:\\:"); + if (splitStrings.length != 2) { + jg.writeStringField("result", "ERROR"); + jg.writeStringField("message", "query format is not as expected."); + jg.flush(); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + return; + } + listBeans(jg, new ObjectName(splitStrings[0]), splitStrings[1], + response); + return; + } + + // query per mbean + String qry = request.getParameter("qry"); + if (qry == null) { + qry = "*:*"; + } + listBeans(jg, new ObjectName(qry), null, response); + } finally { + if (jg != null) { + jg.close(); + } + if (writer != null) { + writer.close(); + } + } + } catch (IOException e) { + LOG.error("Caught an exception while processing JMX request", e); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } catch (MalformedObjectNameException e) { + LOG.error("Caught an exception while processing JMX request", e); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + } + } + + // --------------------------------------------------------- Private Methods + private void listBeans(JsonGenerator jg, ObjectName qry, String attribute, + HttpServletResponse response) + throws IOException { + LOG.debug("Listing beans for " + qry); + Set names = null; + names = mBeanServer.queryNames(qry, null); + + jg.writeArrayFieldStart("beans"); + Iterator it = names.iterator(); + while (it.hasNext()) { + ObjectName oname = it.next(); + MBeanInfo minfo; + String code = ""; + Object attributeinfo = null; + try { + minfo = mBeanServer.getMBeanInfo(oname); + code = minfo.getClassName(); + String prs = ""; + try { + if ("org.apache.commons.modeler.BaseModelMBean".equals(code)) { + prs = "modelerType"; + code = (String) mBeanServer.getAttribute(oname, prs); + } + if (attribute != null) { + prs = attribute; + attributeinfo = mBeanServer.getAttribute(oname, prs); + } + } catch (AttributeNotFoundException e) { + // If the modelerType attribute was not found, the class name is used + // instead. + LOG.error("getting attribute " + prs + " of " + oname + + " threw an exception", e); + } catch (MBeanException e) { + // The code inside the attribute getter threw an exception so log it, + // and fall back on the class name + LOG.error("getting attribute " + prs + " of " + oname + + " threw an exception", e); + } catch (RuntimeException e) { + // For some reason even with an MBeanException available to them + // Runtime exceptionscan still find their way through, so treat them + // the same as MBeanException + LOG.error("getting attribute " + prs + " of " + oname + + " threw an exception", e); + } catch (ReflectionException e) { + // This happens when the code inside the JMX bean (setter?? from the + // java docs) threw an exception, so log it and fall back on the + // class name + LOG.error("getting attribute " + prs + " of " + oname + + " threw an exception", e); + } + } catch (InstanceNotFoundException e) { + //Ignored for some reason the bean was not found so don't output it + continue; + } catch (IntrospectionException e) { + // This is an internal error, something odd happened with reflection so + // log it and don't output the bean. + LOG.error("Problem while trying to process JMX query: " + qry + + " with MBean " + oname, e); + continue; + } catch (ReflectionException e) { + // This happens when the code inside the JMX bean threw an exception, so + // log it and don't output the bean. + LOG.error("Problem while trying to process JMX query: " + qry + + " with MBean " + oname, e); + continue; + } + + jg.writeStartObject(); + jg.writeStringField("name", oname.toString()); + + jg.writeStringField("modelerType", code); + if ((attribute != null) && (attributeinfo == null)) { + jg.writeStringField("result", "ERROR"); + jg.writeStringField("message", "No attribute with name " + attribute + + " was found."); + jg.writeEndObject(); + jg.writeEndArray(); + jg.close(); + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + if (attribute != null) { + writeAttribute(jg, attribute, attributeinfo); + } else { + MBeanAttributeInfo[] attrs = minfo.getAttributes(); + for (MBeanAttributeInfo attr : attrs) { + writeAttribute(jg, oname, attr); + } + } + jg.writeEndObject(); + } + jg.writeEndArray(); + } + + private void writeAttribute(JsonGenerator jg, ObjectName oname, MBeanAttributeInfo attr) throws IOException { + if (!attr.isReadable()) { + return; + } + String attName = attr.getName(); + if ("modelerType".equals(attName)) { + return; + } + if (attName.indexOf('=') >= 0 || attName.indexOf(':') >= 0 + || attName.indexOf(' ') >= 0) { + return; + } + Object value = null; + try { + value = mBeanServer.getAttribute(oname, attName); + } catch (RuntimeMBeanException e) { + // UnsupportedOperationExceptions happen in the normal course of business, + // so no need to log them as errors all the time. + if (e.getCause() instanceof UnsupportedOperationException) { + LOG.debug("getting attribute " + attName + " of " + oname + " threw an exception", e); + } else { + LOG.error("getting attribute " + attName + " of " + oname + " threw an exception", e); + } + return; + } catch (RuntimeErrorException e) { + // RuntimeErrorException happens when an unexpected failure occurs in getAttribute + // for example https://issues.apache.org/jira/browse/DAEMON-120 + LOG.error("getting attribute {} of {} threw an exception", + attName, oname, e); + return; + } catch (AttributeNotFoundException e) { + //Ignored the attribute was not found, which should never happen because the bean + //just told us that it has this attribute, but if this happens just don't output + //the attribute. + return; + } catch (MBeanException e) { + //The code inside the attribute getter threw an exception so log it, and + // skip outputting the attribute + LOG.error("getting attribute " + attName + " of " + oname + " threw an exception", e); + return; + } catch (RuntimeException e) { + //For some reason even with an MBeanException available to them Runtime exceptions + //can still find their way through, so treat them the same as MBeanException + LOG.error("getting attribute " + attName + " of " + oname + " threw an exception", e); + return; + } catch (ReflectionException e) { + //This happens when the code inside the JMX bean (setter?? from the java docs) + //threw an exception, so log it and skip outputting the attribute + LOG.error("getting attribute " + attName + " of " + oname + " threw an exception", e); + return; + } catch (InstanceNotFoundException e) { + //Ignored the mbean itself was not found, which should never happen because we + //just accessed it (perhaps something unregistered in-between) but if this + //happens just don't output the attribute. + return; + } + + writeAttribute(jg, attName, value); + } + + private void writeAttribute(JsonGenerator jg, String attName, Object value) throws IOException { + jg.writeFieldName(attName); + writeObject(jg, value, attName); + } + + private void writeObject(JsonGenerator jg, Object value, String attName) throws IOException { + if (value == null) { + jg.writeNull(); + } else { + Class c = value.getClass(); + if (c.isArray()) { + jg.writeStartArray(); + int len = Array.getLength(value); + for (int j = 0; j < len; j++) { + Object item = Array.get(value, j); + writeObject(jg, item, attName); + } + jg.writeEndArray(); + } else if (extraCheck(value)) { + extraWrite(value, attName, jg); + } else if (value instanceof Number) { + Number n = (Number) value; + jg.writeNumber(n.toString()); + } else if (value instanceof Boolean) { + Boolean b = (Boolean) value; + jg.writeBoolean(b); + } else if (value instanceof CompositeData) { + CompositeData cds = (CompositeData) value; + CompositeType comp = cds.getCompositeType(); + Set keys = comp.keySet(); + jg.writeStartObject(); + for (String key: keys) { + writeAttribute(jg, key, cds.get(key)); + } + jg.writeEndObject(); + } else if (value instanceof TabularData) { + TabularData tds = (TabularData) value; + jg.writeStartArray(); + for (Object entry : tds.values()) { + writeObject(jg, entry, attName); + } + jg.writeEndArray(); + } else { + jg.writeString(value.toString()); + } + } + } + + /** + * In case you need to modify the logic, how java objects transforms to json, + * you can overwrite this method to return true in case special handling. + * @param value the object what should be judged + * @return true, if it needs special transformation + */ + protected boolean extraCheck(Object value) { + return false; + } + + protected void extraWrite(Object value, String attName, JsonGenerator jg) throws IOException { + throw new NotImplementedException(); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/LogStreamServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/LogStreamServlet.java index c856d399777a..db80e0d49d14 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/LogStreamServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/LogStreamServlet.java @@ -17,10 +17,10 @@ package org.apache.hadoop.hdds.server.http; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/NoCacheFilter.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/NoCacheFilter.java index 06b939b321cb..3a2e51d8100a 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/NoCacheFilter.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/NoCacheFilter.java @@ -17,14 +17,14 @@ package org.apache.hadoop.hdds.server.http; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; /** * Servlet filter to add no caching headers. diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ProfileServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ProfileServlet.java index 57ed07c3cd95..dc36b30dccdb 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ProfileServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ProfileServlet.java @@ -19,6 +19,9 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -33,9 +36,6 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Pattern; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/PrometheusServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/PrometheusServlet.java index a58af8abe18d..d3e33cc13ef1 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/PrometheusServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/PrometheusServlet.java @@ -19,12 +19,12 @@ import io.prometheus.client.CollectorRegistry; import io.prometheus.client.exporter.common.TextFormat; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; /** * Servlet to publish hadoop metrics in prometheus format. diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ServletElementsFactory.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ServletElementsFactory.java index 0401c6e082f4..c5570ee35321 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ServletElementsFactory.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/ServletElementsFactory.java @@ -18,8 +18,9 @@ package org.apache.hadoop.hdds.server.http; import java.util.Map; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; +import org.apache.hadoop.hdds.server.http.servletbridge.JavaxFilterBridge; +import org.eclipse.jetty.ee10.servlet.FilterHolder; +import org.eclipse.jetty.ee10.servlet.FilterMapping; /** * Factory class which helps to create different types of servlet elements. @@ -43,10 +44,35 @@ public static FilterHolder createFilterHolder(String filterName, String classname, Map parameters) { FilterHolder holder = new FilterHolder(); holder.setName(filterName); - holder.setClassName(classname); + Class filterClass = loadFilterClass(classname); + if (javax.servlet.Filter.class.isAssignableFrom(filterClass)) { + // hadoop-auth based filters still implement javax.servlet.Filter; run + // them through the bridge so they work inside Jetty EE10 (jakarta). + holder.setFilter(new JavaxFilterBridge(newJavaxFilter(filterClass))); + } else { + holder.setClassName(classname); + } if (parameters != null) { holder.setInitParameters(parameters); } return holder; } + + private static Class loadFilterClass(String classname) { + try { + return Class.forName(classname, false, + Thread.currentThread().getContextClassLoader()); + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException("Filter class not found: " + classname, e); + } + } + + private static javax.servlet.Filter newJavaxFilter(Class filterClass) { + try { + return (javax.servlet.Filter) filterClass.getDeclaredConstructor().newInstance(); + } catch (ReflectiveOperationException e) { + throw new IllegalArgumentException( + "Unable to instantiate filter: " + filterClass.getName(), e); + } + } } diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxFilterConfig.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxFilterConfig.java new file mode 100644 index 000000000000..e0bd69bd96b0 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxFilterConfig.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.util.Enumeration; +import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; + +/** + * Exposes a {@link jakarta.servlet.FilterConfig} as a + * {@code javax.servlet.FilterConfig}, backing the servlet context with a + * {@link JakartaToJavaxServletContext} over the same jakarta context so that + * context attributes (for example the signer secret provider) are shared. + */ +class JakartaToJavaxFilterConfig implements FilterConfig { + + private final jakarta.servlet.FilterConfig delegate; + private final ServletContext servletContext; + + JakartaToJavaxFilterConfig(jakarta.servlet.FilterConfig delegate) { + this.delegate = delegate; + this.servletContext = new JakartaToJavaxServletContext(delegate.getServletContext()); + } + + @Override + public String getFilterName() { + return delegate.getFilterName(); + } + + @Override + public ServletContext getServletContext() { + return servletContext; + } + + @Override + public String getInitParameter(String name) { + return delegate.getInitParameter(name); + } + + @Override + public Enumeration getInitParameterNames() { + return delegate.getInitParameterNames(); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxInputStream.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxInputStream.java new file mode 100644 index 000000000000..526b8ddba507 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxInputStream.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.io.IOException; +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; + +/** + * Exposes a {@link jakarta.servlet.ServletInputStream} as a + * {@code javax.servlet.ServletInputStream}. Blocking reads delegate to the + * wrapped stream; the non-blocking async read-listener API is not used by the + * bridged auth filters and is unsupported. + */ +class JakartaToJavaxInputStream extends ServletInputStream { + + private final jakarta.servlet.ServletInputStream delegate; + + JakartaToJavaxInputStream(jakarta.servlet.ServletInputStream delegate) { + this.delegate = delegate; + } + + @Override + public int read() throws IOException { + return delegate.read(); + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + return delegate.read(b, off, len); + } + + @Override + public int available() throws IOException { + return delegate.available(); + } + + @Override + public void close() throws IOException { + delegate.close(); + } + + @Override + public boolean isFinished() { + return delegate.isFinished(); + } + + @Override + public boolean isReady() { + return delegate.isReady(); + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new UnsupportedOperationException("Async read listeners are not supported by the servlet bridge"); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxOutputStream.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxOutputStream.java new file mode 100644 index 000000000000..517c998d99c3 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxOutputStream.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.io.IOException; +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; + +/** + * Exposes a {@link jakarta.servlet.ServletOutputStream} as a + * {@code javax.servlet.ServletOutputStream}. Blocking writes delegate to the + * wrapped stream; the non-blocking async write-listener API is not used by the + * bridged auth filters and is unsupported. + */ +class JakartaToJavaxOutputStream extends ServletOutputStream { + + private final jakarta.servlet.ServletOutputStream delegate; + + JakartaToJavaxOutputStream(jakarta.servlet.ServletOutputStream delegate) { + this.delegate = delegate; + } + + @Override + public void write(int b) throws IOException { + delegate.write(b); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + delegate.write(b, off, len); + } + + @Override + public void flush() throws IOException { + delegate.flush(); + } + + @Override + public void close() throws IOException { + delegate.close(); + } + + @Override + public boolean isReady() { + return delegate.isReady(); + } + + @Override + public void setWriteListener(WriteListener writeListener) { + throw new UnsupportedOperationException("Async write listeners are not supported by the servlet bridge"); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxRequest.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxRequest.java new file mode 100644 index 000000000000..fcdd079656a1 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxRequest.java @@ -0,0 +1,420 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.io.BufferedReader; +import java.io.IOException; +import java.security.Principal; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Locale; +import java.util.Map; +import javax.servlet.AsyncContext; +import javax.servlet.DispatcherType; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpUpgradeHandler; +import javax.servlet.http.Part; + +/** + * Exposes a {@link jakarta.servlet.http.HttpServletRequest} as a + * {@code javax.servlet.http.HttpServletRequest} so that hadoop's + * {@code javax.servlet}-based authentication filters can read the request + * inside a Jetty EE10 (jakarta) servlet chain. See {@link JavaxFilterBridge}. + * + *

The methods used by the hadoop-auth filter chain (headers, cookies, + * method, URL/URI, remote address, attributes, scheme, body) delegate to the + * wrapped jakarta request. Async, upgrade, multipart, session and dispatcher + * operations are not part of that chain and throw + * {@link UnsupportedOperationException}. + */ +public class JakartaToJavaxRequest implements HttpServletRequest { + + private final jakarta.servlet.http.HttpServletRequest delegate; + + public JakartaToJavaxRequest(jakarta.servlet.http.HttpServletRequest delegate) { + this.delegate = delegate; + } + + jakarta.servlet.http.HttpServletRequest getDelegate() { + return delegate; + } + + @Override + public String getAuthType() { + return delegate.getAuthType(); + } + + @Override + public Cookie[] getCookies() { + jakarta.servlet.http.Cookie[] source = delegate.getCookies(); + if (source == null) { + return null; + } + Cookie[] result = new Cookie[source.length]; + for (int i = 0; i < source.length; i++) { + result[i] = ServletBridgeUtils.toJavax(source[i]); + } + return result; + } + + @Override + public long getDateHeader(String name) { + return delegate.getDateHeader(name); + } + + @Override + public String getHeader(String name) { + return delegate.getHeader(name); + } + + @Override + public Enumeration getHeaders(String name) { + return delegate.getHeaders(name); + } + + @Override + public Enumeration getHeaderNames() { + return delegate.getHeaderNames(); + } + + @Override + public int getIntHeader(String name) { + return delegate.getIntHeader(name); + } + + @Override + public String getMethod() { + return delegate.getMethod(); + } + + @Override + public String getPathInfo() { + return delegate.getPathInfo(); + } + + @Override + public String getPathTranslated() { + return delegate.getPathTranslated(); + } + + @Override + public String getContextPath() { + return delegate.getContextPath(); + } + + @Override + public String getQueryString() { + return delegate.getQueryString(); + } + + @Override + public String getRemoteUser() { + return delegate.getRemoteUser(); + } + + @Override + public boolean isUserInRole(String role) { + return delegate.isUserInRole(role); + } + + @Override + public Principal getUserPrincipal() { + return delegate.getUserPrincipal(); + } + + @Override + public String getRequestedSessionId() { + return delegate.getRequestedSessionId(); + } + + @Override + public String getRequestURI() { + return delegate.getRequestURI(); + } + + @Override + public StringBuffer getRequestURL() { + return delegate.getRequestURL(); + } + + @Override + public String getServletPath() { + return delegate.getServletPath(); + } + + @Override + public HttpSession getSession(boolean create) { + throw new UnsupportedOperationException("getSession is not supported by the servlet bridge"); + } + + @Override + public HttpSession getSession() { + throw new UnsupportedOperationException("getSession is not supported by the servlet bridge"); + } + + @Override + public String changeSessionId() { + throw new UnsupportedOperationException("changeSessionId is not supported by the servlet bridge"); + } + + @Override + public boolean isRequestedSessionIdValid() { + return delegate.isRequestedSessionIdValid(); + } + + @Override + public boolean isRequestedSessionIdFromCookie() { + return delegate.isRequestedSessionIdFromCookie(); + } + + @Override + public boolean isRequestedSessionIdFromURL() { + return delegate.isRequestedSessionIdFromURL(); + } + + @Override + @SuppressWarnings("deprecation") + public boolean isRequestedSessionIdFromUrl() { + return delegate.isRequestedSessionIdFromURL(); + } + + @Override + public boolean authenticate(HttpServletResponse response) throws IOException, ServletException { + throw new UnsupportedOperationException("authenticate is not supported by the servlet bridge"); + } + + @Override + public void login(String username, String password) throws ServletException { + throw new UnsupportedOperationException("login is not supported by the servlet bridge"); + } + + @Override + public void logout() throws ServletException { + throw new UnsupportedOperationException("logout is not supported by the servlet bridge"); + } + + @Override + public Collection getParts() throws IOException, ServletException { + throw new UnsupportedOperationException("getParts is not supported by the servlet bridge"); + } + + @Override + public Part getPart(String name) throws IOException, ServletException { + throw new UnsupportedOperationException("getPart is not supported by the servlet bridge"); + } + + @Override + public T upgrade(Class handlerClass) throws IOException, ServletException { + throw new UnsupportedOperationException("upgrade is not supported by the servlet bridge"); + } + + @Override + public Object getAttribute(String name) { + return delegate.getAttribute(name); + } + + @Override + public Enumeration getAttributeNames() { + return delegate.getAttributeNames(); + } + + @Override + public String getCharacterEncoding() { + return delegate.getCharacterEncoding(); + } + + @Override + public void setCharacterEncoding(String env) throws java.io.UnsupportedEncodingException { + delegate.setCharacterEncoding(env); + } + + @Override + public int getContentLength() { + return delegate.getContentLength(); + } + + @Override + public long getContentLengthLong() { + return delegate.getContentLengthLong(); + } + + @Override + public String getContentType() { + return delegate.getContentType(); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + return new JakartaToJavaxInputStream(delegate.getInputStream()); + } + + @Override + public String getParameter(String name) { + return delegate.getParameter(name); + } + + @Override + public Enumeration getParameterNames() { + return delegate.getParameterNames(); + } + + @Override + public String[] getParameterValues(String name) { + return delegate.getParameterValues(name); + } + + @Override + public Map getParameterMap() { + return delegate.getParameterMap(); + } + + @Override + public String getProtocol() { + return delegate.getProtocol(); + } + + @Override + public String getScheme() { + return delegate.getScheme(); + } + + @Override + public String getServerName() { + return delegate.getServerName(); + } + + @Override + public int getServerPort() { + return delegate.getServerPort(); + } + + @Override + public BufferedReader getReader() throws IOException { + return delegate.getReader(); + } + + @Override + public String getRemoteAddr() { + return delegate.getRemoteAddr(); + } + + @Override + public String getRemoteHost() { + return delegate.getRemoteHost(); + } + + @Override + public void setAttribute(String name, Object o) { + delegate.setAttribute(name, o); + } + + @Override + public void removeAttribute(String name) { + delegate.removeAttribute(name); + } + + @Override + public Locale getLocale() { + return delegate.getLocale(); + } + + @Override + public Enumeration getLocales() { + return delegate.getLocales(); + } + + @Override + public boolean isSecure() { + return delegate.isSecure(); + } + + @Override + public RequestDispatcher getRequestDispatcher(String path) { + throw new UnsupportedOperationException("getRequestDispatcher is not supported by the servlet bridge"); + } + + @Override + @SuppressWarnings("deprecation") + public String getRealPath(String path) { + throw new UnsupportedOperationException("getRealPath is not supported by the servlet bridge"); + } + + @Override + public int getRemotePort() { + return delegate.getRemotePort(); + } + + @Override + public String getLocalName() { + return delegate.getLocalName(); + } + + @Override + public String getLocalAddr() { + return delegate.getLocalAddr(); + } + + @Override + public int getLocalPort() { + return delegate.getLocalPort(); + } + + @Override + public ServletContext getServletContext() { + throw new UnsupportedOperationException("getServletContext is not supported on the request bridge"); + } + + @Override + public AsyncContext startAsync() { + throw new UnsupportedOperationException("startAsync is not supported by the servlet bridge"); + } + + @Override + public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) { + throw new UnsupportedOperationException("startAsync is not supported by the servlet bridge"); + } + + @Override + public boolean isAsyncStarted() { + return delegate.isAsyncStarted(); + } + + @Override + public boolean isAsyncSupported() { + return delegate.isAsyncSupported(); + } + + @Override + public AsyncContext getAsyncContext() { + throw new UnsupportedOperationException("getAsyncContext is not supported by the servlet bridge"); + } + + @Override + public DispatcherType getDispatcherType() { + return DispatcherType.valueOf(delegate.getDispatcherType().name()); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxResponse.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxResponse.java new file mode 100644 index 000000000000..9c749990eb0a --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxResponse.java @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Collection; +import java.util.Locale; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletResponse; + +/** + * Exposes a {@link jakarta.servlet.http.HttpServletResponse} as a + * {@code javax.servlet.http.HttpServletResponse} so that hadoop's + * {@code javax.servlet}-based authentication filters can write the response + * (status, headers, cookies, error) inside a Jetty EE10 servlet chain. + * See {@link JavaxFilterBridge}. + */ +public class JakartaToJavaxResponse implements HttpServletResponse { + + private final jakarta.servlet.http.HttpServletResponse delegate; + + public JakartaToJavaxResponse(jakarta.servlet.http.HttpServletResponse delegate) { + this.delegate = delegate; + } + + @Override + public void addCookie(Cookie cookie) { + delegate.addCookie(ServletBridgeUtils.toJakarta(cookie)); + } + + @Override + public boolean containsHeader(String name) { + return delegate.containsHeader(name); + } + + @Override + public String encodeURL(String url) { + return delegate.encodeURL(url); + } + + @Override + public String encodeRedirectURL(String url) { + return delegate.encodeRedirectURL(url); + } + + @Override + @SuppressWarnings("deprecation") + public String encodeUrl(String url) { + return delegate.encodeURL(url); + } + + @Override + @SuppressWarnings("deprecation") + public String encodeRedirectUrl(String url) { + return delegate.encodeRedirectURL(url); + } + + @Override + public void sendError(int sc, String msg) throws IOException { + delegate.sendError(sc, msg); + } + + @Override + public void sendError(int sc) throws IOException { + delegate.sendError(sc); + } + + @Override + public void sendRedirect(String location) throws IOException { + delegate.sendRedirect(location); + } + + @Override + public void setDateHeader(String name, long date) { + delegate.setDateHeader(name, date); + } + + @Override + public void addDateHeader(String name, long date) { + delegate.addDateHeader(name, date); + } + + @Override + public void setHeader(String name, String value) { + delegate.setHeader(name, value); + } + + @Override + public void addHeader(String name, String value) { + delegate.addHeader(name, value); + } + + @Override + public void setIntHeader(String name, int value) { + delegate.setIntHeader(name, value); + } + + @Override + public void addIntHeader(String name, int value) { + delegate.addIntHeader(name, value); + } + + @Override + public void setStatus(int sc) { + delegate.setStatus(sc); + } + + @Override + @SuppressWarnings("deprecation") + public void setStatus(int sc, String sm) { + // Servlet 6.0 removed the message form; the status code carries the meaning. + delegate.setStatus(sc); + } + + @Override + public int getStatus() { + return delegate.getStatus(); + } + + @Override + public String getHeader(String name) { + return delegate.getHeader(name); + } + + @Override + public Collection getHeaders(String name) { + return delegate.getHeaders(name); + } + + @Override + public Collection getHeaderNames() { + return delegate.getHeaderNames(); + } + + @Override + public String getCharacterEncoding() { + return delegate.getCharacterEncoding(); + } + + @Override + public String getContentType() { + return delegate.getContentType(); + } + + @Override + public ServletOutputStream getOutputStream() throws IOException { + return new JakartaToJavaxOutputStream(delegate.getOutputStream()); + } + + @Override + public PrintWriter getWriter() throws IOException { + return delegate.getWriter(); + } + + @Override + public void setCharacterEncoding(String charset) { + delegate.setCharacterEncoding(charset); + } + + @Override + public void setContentLength(int len) { + delegate.setContentLength(len); + } + + @Override + public void setContentLengthLong(long len) { + delegate.setContentLengthLong(len); + } + + @Override + public void setContentType(String type) { + delegate.setContentType(type); + } + + @Override + public void setBufferSize(int size) { + delegate.setBufferSize(size); + } + + @Override + public int getBufferSize() { + return delegate.getBufferSize(); + } + + @Override + public void flushBuffer() throws IOException { + delegate.flushBuffer(); + } + + @Override + public void resetBuffer() { + delegate.resetBuffer(); + } + + @Override + public boolean isCommitted() { + return delegate.isCommitted(); + } + + @Override + public void reset() { + delegate.reset(); + } + + @Override + public void setLocale(Locale loc) { + delegate.setLocale(loc); + } + + @Override + public Locale getLocale() { + return delegate.getLocale(); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxServletContext.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxServletContext.java new file mode 100644 index 000000000000..c1d1a1630b5a --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JakartaToJavaxServletContext.java @@ -0,0 +1,321 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.Enumeration; +import java.util.EventListener; +import java.util.Map; +import java.util.Set; +import javax.servlet.Filter; +import javax.servlet.FilterRegistration; +import javax.servlet.RequestDispatcher; +import javax.servlet.Servlet; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import javax.servlet.SessionCookieConfig; +import javax.servlet.SessionTrackingMode; +import javax.servlet.descriptor.JspConfigDescriptor; + +/** + * Exposes a {@link jakarta.servlet.ServletContext} as a + * {@code javax.servlet.ServletContext}. Only the operations used by hadoop's + * authentication filter chain and secret-provider construction are delegated + * (attributes, init parameters, logging, resources, version). Attributes are + * read from and written to the underlying jakarta context, so a value set on + * the real context (for example the signer secret provider) is visible through + * this view. Servlet/filter registration, dispatchers, listeners, session + * configuration and JSP descriptors are not part of that chain and throw + * {@link UnsupportedOperationException}. + */ +public class JakartaToJavaxServletContext implements ServletContext { + + private final jakarta.servlet.ServletContext delegate; + + public JakartaToJavaxServletContext(jakarta.servlet.ServletContext delegate) { + this.delegate = delegate; + } + + @Override + public String getContextPath() { + return delegate.getContextPath(); + } + + @Override + public ServletContext getContext(String uripath) { + throw new UnsupportedOperationException("getContext is not supported by the servlet bridge"); + } + + @Override + public int getMajorVersion() { + return delegate.getMajorVersion(); + } + + @Override + public int getMinorVersion() { + return delegate.getMinorVersion(); + } + + @Override + public int getEffectiveMajorVersion() { + return delegate.getEffectiveMajorVersion(); + } + + @Override + public int getEffectiveMinorVersion() { + return delegate.getEffectiveMinorVersion(); + } + + @Override + public String getMimeType(String file) { + return delegate.getMimeType(file); + } + + @Override + public Set getResourcePaths(String path) { + return delegate.getResourcePaths(path); + } + + @Override + public URL getResource(String path) throws MalformedURLException { + return delegate.getResource(path); + } + + @Override + public InputStream getResourceAsStream(String path) { + return delegate.getResourceAsStream(path); + } + + @Override + public RequestDispatcher getRequestDispatcher(String path) { + throw new UnsupportedOperationException("getRequestDispatcher is not supported by the servlet bridge"); + } + + @Override + public RequestDispatcher getNamedDispatcher(String name) { + throw new UnsupportedOperationException("getNamedDispatcher is not supported by the servlet bridge"); + } + + @Override + @SuppressWarnings("deprecation") + public Servlet getServlet(String name) throws ServletException { + return null; + } + + @Override + @SuppressWarnings("deprecation") + public Enumeration getServlets() { + return Collections.emptyEnumeration(); + } + + @Override + @SuppressWarnings("deprecation") + public Enumeration getServletNames() { + return Collections.emptyEnumeration(); + } + + @Override + public void log(String msg) { + delegate.log(msg); + } + + @Override + @SuppressWarnings("deprecation") + public void log(Exception exception, String msg) { + delegate.log(msg, exception); + } + + @Override + public void log(String message, Throwable throwable) { + delegate.log(message, throwable); + } + + @Override + public String getRealPath(String path) { + return delegate.getRealPath(path); + } + + @Override + public String getServerInfo() { + return delegate.getServerInfo(); + } + + @Override + public String getInitParameter(String name) { + return delegate.getInitParameter(name); + } + + @Override + public Enumeration getInitParameterNames() { + return delegate.getInitParameterNames(); + } + + @Override + public boolean setInitParameter(String name, String value) { + return delegate.setInitParameter(name, value); + } + + @Override + public Object getAttribute(String name) { + return delegate.getAttribute(name); + } + + @Override + public Enumeration getAttributeNames() { + return delegate.getAttributeNames(); + } + + @Override + public void setAttribute(String name, Object object) { + delegate.setAttribute(name, object); + } + + @Override + public void removeAttribute(String name) { + delegate.removeAttribute(name); + } + + @Override + public String getServletContextName() { + return delegate.getServletContextName(); + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, String className) { + throw new UnsupportedOperationException("addServlet is not supported by the servlet bridge"); + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Servlet servlet) { + throw new UnsupportedOperationException("addServlet is not supported by the servlet bridge"); + } + + @Override + public ServletRegistration.Dynamic addServlet(String servletName, Class servletClass) { + throw new UnsupportedOperationException("addServlet is not supported by the servlet bridge"); + } + + @Override + public T createServlet(Class clazz) throws ServletException { + throw new UnsupportedOperationException("createServlet is not supported by the servlet bridge"); + } + + @Override + public ServletRegistration getServletRegistration(String servletName) { + throw new UnsupportedOperationException("getServletRegistration is not supported by the servlet bridge"); + } + + @Override + public Map getServletRegistrations() { + throw new UnsupportedOperationException("getServletRegistrations is not supported by the servlet bridge"); + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, String className) { + throw new UnsupportedOperationException("addFilter is not supported by the servlet bridge"); + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Filter filter) { + throw new UnsupportedOperationException("addFilter is not supported by the servlet bridge"); + } + + @Override + public FilterRegistration.Dynamic addFilter(String filterName, Class filterClass) { + throw new UnsupportedOperationException("addFilter is not supported by the servlet bridge"); + } + + @Override + public T createFilter(Class clazz) throws ServletException { + throw new UnsupportedOperationException("createFilter is not supported by the servlet bridge"); + } + + @Override + public FilterRegistration getFilterRegistration(String filterName) { + throw new UnsupportedOperationException("getFilterRegistration is not supported by the servlet bridge"); + } + + @Override + public Map getFilterRegistrations() { + throw new UnsupportedOperationException("getFilterRegistrations is not supported by the servlet bridge"); + } + + @Override + public SessionCookieConfig getSessionCookieConfig() { + throw new UnsupportedOperationException("getSessionCookieConfig is not supported by the servlet bridge"); + } + + @Override + public void setSessionTrackingModes(Set sessionTrackingModes) { + throw new UnsupportedOperationException("setSessionTrackingModes is not supported by the servlet bridge"); + } + + @Override + public Set getDefaultSessionTrackingModes() { + throw new UnsupportedOperationException("getDefaultSessionTrackingModes is not supported by the servlet bridge"); + } + + @Override + public Set getEffectiveSessionTrackingModes() { + throw new UnsupportedOperationException("getEffectiveSessionTrackingModes is not supported by the servlet bridge"); + } + + @Override + public void addListener(String className) { + throw new UnsupportedOperationException("addListener is not supported by the servlet bridge"); + } + + @Override + public void addListener(T t) { + throw new UnsupportedOperationException("addListener is not supported by the servlet bridge"); + } + + @Override + public void addListener(Class listenerClass) { + throw new UnsupportedOperationException("addListener is not supported by the servlet bridge"); + } + + @Override + public T createListener(Class clazz) throws ServletException { + throw new UnsupportedOperationException("createListener is not supported by the servlet bridge"); + } + + @Override + public JspConfigDescriptor getJspConfigDescriptor() { + throw new UnsupportedOperationException("getJspConfigDescriptor is not supported by the servlet bridge"); + } + + @Override + public ClassLoader getClassLoader() { + return delegate.getClassLoader(); + } + + @Override + public void declareRoles(String... roleNames) { + throw new UnsupportedOperationException("declareRoles is not supported by the servlet bridge"); + } + + @Override + public String getVirtualServerName() { + return delegate.getVirtualServerName(); + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JavaxFilterBridge.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JavaxFilterBridge.java new file mode 100644 index 000000000000..8a9076de26ec --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/JavaxFilterBridge.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.security.Principal; + +/** + * Runs a {@code javax.servlet.Filter} inside a Jetty EE10 (jakarta) servlet + * chain by wrapping the jakarta request/response as javax views for the + * delegate, and re-presenting the delegate's authenticated request to the + * downstream jakarta chain. + * + *

This is the single choke point that lets Ozone keep hadoop's + * {@code javax.servlet}-based authentication filters (SPNEGO / Kerberos / + * delegation token) as the source of truth while the rest of the HTTP stack + * runs on jakarta. When the delegate authenticates and calls its chain, the + * authenticated principal it established (remote user, user principal, auth + * type) is overlaid onto the original jakarta request and passed downstream; + * when the delegate short-circuits (for example writing a 401), the response + * has already been written through to the jakarta response and the downstream + * chain is not invoked. + */ +public class JavaxFilterBridge implements Filter { + + private final javax.servlet.Filter delegate; + + public JavaxFilterBridge(javax.servlet.Filter delegate) { + this.delegate = delegate; + } + + /** The wrapped javax filter, exposed for configuration by the registrar. */ + public javax.servlet.Filter getDelegate() { + return delegate; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + try { + delegate.init(new JakartaToJavaxFilterConfig(filterConfig)); + } catch (javax.servlet.ServletException e) { + throw new ServletException(e.getMessage(), e); + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) { + throw new ServletException("JavaxFilterBridge only supports HTTP requests"); + } + final HttpServletRequest jakartaRequest = (HttpServletRequest) request; + final HttpServletResponse jakartaResponse = (HttpServletResponse) response; + + JakartaToJavaxRequest javaxRequest = new JakartaToJavaxRequest(jakartaRequest); + JakartaToJavaxResponse javaxResponse = new JakartaToJavaxResponse(jakartaResponse); + + javax.servlet.FilterChain javaxChain = (downstreamRequest, downstreamResponse) -> { + // The delegate authenticated the request and may have wrapped it to carry + // the principal. Overlay that principal onto the original jakarta request + // and continue the jakarta chain. + HttpServletRequest authenticated = jakartaRequest; + if (downstreamRequest instanceof javax.servlet.http.HttpServletRequest) { + authenticated = new AuthenticatedRequest(jakartaRequest, + (javax.servlet.http.HttpServletRequest) downstreamRequest); + } + try { + chain.doFilter(authenticated, jakartaResponse); + } catch (ServletException e) { + throw new javax.servlet.ServletException(e.getMessage(), e); + } + }; + + try { + delegate.doFilter(javaxRequest, javaxResponse, javaxChain); + } catch (javax.servlet.ServletException e) { + throw new ServletException(e.getMessage(), e); + } + } + + @Override + public void destroy() { + delegate.destroy(); + } + + /** + * Jakarta request that carries the authentication result (remote user, + * principal, auth type, roles) the delegate established on its javax request, + * while delegating everything else to the original jakarta request. + */ + private static final class AuthenticatedRequest extends HttpServletRequestWrapper { + + private final javax.servlet.http.HttpServletRequest authenticated; + + private AuthenticatedRequest(HttpServletRequest original, + javax.servlet.http.HttpServletRequest authenticated) { + super(original); + this.authenticated = authenticated; + } + + @Override + public String getRemoteUser() { + return authenticated.getRemoteUser(); + } + + @Override + public Principal getUserPrincipal() { + return authenticated.getUserPrincipal(); + } + + @Override + public String getAuthType() { + return authenticated.getAuthType(); + } + + @Override + public boolean isUserInRole(String role) { + return authenticated.isUserInRole(role); + } + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/ServletBridgeUtils.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/ServletBridgeUtils.java new file mode 100644 index 000000000000..61e4ee012364 --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/ServletBridgeUtils.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +/** + * Value-type conversions between the {@code javax.servlet} and + * {@code jakarta.servlet} namespaces used by the servlet bridge. + */ +final class ServletBridgeUtils { + + private ServletBridgeUtils() { + } + + /** Convert a jakarta cookie to its javax equivalent. */ + static javax.servlet.http.Cookie toJavax(jakarta.servlet.http.Cookie source) { + javax.servlet.http.Cookie result = + new javax.servlet.http.Cookie(source.getName(), source.getValue()); + if (source.getDomain() != null) { + result.setDomain(source.getDomain()); + } + if (source.getPath() != null) { + result.setPath(source.getPath()); + } + result.setMaxAge(source.getMaxAge()); + result.setSecure(source.getSecure()); + result.setHttpOnly(source.isHttpOnly()); + return result; + } + + /** Convert a javax cookie to its jakarta equivalent. */ + static jakarta.servlet.http.Cookie toJakarta(javax.servlet.http.Cookie source) { + jakarta.servlet.http.Cookie result = + new jakarta.servlet.http.Cookie(source.getName(), source.getValue()); + if (source.getDomain() != null) { + result.setDomain(source.getDomain()); + } + if (source.getPath() != null) { + result.setPath(source.getPath()); + } + result.setMaxAge(source.getMaxAge()); + result.setSecure(source.getSecure()); + result.setHttpOnly(source.isHttpOnly()); + return result; + } +} diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/package-info.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/package-info.java new file mode 100644 index 000000000000..84fcd84d3d4f --- /dev/null +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/http/servletbridge/package-info.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * A minimal {@code javax.servlet} to {@code jakarta.servlet} bridge that lets + * hadoop's {@code javax.servlet}-based authentication filters run inside + * Ozone's Jetty EE10 (jakarta) HTTP server. See + * {@link org.apache.hadoop.hdds.server.http.servletbridge.JavaxFilterBridge}. + */ +package org.apache.hadoop.hdds.server.http.servletbridge; diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/DBCheckpointServlet.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/DBCheckpointServlet.java index 6941ea3d537c..fbc6320cbe5a 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/DBCheckpointServlet.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/DBCheckpointServlet.java @@ -23,6 +23,10 @@ import static org.apache.hadoop.ozone.OzoneConsts.ROCKSDB_SST_SUFFIX; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -38,10 +42,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.servlet.ServletFileUpload; @@ -49,6 +49,7 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.server.OzoneAdmins; +import org.apache.hadoop.hdds.server.http.servletbridge.JakartaToJavaxRequest; import org.apache.hadoop.hdds.utils.db.DBCheckpoint; import org.apache.hadoop.hdds.utils.db.DBStore; import org.apache.hadoop.ozone.lock.BootstrapStateHandler; @@ -313,7 +314,8 @@ protected static String[] parseFormDataParameters(HttpServletRequest request) { List sstParam = new ArrayList<>(); try { - FileItemIterator iter = upload.getItemIterator(request); + FileItemIterator iter = + upload.getItemIterator(new JakartaToJavaxRequest(request)); while (iter.hasNext()) { FileItemStream item = iter.next(); if (!item.isFormField() || !FIELD_NAME.equals(item.getFieldName())) { @@ -352,7 +354,8 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) { public void doPost(HttpServletRequest request, HttpServletResponse response) { LOG.info("Received POST request to obtain DB checkpoint snapshot"); - if (!ServletFileUpload.isMultipartContent(request)) { + if (!ServletFileUpload.isMultipartContent( + new JakartaToJavaxRequest(request))) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); return; } diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HttpServletUtils.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HttpServletUtils.java index 11b933f3a975..5be883755ba2 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HttpServletUtils.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HttpServletUtils.java @@ -17,16 +17,16 @@ package org.apache.hadoop.hdds.utils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; import java.io.Writer; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/LogLevel.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/LogLevel.java index de228d8dcc2b..8231216cedc3 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/LogLevel.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/LogLevel.java @@ -18,6 +18,10 @@ package org.apache.hadoop.hdds.utils; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -25,14 +29,11 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; +import java.util.Calendar; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSocketFactory; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.hdds.annotation.InterfaceAudience; @@ -42,7 +43,6 @@ import org.apache.hadoop.security.authentication.client.KerberosAuthenticator; import org.apache.hadoop.security.ssl.SSLFactory; import org.apache.hadoop.util.GenericOptionsParser; -import org.apache.hadoop.util.ServletUtil; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; import org.apache.log4j.Level; @@ -67,6 +67,11 @@ public final class LogLevel { private static final String MARKER = ""; private static final Pattern TAG = Pattern.compile("<[^>]*>"); + private static final String HTML_TAIL = "


\n" + + "Hadoop, " + + Calendar.getInstance().get(Calendar.YEAR) + ".\n" + + ""; + /** * Set to false only if log4j adapter class is not found in the classpath. Once set to false, * the utility method should not bother re-loading class again. @@ -369,9 +374,9 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro return; } - PrintWriter out = ServletUtil.initHTML(response, "Log Level"); - String logName = ServletUtil.getParameter(request, "log"); - String level = ServletUtil.getParameter(request, "level"); + PrintWriter out = initHTML(response, "Log Level"); + String logName = getParameter(request, "log"); + String level = getParameter(request, "level"); if (logName != null) { out.println("

Results

"); @@ -393,7 +398,27 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro } out.println(FORMS); - out.println(ServletUtil.HTML_TAIL); + out.println(HTML_TAIL); + } + + private static PrintWriter initHTML(HttpServletResponse response, String title) throws IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.println("\n" + + "\n" + + "" + title + "\n" + + "\n" + + "

" + title + "

\n"); + return out; + } + + private static String getParameter(HttpServletRequest request, String name) { + String s = request.getParameter(name); + if (s == null) { + return null; + } + s = s.trim(); + return s.isEmpty() ? null : s; } private static void process(Logger log, String level, diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/conf/TestHddsConfServlet.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/conf/TestHddsConfServlet.java index 85bb5e0cf851..967a03f14209 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/conf/TestHddsConfServlet.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/conf/TestHddsConfServlet.java @@ -27,16 +27,16 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.base.Strings; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.HttpHeaders; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.HttpHeaders; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.hadoop.hdds.JsonTestUtils; diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHtmlQuoting.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHtmlQuoting.java index 16047492a60c..ad2072107ddc 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHtmlQuoting.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHtmlQuoting.java @@ -25,7 +25,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; /** diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHttpServer2.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHttpServer2.java index dcbee53d42e5..217e87089016 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHttpServer2.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestHttpServer2.java @@ -18,9 +18,14 @@ package org.apache.hadoop.hdds.server.http; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.net.URI; import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.eclipse.jetty.http.UriCompliance; +import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.ServerConnector; import org.junit.jupiter.api.Test; @@ -50,4 +55,46 @@ public void testIdleTimeout() throws Exception { assertEquals(60000, server.getIdleTimeout()); } } + + /** + * By default ambiguous URIs (e.g. empty path segments from "//") are rejected + * with a 400: the connector uses Jetty's strict URI compliance and the + * servlet layer does not decode ambiguous URIs. + */ + @Test + public void testUriComplianceStrictByDefault() throws Exception { + HttpServer2 srv = buildServer(false); + assertSame(UriCompliance.DEFAULT, uriComplianceOf(srv)); + assertFalse(srv.getWebAppContext().getServletHandler() + .isDecodeAmbiguousURIs()); + } + + /** + * With allowAmbiguousUri the connector uses the LEGACY compliance mode and + * the servlet layer decodes ambiguous URIs, accepting empty path segments as + * Jetty 9.4 did. The S3 Gateway needs this for object keys containing "//". + */ + @Test + public void testUriComplianceLegacyWhenAmbiguousAllowed() throws Exception { + HttpServer2 srv = buildServer(true); + assertSame(UriCompliance.LEGACY, uriComplianceOf(srv)); + assertTrue(srv.getWebAppContext().getServletHandler() + .isDecodeAmbiguousURIs()); + } + + private static HttpServer2 buildServer(boolean allowAmbiguousUri) + throws Exception { + return new HttpServer2.Builder() + .setConf(new OzoneConfiguration()) + .setName("test") + .addEndpoint(URI.create("http://example.com/")) + .allowAmbiguousUri(allowAmbiguousUri) + .build(); + } + + private static UriCompliance uriComplianceOf(HttpServer2 srv) { + ServerConnector connector = srv.getListeners().get(0); + return connector.getConnectionFactory(HttpConnectionFactory.class) + .getHttpConfiguration().getUriCompliance(); + } } diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestPrometheusServletAuthorization.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestPrometheusServletAuthorization.java index ef2dc6884f65..e0ca689a23b0 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestPrometheusServletAuthorization.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/TestPrometheusServletAuthorization.java @@ -23,13 +23,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.io.StringWriter; import java.util.stream.Stream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/servletbridge/TestJavaxFilterBridge.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/servletbridge/TestJavaxFilterBridge.java new file mode 100644 index 000000000000..41d20c333c7f --- /dev/null +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/server/http/servletbridge/TestJavaxFilterBridge.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.server.http.servletbridge; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.security.Principal; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + +/** + * Unit tests for the javax->jakarta servlet filter bridge, covering the two + * behaviours the hadoop-auth filters rely on: passing an authenticated request + * downstream, and short-circuiting the chain when authentication is refused. + */ +class TestJavaxFilterBridge { + + private static final String AUTH_HEADER = "Authorization"; + + @Test + void authenticatedRequestIsPassedDownstreamWithPrincipal() throws Exception { + HttpServletRequest jakartaRequest = mock(HttpServletRequest.class); + HttpServletResponse jakartaResponse = mock(HttpServletResponse.class); + when(jakartaRequest.getHeader(AUTH_HEADER)).thenReturn("Negotiate token"); + + // A javax filter that "authenticates" by wrapping the request with a principal. + javax.servlet.Filter delegate = new AbstractJavaxFilter() { + @Override + public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, + javax.servlet.FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { + javax.servlet.http.HttpServletRequest httpReq = (javax.servlet.http.HttpServletRequest) req; + assertEquals("Negotiate token", httpReq.getHeader(AUTH_HEADER)); + javax.servlet.http.HttpServletRequestWrapper wrapped = + new javax.servlet.http.HttpServletRequestWrapper(httpReq) { + @Override + public String getRemoteUser() { + return "alice"; + } + + @Override + public Principal getUserPrincipal() { + return () -> "alice"; + } + + @Override + public String getAuthType() { + return "KERBEROS"; + } + }; + chain.doFilter(wrapped, resp); + } + }; + + AtomicReference downstream = new AtomicReference<>(); + jakarta.servlet.FilterChain jakartaChain = (req, resp) -> downstream.set((HttpServletRequest) req); + + new JavaxFilterBridge(delegate).doFilter(jakartaRequest, jakartaResponse, jakartaChain); + + HttpServletRequest seen = downstream.get(); + assertEquals("alice", seen.getRemoteUser(), "principal must be visible downstream"); + assertEquals("KERBEROS", seen.getAuthType()); + assertEquals("alice", seen.getUserPrincipal().getName()); + } + + @Test + void refusedRequestShortCircuitsAndWritesResponse() throws Exception { + HttpServletRequest jakartaRequest = mock(HttpServletRequest.class); + HttpServletResponse jakartaResponse = mock(HttpServletResponse.class); + when(jakartaRequest.getHeader(AUTH_HEADER)).thenReturn(null); + + // A javax filter that refuses the request without invoking the chain. + javax.servlet.Filter delegate = new AbstractJavaxFilter() { + @Override + public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, + javax.servlet.FilterChain chain) throws java.io.IOException { + javax.servlet.http.HttpServletResponse httpResp = (javax.servlet.http.HttpServletResponse) resp; + httpResp.setHeader("WWW-Authenticate", "Negotiate"); + httpResp.sendError(javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED); + } + }; + + AtomicReference downstream = new AtomicReference<>(); + jakarta.servlet.FilterChain jakartaChain = (req, resp) -> downstream.set((HttpServletRequest) req); + + new JavaxFilterBridge(delegate).doFilter(jakartaRequest, jakartaResponse, jakartaChain); + + assertNull(downstream.get(), "chain must not be invoked when auth is refused"); + verify(jakartaResponse).setHeader("WWW-Authenticate", "Negotiate"); + verify(jakartaResponse).sendError(HttpServletResponse.SC_UNAUTHORIZED); + } + + @Test + void cookiesRoundTripAcrossNamespaces() { + javax.servlet.http.Cookie javax = new javax.servlet.http.Cookie("hadoop.auth", "signed"); + javax.setPath("/"); + javax.setDomain("example.com"); + javax.setMaxAge(120); + javax.setSecure(true); + javax.setHttpOnly(true); + + jakarta.servlet.http.Cookie jakarta = ServletBridgeUtils.toJakarta(javax); + assertEquals("hadoop.auth", jakarta.getName()); + assertEquals("signed", jakarta.getValue()); + assertEquals("/", jakarta.getPath()); + assertEquals("example.com", jakarta.getDomain()); + assertEquals(120, jakarta.getMaxAge()); + assertTrue(jakarta.getSecure()); + assertTrue(jakarta.isHttpOnly()); + + javax.servlet.http.Cookie back = ServletBridgeUtils.toJavax(jakarta); + assertEquals("hadoop.auth", back.getName()); + assertEquals("signed", back.getValue()); + assertEquals("/", back.getPath()); + assertEquals("example.com", back.getDomain()); + assertEquals(120, back.getMaxAge()); + assertTrue(back.getSecure()); + assertTrue(back.isHttpOnly()); + assertFalse(back.getName().isEmpty()); + } + + /** Minimal javax filter with no-op lifecycle so tests only override doFilter. */ + private abstract static class AbstractJavaxFilter implements javax.servlet.Filter { + @Override + public void init(javax.servlet.FilterConfig filterConfig) { + } + + @Override + public void destroy() { + } + } +} diff --git a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/TestHttpServletUtils.java b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/TestHttpServletUtils.java index 46de47742f44..bb185ec70d7b 100644 --- a/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/TestHttpServletUtils.java +++ b/hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/utils/TestHttpServletUtils.java @@ -22,12 +22,12 @@ import static org.mockito.Mockito.when; import jakarta.annotation.Nullable; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.HttpHeaders; import java.io.PrintWriter; import java.io.StringWriter; import java.util.stream.Stream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.HttpHeaders; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; diff --git a/hadoop-hdds/framework/src/test/resources/webapps/static/.gitkeep b/hadoop-hdds/framework/src/test/resources/webapps/static/.gitkeep new file mode 100644 index 000000000000..09697dce6e11 --- /dev/null +++ b/hadoop-hdds/framework/src/test/resources/webapps/static/.gitkeep @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + diff --git a/hadoop-hdds/server-scm/pom.xml b/hadoop-hdds/server-scm/pom.xml index 5a8a779e4e25..1713b1c71cae 100644 --- a/hadoop-hdds/server-scm/pom.xml +++ b/hadoop-hdds/server-scm/pom.xml @@ -64,8 +64,8 @@ jakarta.annotation-api
- javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api org.apache.commons @@ -162,8 +162,8 @@ bcpkix-jdk18on - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp org.slf4j diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMDBCheckpointServlet.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMDBCheckpointServlet.java index 04cb600d8107..62e05811fc06 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMDBCheckpointServlet.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMDBCheckpointServlet.java @@ -17,8 +17,8 @@ package org.apache.hadoop.hdds.scm.server; +import jakarta.servlet.ServletException; import java.util.Collections; -import javax.servlet.ServletException; import org.apache.hadoop.hdds.utils.DBCheckpointServlet; import org.apache.hadoop.ozone.OzoneConsts; import org.slf4j.Logger; diff --git a/hadoop-ozone/cli-shell/src/main/java/org/apache/hadoop/ozone/shell/keys/ChecksumKeyHandler.java b/hadoop-ozone/cli-shell/src/main/java/org/apache/hadoop/ozone/shell/keys/ChecksumKeyHandler.java index c36c1af99102..989c6144e5d5 100644 --- a/hadoop-ozone/cli-shell/src/main/java/org/apache/hadoop/ozone/shell/keys/ChecksumKeyHandler.java +++ b/hadoop-ozone/cli-shell/src/main/java/org/apache/hadoop/ozone/shell/keys/ChecksumKeyHandler.java @@ -91,7 +91,7 @@ private class ChecksumInfo { name, dataSize, client.getObjectStore().getClientProxy()); this.algorithm = fileChecksum.getAlgorithmName(); - this.checksum = javax.xml.bind.DatatypeConverter.printHexBinary( + this.checksum = jakarta.xml.bind.DatatypeConverter.printHexBinary( fileChecksum.getBytes()); } } diff --git a/hadoop-ozone/cli-shell/src/test/java/org/apache/hadoop/ozone/shell/keys/TestChecksumKeyHandler.java b/hadoop-ozone/cli-shell/src/test/java/org/apache/hadoop/ozone/shell/keys/TestChecksumKeyHandler.java index 670d03a3b4b1..1bf8cdfb98c4 100644 --- a/hadoop-ozone/cli-shell/src/test/java/org/apache/hadoop/ozone/shell/keys/TestChecksumKeyHandler.java +++ b/hadoop-ozone/cli-shell/src/test/java/org/apache/hadoop/ozone/shell/keys/TestChecksumKeyHandler.java @@ -110,7 +110,7 @@ public void testChecksumKeyHandler() assertEquals(keySize, json.get("dataSize").asLong()); assertEquals("COMPOSITE-CRC32", json.get("algorithm").asText()); - String expectedChecksum = javax.xml.bind.DatatypeConverter.printHexBinary( + String expectedChecksum = jakarta.xml.bind.DatatypeConverter.printHexBinary( CrcUtil.intToBytes(Integer.valueOf(CHECKSUM))); assertEquals(expectedChecksum, json.get("checksum").asText()); } diff --git a/hadoop-ozone/dist/src/main/license/bin/LICENSE.txt b/hadoop-ozone/dist/src/main/license/bin/LICENSE.txt index ebbc3a5207d4..bbba13dba255 100644 --- a/hadoop-ozone/dist/src/main/license/bin/LICENSE.txt +++ b/hadoop-ozone/dist/src/main/license/bin/LICENSE.txt @@ -213,6 +213,7 @@ EDL 1.0 com.sun.activation:jakarta.activation jakarta.activation:jakarta.activation-api jakarta.xml.bind:jakarta.xml.bind-api + org.eclipse.angus:angus-activation org.locationtech.jts:jts-core @@ -221,11 +222,12 @@ EPL 2.0 com.github.jnr:jnr-posix jakarta.annotation:jakarta.annotation-api + jakarta.el:jakarta.el-api + jakarta.interceptor:jakarta.interceptor-api + jakarta.servlet:jakarta.servlet-api jakarta.ws.rs:jakarta.ws.rs-api org.aspectj:aspectjrt org.glassfish.hk2.external:aopalliance-repackaged - org.glassfish.hk2.external:jakarta.inject - org.glassfish.hk2.external:javax.inject org.glassfish.hk2:guice-bridge org.glassfish.hk2:hk2-api org.glassfish.hk2:hk2-locator @@ -253,8 +255,6 @@ CDDL 1.1 + GPLv2 with classpath exception com.sun.jersey:jersey-client com.sun.jersey:jersey-core javax.annotation:javax.annotation-api - javax.el:javax.el-api - javax.interceptor:javax.interceptor-api javax.servlet:javax.servlet-api javax.servlet.jsp:jsp-api javax.ws.rs:jsr311-api @@ -279,6 +279,7 @@ Apache License 2.0 com.fasterxml.jackson.datatype:jackson-datatype-jsr310 com.fasterxml.jackson.jaxrs:jackson-jaxrs-base com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider + com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations com.fasterxml.jackson.module:jackson-module-jaxb-annotations com.fasterxml.woodstox:woodstox-core com.github.ben-manes.caffeine:caffeine @@ -368,10 +369,10 @@ Apache License 2.0 io.prometheus:simpleclient_common io.prometheus:simpleclient_dropwizard joda-time:joda-time + jakarta.enterprise:jakarta.enterprise.cdi-api + jakarta.enterprise:jakarta.enterprise.lang-model jakarta.inject:jakarta.inject-api jakarta.validation:jakarta.validation-api - javax.enterprise:cdi-api - javax.inject:javax.inject log4j:apache-log4j-extras org.apache.avro:avro org.apache.commons:commons-compress @@ -447,15 +448,17 @@ Apache License 2.0 org.apache.ratis:ratis-tools org.apache.zookeeper:zookeeper org.apache.zookeeper:zookeeper-jute + org.eclipse.jetty:jetty-ee org.eclipse.jetty:jetty-http org.eclipse.jetty:jetty-io org.eclipse.jetty:jetty-security org.eclipse.jetty:jetty-server - org.eclipse.jetty:jetty-servlet + org.eclipse.jetty:jetty-session org.eclipse.jetty:jetty-util org.eclipse.jetty:jetty-util-ajax - org.eclipse.jetty:jetty-webapp org.eclipse.jetty:jetty-xml + org.eclipse.jetty.ee10:jetty-ee10-servlet + org.eclipse.jetty.ee10:jetty-ee10-webapp org.javassist:javassist org.jboss.weld.servlet:weld-servlet-shaded org.jetbrains:annotations diff --git a/hadoop-ozone/dist/src/main/license/jar-report.txt b/hadoop-ozone/dist/src/main/license/jar-report.txt index d06502f322fe..231ac7f2e62d 100644 --- a/hadoop-ozone/dist/src/main/license/jar-report.txt +++ b/hadoop-ozone/dist/src/main/license/jar-report.txt @@ -1,7 +1,10 @@ share/ozone/lib/aircompressor.jar +share/ozone/lib/aircompressor.jar +share/ozone/lib/angus-activation.jar share/ozone/lib/animal-sniffer-annotations.jar share/ozone/lib/annotations.jar share/ozone/lib/annotations.jar +share/ozone/lib/annotations.jar share/ozone/lib/aopalliance-repackaged.jar share/ozone/lib/aopalliance.jar share/ozone/lib/apache-log4j-extras.jar @@ -20,7 +23,6 @@ share/ozone/lib/bcprov-jdk18on.jar share/ozone/lib/bcutil-jdk18on.jar share/ozone/lib/bonecp.RELEASE.jar share/ozone/lib/caffeine.jar -share/ozone/lib/cdi-api.SP1.jar share/ozone/lib/commons-beanutils.jar share/ozone/lib/commons-cli.jar share/ozone/lib/commons-codec.jar @@ -103,20 +105,23 @@ share/ozone/lib/jackson-dataformat-xml.jar share/ozone/lib/jackson-datatype-jsr310.jar share/ozone/lib/jackson-jaxrs-base.jar share/ozone/lib/jackson-jaxrs-json-provider.jar +share/ozone/lib/jackson-module-jakarta-xmlbind-annotations.jar share/ozone/lib/jackson-module-jaxb-annotations.jar share/ozone/lib/jakarta.activation-api.jar share/ozone/lib/jakarta.activation.jar +share/ozone/lib/jakarta.activation.jar share/ozone/lib/jakarta.annotation-api.jar +share/ozone/lib/jakarta.el-api.jar +share/ozone/lib/jakarta.enterprise.cdi-api.jar +share/ozone/lib/jakarta.enterprise.lang-model.jar share/ozone/lib/jakarta.inject-api.jar -share/ozone/lib/jakarta.inject.jar +share/ozone/lib/jakarta.interceptor-api.jar +share/ozone/lib/jakarta.servlet-api.jar share/ozone/lib/jakarta.validation-api.jar share/ozone/lib/jakarta.ws.rs-api.jar share/ozone/lib/jakarta.xml.bind-api.jar share/ozone/lib/javassist-GA.jar share/ozone/lib/javax.annotation-api.jar -share/ozone/lib/javax.el-api.jar -share/ozone/lib/javax.inject.jar -share/ozone/lib/javax.interceptor-api.jar share/ozone/lib/javax.servlet-api.jar share/ozone/lib/jaxb-core.jar share/ozone/lib/jaxb-impl.jar @@ -135,14 +140,16 @@ share/ozone/lib/jersey-media-jaxb.jar share/ozone/lib/jersey-media-json-jackson.jar share/ozone/lib/jersey-server.jar share/ozone/lib/jettison.jar +share/ozone/lib/jetty-ee.jar +share/ozone/lib/jetty-ee10-servlet.jar +share/ozone/lib/jetty-ee10-webapp.jar share/ozone/lib/jetty-http.jar share/ozone/lib/jetty-io.jar share/ozone/lib/jetty-security.jar share/ozone/lib/jetty-server.jar -share/ozone/lib/jetty-servlet.jar +share/ozone/lib/jetty-session.jar share/ozone/lib/jetty-util-ajax.jar share/ozone/lib/jetty-util.jar -share/ozone/lib/jetty-webapp.jar share/ozone/lib/jetty-xml.jar share/ozone/lib/jffi-native.jar share/ozone/lib/jffi.jar @@ -165,9 +172,9 @@ share/ozone/lib/jsch.jar share/ozone/lib/jsp-api.jar share/ozone/lib/jspecify.jar share/ozone/lib/jsr311-api.jar +share/ozone/lib/jtokkit.jar share/ozone/lib/jts-core.jar share/ozone/lib/jul-to-slf4j.jar -share/ozone/lib/jtokkit.jar share/ozone/lib/kerb-core.jar share/ozone/lib/kerb-crypto.jar share/ozone/lib/kerb-util.jar @@ -211,6 +218,7 @@ share/ozone/lib/okhttp-jvm.jar share/ozone/lib/okhttp-sse.jar share/ozone/lib/okhttp.jar share/ozone/lib/okio-jvm.jar +share/ozone/lib/okio-jvm.jar share/ozone/lib/okio.jar share/ozone/lib/openai4j.jar share/ozone/lib/opentelemetry-api.jar @@ -267,7 +275,6 @@ share/ozone/lib/picocli-shell-jline3.jar share/ozone/lib/picocli.jar share/ozone/lib/proto-google-common-protos.jar share/ozone/lib/protobuf-java.jar -share/ozone/lib/protobuf-java.jar share/ozone/lib/ranger-audit-core.jar share/ozone/lib/ranger-authz-api.jar share/ozone/lib/ranger-common-utils.jar @@ -293,9 +300,9 @@ share/ozone/lib/reload4j.jar share/ozone/lib/retrofit.jar share/ozone/lib/rocksdb-checkpoint-differ.jar share/ozone/lib/rocksdbjni.jar -share/ozone/lib/simpleclient.jar share/ozone/lib/simpleclient_common.jar share/ozone/lib/simpleclient_dropwizard.jar +share/ozone/lib/simpleclient.jar share/ozone/lib/slf4j-api.jar share/ozone/lib/slf4j-reload4j.jar share/ozone/lib/snakeyaml.jar @@ -306,6 +313,7 @@ share/ozone/lib/spring-jdbc.jar share/ozone/lib/spring-tx.jar share/ozone/lib/sqlite-jdbc.jar share/ozone/lib/stax2-api.jar +share/ozone/lib/stax2-api.jar share/ozone/lib/txw2.jar share/ozone/lib/ugsync-util.jar share/ozone/lib/vault-java-driver.jar diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/secretgenerate.robot b/hadoop-ozone/dist/src/main/smoketest/s3/secretgenerate.robot index 475f140f913c..9f19c2a54bd0 100644 --- a/hadoop-ozone/dist/src/main/smoketest/s3/secretgenerate.robot +++ b/hadoop-ozone/dist/src/main/smoketest/s3/secretgenerate.robot @@ -42,7 +42,8 @@ S3 Gateway Secret Already Exists Pass Execution If '${SECURITY_ENABLED}' == 'false' Skipping this check as security is not enabled Execute ozone s3 getsecret ${OM_HA_PARAM} ${result} = Execute curl -X PUT --negotiate -u : -v ${ENDPOINT_URL}/secret - Should contain ${result} HTTP/1.1 400 S3_SECRET_ALREADY_EXISTS ignore_case=True + Should contain ${result} HTTP/1.1 400 ignore_case=True + Should contain ${result} S3_SECRET_ALREADY_EXISTS S3 Gateway Generate Secret By Username Pass Execution If '${SECURITY_ENABLED}' == 'false' Skipping this check as security is not enabled diff --git a/hadoop-ozone/httpfsgateway/pom.xml b/hadoop-ozone/httpfsgateway/pom.xml index a8562e52c149..dec9d352c609 100644 --- a/hadoop-ozone/httpfsgateway/pom.xml +++ b/hadoop-ozone/httpfsgateway/pom.xml @@ -54,11 +54,17 @@ com.fasterxml.jackson.core jackson-databind + + jakarta.servlet + jakarta.servlet-api + jakarta.ws.rs jakarta.ws.rs-api + javax.servlet javax.servlet-api @@ -125,8 +131,8 @@ runtime - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp runtime diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/CheckUploadContentTypeFilter.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/CheckUploadContentTypeFilter.java index 56e4ad38d4e0..f587895c4b1c 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/CheckUploadContentTypeFilter.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/CheckUploadContentTypeFilter.java @@ -17,20 +17,20 @@ package org.apache.ozone.fs.http.server; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.util.StringUtils; import org.apache.ozone.fs.http.HttpFSConstants; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSAuthenticationFilter.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSAuthenticationFilter.java index b71fbd123430..521e4123d152 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSAuthenticationFilter.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSAuthenticationFilter.java @@ -17,6 +17,12 @@ package org.apache.ozone.fs.http.server; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; @@ -25,10 +31,9 @@ import java.nio.file.Paths; import java.util.Map; import java.util.Properties; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdds.annotation.InterfaceAudience; +import org.apache.hadoop.hdds.server.http.servletbridge.JavaxFilterBridge; import org.apache.hadoop.security.authentication.server.AuthenticationFilter; import org.apache.hadoop.security.authentication.util.RandomSignerSecretProvider; import org.apache.hadoop.security.authentication.util.SignerSecretProvider; @@ -37,107 +42,145 @@ import org.apache.ozone.hdfs.web.WebHdfsConstants; /** - * Subclass of hadoop-auth AuthenticationFilter that obtains its - * configuration from HttpFSServer's server configuration. + * Jakarta servlet filter that authenticates HttpFS requests using hadoop-auth. + * + *

hadoop-auth's {@link DelegationTokenAuthenticationFilter} is + * {@code javax.servlet}-based, so the actual authentication is performed by the + * nested {@link HadoopAuthDelegate} (a javax filter that obtains its + * configuration from HttpFSServer's server configuration) run through + * {@link JavaxFilterBridge} so it can be registered on HttpFS's Jetty EE10 + * (jakarta) servlet chain. */ @InterfaceAudience.Private -public class HttpFSAuthenticationFilter - extends DelegationTokenAuthenticationFilter { +public class HttpFSAuthenticationFilter implements Filter { static final String CONF_PREFIX = "httpfs.authentication."; static final String HADOOP_HTTP_CONF_PREFIX = "hadoop.http.authentication."; - private static final String SIGNATURE_SECRET_FILE = SIGNATURE_SECRET - + ".file"; + private static final String SIGNATURE_SECRET_FILE = + AuthenticationFilter.SIGNATURE_SECRET + ".file"; + + private JavaxFilterBridge authFilterBridge; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + authFilterBridge = new JavaxFilterBridge(new HadoopAuthDelegate()); + authFilterBridge.init(filterConfig); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + authFilterBridge.doFilter(request, response, chain); + } + + @Override + public void destroy() { + if (authFilterBridge != null) { + authFilterBridge.destroy(); + } + } /** - * Returns the hadoop-auth configuration from HttpFSServer's configuration. - *

- * It returns all HttpFSServer's configuration properties prefixed with - * hadoop.http.authentication. The - * hadoop.http.authentication prefix is removed from the - * returned property names. - * - * @param configPrefix parameter not used. - * @param filterConfig parameter not used. - * - * @return hadoop-auth configuration read from HttpFSServer's configuration. + * Subclass of hadoop-auth AuthenticationFilter that obtains its + * configuration from HttpFSServer's server configuration. */ - @Override - protected Properties getConfiguration(String configPrefix, - FilterConfig filterConfig) throws ServletException { - Properties props = new Properties(); - Configuration conf = HttpFSServerWebApp.get().getConfig(); - - props.setProperty(AuthenticationFilter.COOKIE_PATH, "/"); - for (Map.Entry entry : conf) { - String name = entry.getKey(); - if (name.startsWith(HADOOP_HTTP_CONF_PREFIX)) { - name = name.substring(HADOOP_HTTP_CONF_PREFIX.length()); - props.setProperty(name, entry.getValue()); + private static final class HadoopAuthDelegate + extends DelegationTokenAuthenticationFilter { + + /** + * Returns the hadoop-auth configuration from HttpFSServer's configuration. + *

+ * It returns all HttpFSServer's configuration properties prefixed with + * hadoop.http.authentication. The + * hadoop.http.authentication prefix is removed from the + * returned property names. + * + * @param configPrefix parameter not used. + * @param filterConfig parameter not used. + * + * @return hadoop-auth configuration read from HttpFSServer's configuration. + */ + @Override + protected Properties getConfiguration(String configPrefix, + javax.servlet.FilterConfig filterConfig) + throws javax.servlet.ServletException { + Properties props = new Properties(); + Configuration conf = HttpFSServerWebApp.get().getConfig(); + + props.setProperty(AuthenticationFilter.COOKIE_PATH, "/"); + for (Map.Entry entry : conf) { + String name = entry.getKey(); + if (name.startsWith(HADOOP_HTTP_CONF_PREFIX)) { + name = name.substring(HADOOP_HTTP_CONF_PREFIX.length()); + props.setProperty(name, entry.getValue()); + } } - } - // Replace Hadoop Http Authentication Configs with HttpFS specific Configs - for (Map.Entry entry : conf) { - String name = entry.getKey(); - if (name.startsWith(CONF_PREFIX)) { - String value = conf.get(name); - name = name.substring(CONF_PREFIX.length()); - props.setProperty(name, value); + // Replace Hadoop Http Authentication Configs with HttpFS specific Configs + for (Map.Entry entry : conf) { + String name = entry.getKey(); + if (name.startsWith(CONF_PREFIX)) { + String value = conf.get(name); + name = name.substring(CONF_PREFIX.length()); + props.setProperty(name, value); + } } - } - String signatureSecretFile = props.getProperty(SIGNATURE_SECRET_FILE, null); - if (signatureSecretFile == null) { - throw new RuntimeException("Undefined property: " - + SIGNATURE_SECRET_FILE); - } + String signatureSecretFile = + props.getProperty(SIGNATURE_SECRET_FILE, null); + if (signatureSecretFile == null) { + throw new RuntimeException("Undefined property: " + + SIGNATURE_SECRET_FILE); + } - if (!isRandomSecret(filterConfig)) { - try (Reader reader = new InputStreamReader(Files.newInputStream( - Paths.get(signatureSecretFile)), StandardCharsets.UTF_8)) { - StringBuilder secret = new StringBuilder(); - int c = reader.read(); - while (c > -1) { - secret.append((char) c); - c = reader.read(); + if (!isRandomSecret(filterConfig)) { + try (Reader reader = new InputStreamReader(Files.newInputStream( + Paths.get(signatureSecretFile)), StandardCharsets.UTF_8)) { + StringBuilder secret = new StringBuilder(); + int c = reader.read(); + while (c > -1) { + secret.append((char) c); + c = reader.read(); + } + props.setProperty(AuthenticationFilter.SIGNATURE_SECRET, + secret.toString()); + } catch (IOException ex) { + throw new RuntimeException("Could not read HttpFS signature " + + "secret file: " + signatureSecretFile); } - props.setProperty(AuthenticationFilter.SIGNATURE_SECRET, - secret.toString()); - } catch (IOException ex) { - throw new RuntimeException("Could not read HttpFS signature " - + "secret file: " + signatureSecretFile); } + setAuthHandlerClass(props); + String dtkind = WebHdfsConstants.WEBHDFS_TOKEN_KIND.toString(); + if (conf.getBoolean(HttpFSServerWebServer.SSL_ENABLED_KEY, false)) { + dtkind = WebHdfsConstants.SWEBHDFS_TOKEN_KIND.toString(); + } + props.setProperty(KerberosDelegationTokenAuthenticationHandler.TOKEN_KIND, + dtkind); + return props; } - setAuthHandlerClass(props); - String dtkind = WebHdfsConstants.WEBHDFS_TOKEN_KIND.toString(); - if (conf.getBoolean(HttpFSServerWebServer.SSL_ENABLED_KEY, false)) { - dtkind = WebHdfsConstants.SWEBHDFS_TOKEN_KIND.toString(); - } - props.setProperty(KerberosDelegationTokenAuthenticationHandler.TOKEN_KIND, - dtkind); - return props; - } - @Override - protected Configuration getProxyuserConfiguration(FilterConfig filterConfig) { - Map proxyuserConf = HttpFSServerWebApp.get().getConfig(). - getValByRegex("httpfs\\.proxyuser\\."); - Configuration conf = new Configuration(false); - for (Map.Entry entry : proxyuserConf.entrySet()) { - conf.set(entry.getKey().substring("httpfs.".length()), entry.getValue()); + @Override + protected Configuration getProxyuserConfiguration( + javax.servlet.FilterConfig filterConfig) { + Map proxyuserConf = HttpFSServerWebApp.get().getConfig(). + getValByRegex("httpfs\\.proxyuser\\."); + Configuration conf = new Configuration(false); + for (Map.Entry entry : proxyuserConf.entrySet()) { + conf.set(entry.getKey().substring("httpfs.".length()), + entry.getValue()); + } + return conf; } - return conf; - } - private boolean isRandomSecret(FilterConfig filterConfig) { - SignerSecretProvider secretProvider = (SignerSecretProvider) filterConfig - .getServletContext().getAttribute(SIGNER_SECRET_PROVIDER_ATTRIBUTE); - if (secretProvider == null) { - return false; + private boolean isRandomSecret(javax.servlet.FilterConfig filterConfig) { + SignerSecretProvider secretProvider = (SignerSecretProvider) filterConfig + .getServletContext().getAttribute(SIGNER_SECRET_PROVIDER_ATTRIBUTE); + if (secretProvider == null) { + return false; + } + return secretProvider.getClass() == RandomSignerSecretProvider.class; } - return secretProvider.getClass() == RandomSignerSecretProvider.class; } } diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSExceptionProvider.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSExceptionProvider.java index 05608f77266b..610803ce1b05 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSExceptionProvider.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSExceptionProvider.java @@ -17,10 +17,10 @@ package org.apache.ozone.fs.http.server; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import java.io.FileNotFoundException; import java.io.IOException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.hdds.scm.container.ContainerException; import org.apache.ozone.lib.service.FileSystemAccessException; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSServer.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSServer.java index 4c2974deec5d..3dd63b1a5006 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSServer.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/fs/http/server/HttpFSServer.java @@ -17,6 +17,21 @@ package org.apache.ozone.fs.http.server; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriInfo; import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -26,21 +41,6 @@ import java.util.EnumSet; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.XAttrCodec; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/FileSystemReleaseFilter.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/FileSystemReleaseFilter.java index 483430414115..ee83fc44d889 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/FileSystemReleaseFilter.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/FileSystemReleaseFilter.java @@ -17,13 +17,13 @@ package org.apache.ozone.lib.servlet; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.ozone.lib.service.FileSystemAccess; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/HostnameFilter.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/HostnameFilter.java index 64daca517e2d..54251dee1c8a 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/HostnameFilter.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/HostnameFilter.java @@ -17,15 +17,15 @@ package org.apache.ozone.lib.servlet; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/MDCFilter.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/MDCFilter.java index 374bcebd3aad..4fadafced5c7 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/MDCFilter.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/MDCFilter.java @@ -17,15 +17,15 @@ package org.apache.ozone.lib.servlet; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.security.Principal; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.slf4j.MDC; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/ServerWebApp.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/ServerWebApp.java index 7d59b42e0b33..d92b64a2005c 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/ServerWebApp.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/servlet/ServerWebApp.java @@ -17,12 +17,12 @@ package org.apache.ozone.lib.servlet; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.text.MessageFormat; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.ozone.lib.server.Server; import org.apache.ozone.lib.server.ServerException; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ExceptionProvider.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ExceptionProvider.java index 8b889401b440..c0e28f556eaa 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ExceptionProvider.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ExceptionProvider.java @@ -17,10 +17,13 @@ package org.apache.ozone.lib.wsrs; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; import org.apache.hadoop.hdds.annotation.InterfaceAudience; -import org.apache.hadoop.util.HttpExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +39,16 @@ public class ExceptionProvider implements ExceptionMapper { protected Response createResponse(Response.Status status, Throwable throwable) { - return HttpExceptionUtils.createJerseyExceptionResponse(status, throwable); + // Mirror hadoop-auth's HttpExceptionUtils JSON error contract so WebHDFS + // clients can reconstruct the remote exception. hadoop's helper returns a + // javax.ws.rs Response, so build the jakarta.ws.rs equivalent directly. + Map error = new LinkedHashMap<>(); + error.put("message", getOneLineMessage(throwable)); + error.put("exception", throwable.getClass().getSimpleName()); + error.put("javaClassName", throwable.getClass().getName()); + Map json = Collections.singletonMap("RemoteException", error); + return Response.status(status).type(MediaType.APPLICATION_JSON) + .entity(json).build(); } protected String getOneLineMessage(Throwable throwable) { diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/InputStreamEntity.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/InputStreamEntity.java index 2dbed7604cb5..c560910c613e 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/InputStreamEntity.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/InputStreamEntity.java @@ -17,10 +17,10 @@ package org.apache.ozone.lib.wsrs; +import jakarta.ws.rs.core.StreamingOutput; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import javax.ws.rs.core.StreamingOutput; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.io.IOUtils; import org.apache.ozone.fs.http.server.FSOperations; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/JSONMapProvider.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/JSONMapProvider.java index 232993effe60..af89b735015e 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/JSONMapProvider.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/JSONMapProvider.java @@ -19,6 +19,12 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -27,12 +33,6 @@ import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.Map; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.http.JettyUtils; diff --git a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ParametersProvider.java b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ParametersProvider.java index f3fea7816436..d573b03993f1 100644 --- a/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ParametersProvider.java +++ b/hadoop-ozone/httpfsgateway/src/main/java/org/apache/ozone/lib/wsrs/ParametersProvider.java @@ -17,12 +17,12 @@ package org.apache.ozone.lib.wsrs; +import jakarta.servlet.http.HttpServletRequest; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; import org.apache.hadoop.hdds.annotation.InterfaceAudience; import org.apache.hadoop.util.StringUtils; diff --git a/hadoop-ozone/httpfsgateway/src/main/resources/webapps/webhdfs/WEB-INF/web.xml b/hadoop-ozone/httpfsgateway/src/main/resources/webapps/webhdfs/WEB-INF/web.xml index 9fa17b3e984d..9ae7279e512c 100644 --- a/hadoop-ozone/httpfsgateway/src/main/resources/webapps/webhdfs/WEB-INF/web.xml +++ b/hadoop-ozone/httpfsgateway/src/main/resources/webapps/webhdfs/WEB-INF/web.xml @@ -12,7 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - + org.apache.ozone.fs.http.server.HttpFSServerWebApp diff --git a/hadoop-ozone/httpfsgateway/src/main/webapp/WEB-INF/web.xml b/hadoop-ozone/httpfsgateway/src/main/webapp/WEB-INF/web.xml index 61c99c43bcb0..bdd303203539 100644 --- a/hadoop-ozone/httpfsgateway/src/main/webapp/WEB-INF/web.xml +++ b/hadoop-ozone/httpfsgateway/src/main/webapp/WEB-INF/web.xml @@ -12,7 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - + org.apache.ozone.fs.http.server.HttpFSServerWebApp diff --git a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconContainerEndpoint.java b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconContainerEndpoint.java index b66e20628f04..806ee341132e 100644 --- a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconContainerEndpoint.java +++ b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconContainerEndpoint.java @@ -22,13 +22,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.hdds.utils.IOUtils; diff --git a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconInsightsForDeletedDirectories.java b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconInsightsForDeletedDirectories.java index fc83693788ee..3153ebba5262 100644 --- a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconInsightsForDeletedDirectories.java +++ b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconInsightsForDeletedDirectories.java @@ -29,6 +29,7 @@ import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.Mockito.mock; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -37,7 +38,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicLong; -import javax.ws.rs.core.Response; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; diff --git a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconQuasiClosedContainerEndpoint.java b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconQuasiClosedContainerEndpoint.java index c70151b99466..aecb57b3daf1 100644 --- a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconQuasiClosedContainerEndpoint.java +++ b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconQuasiClosedContainerEndpoint.java @@ -21,11 +21,11 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.RatisReplicationConfig; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; diff --git a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerFSO.java b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerFSO.java index bac55b7ef3c3..59a41e5a0870 100644 --- a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerFSO.java +++ b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestReconWithOzoneManagerFSO.java @@ -22,10 +22,10 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; +import jakarta.ws.rs.core.Response; import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; diff --git a/hadoop-ozone/integration-test-s3/pom.xml b/hadoop-ozone/integration-test-s3/pom.xml index ae110676ccf0..f94b4781dca2 100644 --- a/hadoop-ozone/integration-test-s3/pom.xml +++ b/hadoop-ozone/integration-test-s3/pom.xml @@ -64,13 +64,13 @@ test - jakarta.xml.bind - jakarta.xml.bind-api + jakarta.servlet + jakarta.servlet-api test - javax.servlet - javax.servlet-api + jakarta.xml.bind + jakarta.xml.bind-api test @@ -166,7 +166,7 @@ org.eclipse.jetty - jetty-proxy + jetty-http test @@ -176,12 +176,17 @@ org.eclipse.jetty - jetty-servlet + jetty-util test - org.eclipse.jetty - jetty-util + org.eclipse.jetty.ee10 + jetty-ee10-proxy + test + + + org.eclipse.jetty.ee10 + jetty-ee10-servlet test diff --git a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServer.java b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServer.java index d43e9f566bc2..981aaf20cf68 100644 --- a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServer.java +++ b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServer.java @@ -18,19 +18,23 @@ package org.apache.hadoop.ozone.s3; import com.google.common.net.HttpHeaders; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.proxy.ProxyServlet; +import org.eclipse.jetty.ee10.proxy.ProxyServlet; +import org.eclipse.jetty.ee10.servlet.ServletContextHandler; +import org.eclipse.jetty.ee10.servlet.ServletHolder; +import org.eclipse.jetty.http.UriCompliance; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.server.ServerConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,9 +61,19 @@ public ProxyServer(List s3gEndpoints, String host, int proxyPort, this.host = host; this.port = proxyPort; - server = new Server(proxyPort); + // Match the S3 Gateway's lenient URI handling so that object keys + // containing "//" or percent-encoded characters are forwarded rather than + // rejected with 400 by Jetty 12's default (strict) URI compliance. + HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.setUriCompliance(UriCompliance.LEGACY); + server = new Server(); + ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig)); + connector.setPort(proxyPort); + server.addConnector(connector); + ServletContextHandler context = new ServletContextHandler(); context.setContextPath("/"); + context.getServletHandler().setDecodeAmbiguousURIs(true); ProxyHandler proxyHandler = new ProxyHandler(); ServletHolder proxyHolder = new ServletHolder(proxyHandler); @@ -180,7 +194,7 @@ public Enumeration getHeaderNames() { @Override protected void onProxyResponseFailure(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, - org.eclipse.jetty.client.api.Response serverResponse, + org.eclipse.jetty.client.Response serverResponse, Throwable failure) { LOG.error("=== Proxy Response Failure==="); LOG.error("Client request: {} {}", clientRequest.getMethod(), clientRequest.getRequestURL()); diff --git a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServerIntegrationTest.java b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServerIntegrationTest.java index 1e5fcacf6429..97f0f4a07b5c 100644 --- a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServerIntegrationTest.java +++ b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/ProxyServerIntegrationTest.java @@ -20,6 +20,9 @@ import static org.apache.ozone.test.GenericTestUtils.PortAllocator.localhostWithFreePort; import static org.assertj.core.api.Assertions.assertThat; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; @@ -29,13 +32,10 @@ import java.util.List; import java.util.Scanner; import java.util.concurrent.TimeoutException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.ozone.test.GenericTestUtils; +import org.eclipse.jetty.ee10.servlet.ServletContextHandler; +import org.eclipse.jetty.ee10.servlet.ServletHolder; import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java index 615c3bc8083b..ccb40ae47889 100644 --- a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java +++ b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java @@ -92,6 +92,7 @@ import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import com.amazonaws.services.s3.transfer.model.UploadResult; +import jakarta.xml.bind.DatatypeConverter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -121,7 +122,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.hadoop.hdds.client.OzoneQuota; diff --git a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java index f56676d37f61..7dda217385ae 100644 --- a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java +++ b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java @@ -34,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static software.amazon.awssdk.core.sync.RequestBody.fromString; +import jakarta.xml.bind.DatatypeConverter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -60,7 +61,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.hadoop.hdds.client.ReplicationConfig; diff --git a/hadoop-ozone/integration-test/pom.xml b/hadoop-ozone/integration-test/pom.xml index 0e67eeb811ba..d0ec77cce772 100644 --- a/hadoop-ozone/integration-test/pom.xml +++ b/hadoop-ozone/integration-test/pom.xml @@ -82,13 +82,13 @@ test - jakarta.xml.bind - jakarta.xml.bind-api + jakarta.servlet + jakarta.servlet-api test - javax.servlet - javax.servlet-api + jakarta.xml.bind + jakarta.xml.bind-api test @@ -188,45 +188,6 @@ hadoop-hdfs-client test - - org.apache.hadoop - hadoop-kms - test - - - ch.qos.reload4j - reload4j - - - log4j - log4j - - - org.slf4j - * - - - - - org.apache.hadoop - hadoop-kms - test-jar - test - - - ch.qos.reload4j - reload4j - - - log4j - log4j - - - org.slf4j - * - - - org.apache.hadoop hadoop-mapreduce-client-core diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSWithObjectStoreCreate.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSWithObjectStoreCreate.java index 1bd4b1b28af2..760cfa7551e9 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSWithObjectStoreCreate.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSWithObjectStoreCreate.java @@ -29,6 +29,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.xml.bind.DatatypeConverter; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -41,7 +42,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.hadoop.fs.FSDataInputStream; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestSCMDbCheckpointServlet.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestSCMDbCheckpointServlet.java index 7054e350682f..7c32cf7215c8 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestSCMDbCheckpointServlet.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/hdds/scm/TestSCMDbCheckpointServlet.java @@ -34,6 +34,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -46,13 +53,6 @@ import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMMetrics; import org.apache.hadoop.hdds.scm.server.SCMDBCheckpointServlet; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestCpuMetrics.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestCpuMetrics.java index 79864db35eb0..ff0597d98e15 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestCpuMetrics.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestCpuMetrics.java @@ -42,7 +42,10 @@ public abstract class TestCpuMetrics implements NonHATests.TestCase { @Test public void testCpuMetrics() throws IOException { // given - String scmHttpServerUrl = "http://localhost:" + + // Use the IPv4 loopback literal rather than "localhost": the SCM HTTP + // server binds to the IPv4 wildcard 0.0.0.0, but on macOS "localhost" + // resolves to IPv6 ::1 first, which the server does not accept. + String scmHttpServerUrl = "http://127.0.0.1:" + HddsUtils.getPortNumberFromConfigKeys(cluster().getConf(), OZONE_SCM_HTTP_ADDRESS_KEY).getAsInt(); Request prometheusMetricsRequest = new Request.Builder() diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java index 00a419ff0c0f..5c3063dcda48 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/OzoneRpcClientTests.java @@ -71,6 +71,7 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.slf4j.event.Level.DEBUG; +import jakarta.xml.bind.DatatypeConverter; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -105,7 +106,6 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneAtRestEncryption.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneAtRestEncryption.java index a94eb75739fa..8ab711eef624 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneAtRestEncryption.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneAtRestEncryption.java @@ -43,6 +43,7 @@ import static org.mockito.Mockito.verify; import com.google.common.cache.Cache; +import jakarta.xml.bind.DatatypeConverter; import java.io.File; import java.io.IOException; import java.net.URI; @@ -59,13 +60,10 @@ import java.util.Random; import java.util.TreeMap; import java.util.UUID; -import java.util.function.BooleanSupplier; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.lang3.RandomUtils; +import org.apache.hadoop.crypto.key.JavaKeyStoreProvider; import org.apache.hadoop.crypto.key.KeyProvider; -import org.apache.hadoop.crypto.key.kms.KMSClientProvider; -import org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider; -import org.apache.hadoop.crypto.key.kms.server.MiniKMS; +import org.apache.hadoop.crypto.key.KeyProviderFactory; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; @@ -77,7 +75,6 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.conf.StorageUnit; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; -import org.apache.hadoop.hdds.scm.HddsWhiteboxTestUtils; import org.apache.hadoop.hdds.scm.container.ContainerInfo; import org.apache.hadoop.hdds.scm.protocolPB.StorageContainerLocationProtocolClientSideTranslatorPB; import org.apache.hadoop.hdds.scm.storage.MultipartInputStream; @@ -99,7 +96,6 @@ import org.apache.hadoop.ozone.client.io.OzoneInputStream; import org.apache.hadoop.ozone.client.io.OzoneOutputStream; import org.apache.hadoop.ozone.container.common.interfaces.Container; -import org.apache.hadoop.ozone.om.OMConfigKeys; import org.apache.hadoop.ozone.om.OMMetadataManager; import org.apache.hadoop.ozone.om.OzoneManager; import org.apache.hadoop.ozone.om.exceptions.OMException; @@ -123,7 +119,6 @@ class TestOzoneAtRestEncryption { private static MiniOzoneCluster cluster = null; - private static MiniKMS miniKMS; private static OzoneClient ozClient = null; private static ObjectStore store = null; private static OzoneManager ozoneManager; @@ -147,14 +142,15 @@ class TestOzoneAtRestEncryption { static void init() throws Exception { File kmsDir = new File(testDir, UUID.randomUUID().toString()); assertTrue(kmsDir.mkdirs()); - MiniKMS.Builder miniKMSBuilder = new MiniKMS.Builder(); - miniKMS = miniKMSBuilder.setKmsConfDir(kmsDir).build(); - miniKMS.start(); OzoneManager.setTestSecureOmFlag(true); conf = new OzoneConfiguration(); conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH, - getKeyProviderURI(miniKMS)); + getKeyProviderURI(kmsDir)); + // Seed the encryption key into the jceks store before the OM starts, so + // it is present when the OM constructs its KeyProvider at startup. + createKey(TEST_KEY, + KeyProviderFactory.get(new URI(getKeyProviderURI(kmsDir)), conf), conf); conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, testDir.getAbsolutePath()); conf.setBoolean(HddsConfigKeys.HDDS_BLOCK_TOKEN_ENABLED, true); conf.set(OZONE_METADATA_DIRS, testDir.getAbsolutePath()); @@ -180,8 +176,6 @@ static void init() throws Exception { ozoneManager = cluster.getOzoneManager(); ozoneManager.setMinMultipartUploadPartSize(MPU_PART_MIN_SIZE); - // create test key - createKey(TEST_KEY, cluster.getOzoneManager().getKmsProvider(), conf); eTagProvider = MessageDigest.getInstance(OzoneConsts.MD5_HASH); final String rootPath = String.format("%s://%s/", @@ -203,10 +197,6 @@ static void shutdown() throws IOException { if (cluster != null) { cluster.shutdown(); } - - if (miniKMS != null) { - miniKMS.stop(); - } } static void reInitClient() throws IOException { @@ -214,34 +204,6 @@ static void reInitClient() throws IOException { store = ozClient.getObjectStore(); } - @Test - public void testWarmupEDEKCacheOnStartup() throws Exception { - - createVolumeAndBucket("vol", "buck", BucketLayout.OBJECT_STORE); - - @SuppressWarnings("unchecked") KMSClientProvider spy = getKMSClientProvider(); - assertTrue(spy.getEncKeyQueueSize(TEST_KEY) > 0); - - conf.setInt(OMConfigKeys.OZONE_OM_EDEKCACHELOADER_INITIAL_DELAY_MS_KEY, 0); - cluster.restartOzoneManager(); - - GenericTestUtils.waitFor(new BooleanSupplier() { - @Override - public boolean getAsBoolean() { - final KMSClientProvider kspy = getKMSClientProvider(); - return kspy.getEncKeyQueueSize(TEST_KEY) > 0; - } - }, 1000, 60000); - } - - private KMSClientProvider getKMSClientProvider() { - LoadBalancingKMSClientProvider lbkmscp = - (LoadBalancingKMSClientProvider) HddsWhiteboxTestUtils.getInternalState( - cluster.getOzoneManager().getKmsProvider(), "extension"); - assert lbkmscp.getProviders().length == 1; - return lbkmscp.getProviders()[0]; - } - @ParameterizedTest @EnumSource void testPutKeyWithEncryption(BucketLayout bucketLayout) throws Exception { @@ -503,9 +465,9 @@ static boolean verifyRatisReplication(String volumeName, String bucketName, return true; } - private static String getKeyProviderURI(MiniKMS kms) { - return KMSClientProvider.SCHEME_NAME + "://" + - kms.getKMSUrl().toExternalForm().replace("://", "@"); + private static String getKeyProviderURI(File dir) { + File jks = new File(dir, "kms.jks"); + return JavaKeyStoreProvider.SCHEME_NAME + "://file" + jks.toURI().getPath(); } private static void createKey(String keyName, KeyProvider diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java index c251d2f00984..afe28c306849 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java @@ -32,6 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.xml.bind.DatatypeConverter; import java.io.IOException; import java.io.UncheckedIOException; import java.security.MessageDigest; @@ -47,7 +48,6 @@ import java.util.TreeMap; import java.util.UUID; import java.util.stream.Collectors; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomUtils; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServlet.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServlet.java index 34f8a328ece8..b67e38a1ea30 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServlet.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServlet.java @@ -62,6 +62,12 @@ import static org.mockito.Mockito.when; import com.google.common.collect.Sets; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; @@ -91,12 +97,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.ServletContext; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationFactor; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java index 8bf1fbfd8ad1..64e0496278b9 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java @@ -58,6 +58,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; @@ -88,12 +94,6 @@ import java.util.function.BiFunction; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationFactor; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java index 7904666b9515..6e068ff26658 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestObjectStoreWithLegacyFS.java @@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.xml.bind.DatatypeConverter; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -29,7 +30,6 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.hadoop.hdds.client.RatisReplicationConfig; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerRestInterface.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerRestInterface.java index 1c238f4ba393..f08f780ad58f 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerRestInterface.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOzoneManagerRestInterface.java @@ -30,7 +30,6 @@ import java.util.Map; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; -import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.ozone.MiniOzoneCluster; import org.apache.hadoop.ozone.OmUtils; import org.apache.hadoop.ozone.om.helpers.ServiceInfo; @@ -65,8 +64,11 @@ public void testGetServiceList() throws Exception { OzoneManagerHttpServer server = cluster.getOzoneManager().getHttpServer(); HttpClient client = HttpClients.createDefault(); - String connectionUri = "http://" + - NetUtils.getHostPortString(server.getHttpAddress()); + // Connect to the loopback address rather than the wildcard bind address + // returned by getHttpAddress(): 0.0.0.0 is not a connectable target on + // macOS (connection refused), while 127.0.0.1 reaches the server on all + // platforms. + String connectionUri = "http://127.0.0.1:" + server.getHttpAddress().getPort(); HttpGet httpGet = new HttpGet(connectionUri + "/serviceList"); HttpResponse response = client.execute(httpGet); String serviceListJson = EntityUtils.toString(response.getEntity()); diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOMDBCheckpointUtils.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOMDBCheckpointUtils.java index cda781d05709..9c6b7d67cc6e 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOMDBCheckpointUtils.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/snapshot/TestOMDBCheckpointUtils.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -31,7 +32,6 @@ import java.util.Random; import java.util.Set; import java.util.concurrent.TimeoutException; -import javax.servlet.http.HttpServletRequest; import org.apache.ozone.test.GenericTestUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java index 00b070e29d21..a781d824a573 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/shell/TestOzoneShellHA.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.io.PrintStream; import java.io.UnsupportedEncodingException; +import java.net.URI; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -59,9 +60,9 @@ import java.util.UUID; import java.util.concurrent.TimeoutException; import org.apache.commons.io.FileUtils; +import org.apache.hadoop.crypto.key.JavaKeyStoreProvider; import org.apache.hadoop.crypto.key.KeyProvider; -import org.apache.hadoop.crypto.key.kms.KMSClientProvider; -import org.apache.hadoop.crypto.key.kms.server.MiniKMS; +import org.apache.hadoop.crypto.key.KeyProviderFactory; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileChecksum; @@ -103,7 +104,6 @@ import org.apache.hadoop.util.ToolRunner; import org.apache.ozone.test.GenericTestUtils; import org.apache.ratis.server.RaftServerConfigKeys; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -147,10 +147,10 @@ public class TestOzoneShellHA { private static java.nio.file.Path path; @TempDir private static File kmsDir; + private static final String ENCRYPTION_KEY_NAME = "shell-test-enckey"; private static File testFile; private static String testFilePathString; private MiniOzoneHAClusterImpl cluster; - private static MiniKMS miniKMS; private OzoneClient client; private OzoneShell ozoneShell = null; private OzoneAdmin ozoneAdminShell = null; @@ -174,14 +174,10 @@ public void init() throws Exception { } @BeforeAll - static void startKMS() throws Exception { + static void initTestFile() throws Exception { testFilePathString = path + OZONE_URI_DELIMITER + "testFile"; testFile = new File(testFilePathString); FileUtils.touch(testFile); - - MiniKMS.Builder miniKMSBuilder = new MiniKMS.Builder(); - miniKMS = miniKMSBuilder.setKmsConfDir(kmsDir).build(); - miniKMS.start(); } static MiniOzoneHAClusterImpl startCluster(boolean followerReadEnabled) throws Exception { @@ -194,7 +190,7 @@ static MiniOzoneHAClusterImpl startCluster(boolean followerReadEnabled) throws E conf.setBoolean("ozone.client.hbase.enhancements.allowed", true); conf.setBoolean(OZONE_FS_HSYNC_ENABLED, true); conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH, - getKeyProviderURI(miniKMS)); + getKeyProviderURI()); conf.setInt(OMConfigKeys.OZONE_DIR_DELETING_SERVICE_INTERVAL, 10); conf.setBoolean(OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS, true); conf.setInt(ScmConfigKeys.OZONE_SCM_CONTAINER_LIST_MAX_COUNT, 1); @@ -210,6 +206,10 @@ static MiniOzoneHAClusterImpl startCluster(boolean followerReadEnabled) throws E omRatisConfig.setReadOption(option.name()); conf.setFromObject(omRatisConfig); + // Seed the encryption key into the jceks store before the OMs start, so + // every OM instance loads it when it constructs its KeyProvider. + seedEncryptionKey(conf); + MiniOzoneHAClusterImpl.Builder builder = MiniOzoneCluster.newHABuilder(conf); builder.setOMServiceId(omServiceId) .setNumOfOzoneManagers(numOfOMs) @@ -222,13 +222,6 @@ public void shutdown() { IOUtils.closeQuietly(client, cluster); } - @AfterAll - void stopKMS() { - if (miniKMS != null) { - miniKMS.stop(); - } - } - @BeforeEach public void setup() throws UnsupportedEncodingException { ozoneShell = new OzoneShell(); @@ -1833,19 +1826,11 @@ public void testSetEncryptionKey() throws Exception { client.getObjectStore().getVolume(volumeName); OzoneBucket bucket = volume.getBucket("bucket0"); assertNull(bucket.getEncryptionKeyName()); - String newEncKey = uniqueObjectName("enckey"); - - KeyProvider provider = cluster.getOzoneManager().getKmsProvider(); - KeyProvider.Options options = KeyProvider.options(cluster.getConf()); - options.setDescription(newEncKey); - options.setBitLength(128); - provider.createKey(newEncKey, options); - provider.flush(); args = new String[]{"bucket", "set-encryption-key", bucketPath, "-k", - newEncKey}; + ENCRYPTION_KEY_NAME}; execute(ozoneShell, args); - assertEquals(newEncKey, volume.getBucket("bucket0").getEncryptionKeyName()); + assertEquals(ENCRYPTION_KEY_NAME, volume.getBucket("bucket0").getEncryptionKeyName()); } @Test @@ -2577,12 +2562,19 @@ public void testKeyDeleteLegacyWithEnableFileSystemPath() throws IOException { execute(ozoneShell, args); } - private static String getKeyProviderURI(MiniKMS kms) { - if (kms == null) { - return ""; + private static String getKeyProviderURI() { + File jks = new File(kmsDir, "kms.jks"); + return JavaKeyStoreProvider.SCHEME_NAME + "://file" + jks.toURI().getPath(); + } + + private static void seedEncryptionKey(OzoneConfiguration conf) throws Exception { + KeyProvider provider = KeyProviderFactory.get(new URI(getKeyProviderURI()), conf); + if (provider.getMetadata(ENCRYPTION_KEY_NAME) == null) { + KeyProvider.Options options = KeyProvider.options(conf); + options.setBitLength(128); + provider.createKey(ENCRYPTION_KEY_NAME, options); + provider.flush(); } - return KMSClientProvider.SCHEME_NAME + "://" + - kms.getKMSUrl().toExternalForm().replace("://", "@"); } protected MiniOzoneHAClusterImpl getCluster() { diff --git a/hadoop-ozone/integration-test/src/test/resources/webapps/static/.gitkeep b/hadoop-ozone/integration-test/src/test/resources/webapps/static/.gitkeep new file mode 100644 index 000000000000..ae1e83eeb3d4 --- /dev/null +++ b/hadoop-ozone/integration-test/src/test/resources/webapps/static/.gitkeep @@ -0,0 +1,14 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/hadoop-ozone/ozone-manager/pom.xml b/hadoop-ozone/ozone-manager/pom.xml index 9f8a89403515..ac5cbe73f7dc 100644 --- a/hadoop-ozone/ozone-manager/pom.xml +++ b/hadoop-ozone/ozone-manager/pom.xml @@ -93,8 +93,8 @@ jakarta.annotation-api - javax.servlet - javax.servlet-api + jakarta.servlet + jakarta.servlet-api org.apache.commons @@ -210,8 +210,8 @@ aspectjrt - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp org.reflections diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java index 6d4360199af1..fa914e8f3393 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServlet.java @@ -36,6 +36,9 @@ import com.google.common.annotations.VisibleForTesting; import jakarta.annotation.Nonnull; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -52,9 +55,6 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.io.FileUtils; diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java index bcbf1cb34482..f140beb7b39a 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java @@ -30,6 +30,9 @@ import static org.apache.hadoop.ozone.om.snapshot.OmSnapshotUtils.DATA_SUFFIX; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; @@ -55,9 +58,6 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.io.FileUtils; diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ServiceListJSONServlet.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ServiceListJSONServlet.java index 38602848f12b..b077204cf620 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ServiceListJSONServlet.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ServiceListJSONServlet.java @@ -19,12 +19,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.ozone.OzoneConsts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SnapshotListJSONServlet.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SnapshotListJSONServlet.java index 4184ccf1f094..c089835c89ff 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SnapshotListJSONServlet.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/SnapshotListJSONServlet.java @@ -20,12 +20,12 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.om.helpers.SnapshotInfo; diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/OMDBCheckpointUtils.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/OMDBCheckpointUtils.java index 558ff596cbcc..112368adffd7 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/OMDBCheckpointUtils.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/snapshot/OMDBCheckpointUtils.java @@ -21,11 +21,11 @@ import static org.apache.hadoop.ozone.OzoneConsts.OZONE_DB_CHECKPOINT_INCLUDE_SNAPSHOT_DATA; import static org.apache.hadoop.ozone.OzoneConsts.ROCKSDB_SST_SUFFIX; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collection; -import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.IOCase; import org.apache.commons.io.file.Counters; import org.apache.commons.io.file.CountingPathVisitor; diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMDBCheckpointServletInodeBasedXferNonLeader.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMDBCheckpointServletInodeBasedXferNonLeader.java index e41012bde461..40d55d09f361 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMDBCheckpointServletInodeBasedXferNonLeader.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMDBCheckpointServletInodeBasedXferNonLeader.java @@ -32,11 +32,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.scm.HddsWhiteboxTestUtils; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.lock.BootstrapStateHandler; diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java index 0a7ad4862352..b6b017ccb381 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.when; +import jakarta.xml.bind.DatatypeConverter; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -34,7 +35,6 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.conf.Configuration; diff --git a/hadoop-ozone/ozonefs-hadoop2/pom.xml b/hadoop-ozone/ozonefs-hadoop2/pom.xml index 701a34d33ef6..f787a0c595f3 100644 --- a/hadoop-ozone/ozonefs-hadoop2/pom.xml +++ b/hadoop-ozone/ozonefs-hadoop2/pom.xml @@ -124,6 +124,9 @@ org.apache.maven.plugins maven-dependency-plugin + + org.apache.ratis:ratis-server-api + org.assertj:* org.junit.jupiter:* diff --git a/hadoop-ozone/ozonefs-hadoop3/pom.xml b/hadoop-ozone/ozonefs-hadoop3/pom.xml index 1087c74838b5..6c5799d32ff9 100644 --- a/hadoop-ozone/ozonefs-hadoop3/pom.xml +++ b/hadoop-ozone/ozonefs-hadoop3/pom.xml @@ -64,6 +64,7 @@ org.apache.ratis:ratis-thirdparty-misc + org.apache.ratis:ratis-server-api org.assertj:* diff --git a/hadoop-ozone/recon-codegen/pom.xml b/hadoop-ozone/recon-codegen/pom.xml index 74a0cc182664..6bf8a9060235 100644 --- a/hadoop-ozone/recon-codegen/pom.xml +++ b/hadoop-ozone/recon-codegen/pom.xml @@ -64,9 +64,13 @@ spring-tx - + jakarta.xml.bind jakarta.xml.bind-api + 2.3.3 provided diff --git a/hadoop-ozone/recon/pom.xml b/hadoop-ozone/recon/pom.xml index c2d25b203a2f..36925be9ecf4 100644 --- a/hadoop-ozone/recon/pom.xml +++ b/hadoop-ozone/recon/pom.xml @@ -82,6 +82,14 @@ jakarta.annotation jakarta.annotation-api + + jakarta.inject + jakarta.inject-api + + + jakarta.servlet + jakarta.servlet-api + jakarta.ws.rs jakarta.ws.rs-api @@ -98,10 +106,6 @@ javax.annotation javax.annotation-api - - javax.inject - javax.inject - javax.servlet javax.servlet-api @@ -213,10 +217,6 @@ org.apache.ratis ratis-proto - - org.eclipse.jetty - jetty-servlet - org.glassfish.hk2 guice-bridge @@ -266,6 +266,17 @@ org.xerial sqlite-jdbc + + + javax.xml.bind + jaxb-api + 2.3.1 + provided + com.fasterxml.jackson.module jackson-module-jaxb-annotations @@ -283,11 +294,6 @@ guice-assistedinject runtime - - org.glassfish.hk2.external - jakarta.inject - runtime - org.glassfish.jersey.inject jersey-hk2 diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/MetricsServiceProviderFactory.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/MetricsServiceProviderFactory.java index 1d6ddb873692..18d22bf782a5 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/MetricsServiceProviderFactory.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/MetricsServiceProviderFactory.java @@ -22,9 +22,9 @@ import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_METRICS_HTTP_CONNECTION_TIMEOUT; import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_METRICS_HTTP_CONNECTION_TIMEOUT_DEFAULT; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.concurrent.TimeUnit; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.recon.ReconConfigKeys; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconContext.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconContext.java index e55f0598642f..f9fda2940ab0 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconContext.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconContext.java @@ -17,6 +17,8 @@ package org.apache.hadoop.ozone.recon; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -24,8 +26,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconResponseUtils.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconResponseUtils.java index 02930727d819..0617d4223cf1 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconResponseUtils.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconResponseUtils.java @@ -18,8 +18,8 @@ package org.apache.hadoop.ozone.recon; import com.google.inject.Singleton; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; /** * Recon API Response Utility class. diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconRestServletModule.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconRestServletModule.java index 28a138a73ed9..75e3b4bbf6b0 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconRestServletModule.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconRestServletModule.java @@ -20,13 +20,13 @@ import com.google.inject.Injector; import com.google.inject.Scopes; import com.google.inject.servlet.ServletModule; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContext; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.UriBuilder; import java.net.URL; import java.util.HashMap; import java.util.Map; -import javax.inject.Inject; -import javax.servlet.ServletContext; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.UriBuilder; import org.apache.hadoop.hdds.conf.ConfigurationSource; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneSecurityUtil; @@ -81,7 +81,7 @@ private void configureApi(String... packages) { sb.append(pkg); } Map params = new HashMap<>(); - params.put("javax.ws.rs.Application", + params.put("jakarta.ws.rs.Application", GuiceResourceConfig.class.getCanonicalName()); if (sb.length() > 0) { params.put("jersey.config.server.provider.packages", sb.toString()); diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconUtils.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconUtils.java index 94028c0d55f6..4493f7cf5954 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconUtils.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconUtils.java @@ -31,6 +31,8 @@ import com.google.common.base.Preconditions; import com.google.inject.Singleton; import jakarta.annotation.Nonnull; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; @@ -57,8 +59,6 @@ import java.util.concurrent.BlockingQueue; import java.util.function.Function; import java.util.stream.Collectors; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import org.apache.commons.io.FileUtils; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/AccessHeatMapEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/AccessHeatMapEndpoint.java index dbddc2f3d806..4f3ec81544c2 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/AccessHeatMapEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/AccessHeatMapEndpoint.java @@ -21,16 +21,16 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_ENTITY_PATH; import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_ENTITY_TYPE; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.List; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.recon.api.types.EntityReadAccessHeatMapResponse; import org.apache.hadoop.ozone.recon.api.types.FeatureProvider; import org.apache.hadoop.ozone.recon.heatmap.HeatMapServiceImpl; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BlocksEndPoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BlocksEndPoint.java index bb46e88b1578..010cc95b871d 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BlocksEndPoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BlocksEndPoint.java @@ -23,19 +23,19 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_LIMIT; import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_PREVKEY; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.DeletedBlocksTransaction; import org.apache.hadoop.hdds.scm.container.ContainerID; import org.apache.hadoop.hdds.utils.db.DBStore; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java index 0eb324e41bd2..be3dcd5c4f46 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/BucketEndpoint.java @@ -22,17 +22,17 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_PREVKEY; import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_VOLUME; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.om.helpers.OmBucketInfo; import org.apache.hadoop.ozone.recon.api.types.BucketObjectDBInfo; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java index 608c4846d383..539f1675e4ea 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java @@ -26,14 +26,14 @@ import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.KEY_TABLE; import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.VOLUME_TABLE; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.List; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.fs.SpaceUsageSource; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java index 5c1ec5fe0fa1..99deaeae1cdb 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ContainerEndpoint.java @@ -26,6 +26,19 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_MIN_CONTAINER_ID; import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_PREVKEY; +import jakarta.inject.Inject; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import java.io.BufferedOutputStream; import java.io.File; import java.io.IOException; @@ -42,19 +55,6 @@ import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.container.ContainerID; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/DataNodeMetricsService.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/DataNodeMetricsService.java index d71d383e7729..b9a47aaf8214 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/DataNodeMetricsService.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/DataNodeMetricsService.java @@ -25,6 +25,9 @@ import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_DN_METRICS_COLLECTION_TIMEOUT_DEFAULT; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import jakarta.annotation.PreDestroy; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -40,9 +43,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import javax.annotation.PreDestroy; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.node.DatanodeInfo; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ExportJobManager.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ExportJobManager.java index 075cc9ddf7f0..f447648eb3af 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ExportJobManager.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ExportJobManager.java @@ -19,6 +19,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.annotation.PreDestroy; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; @@ -38,7 +39,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import javax.annotation.PreDestroy; import org.apache.commons.io.FileUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.utils.Archiver; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/FeaturesEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/FeaturesEndpoint.java index e06bbe89dc43..a846051e0fc6 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/FeaturesEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/FeaturesEndpoint.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.recon.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.List; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.recon.api.types.FeatureProvider; import org.apache.hadoop.ozone.recon.heatmap.HeatMapServiceImpl; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/MetricsProxyEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/MetricsProxyEndpoint.java index 82fd0f801f95..0cb857069c3d 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/MetricsProxyEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/MetricsProxyEndpoint.java @@ -19,6 +19,17 @@ import static org.apache.hadoop.ozone.recon.spi.impl.PrometheusServiceProviderImpl.PROMETHEUS_INSTANT_QUERY_API; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; @@ -26,17 +37,6 @@ import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; -import javax.inject.Inject; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.ozone.recon.MetricsServiceProviderFactory; import org.apache.hadoop.ozone.recon.spi.MetricsServiceProvider; import org.apache.hadoop.ozone.recon.spi.impl.PrometheusServiceProviderImpl; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpoint.java index c88b8fbe1f1a..eb2517ff26d2 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpoint.java @@ -17,15 +17,15 @@ package org.apache.hadoop.ozone.recon.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.recon.ReconUtils; import org.apache.hadoop.ozone.recon.api.handlers.EntityHandler; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java index 6aacc779bea9..74422114eb91 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/NodeEndpoint.java @@ -21,6 +21,16 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.base.Preconditions; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -34,16 +44,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.DecommissionUtils; import org.apache.hadoop.hdds.fs.SpaceUsageSource; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/OMDBInsightEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/OMDBInsightEndpoint.java index fac38bce5195..2dacb1fe473c 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/OMDBInsightEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/OMDBInsightEndpoint.java @@ -37,6 +37,14 @@ import static org.apache.hadoop.ozone.recon.api.handlers.EntityHandler.parseRequestPath; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -44,14 +52,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.hdds.utils.db.Table; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PendingDeletionEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PendingDeletionEndpoint.java index 4554379b6ca4..e999f804717b 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PendingDeletionEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PendingDeletionEndpoint.java @@ -17,13 +17,13 @@ package org.apache.hadoop.ozone.recon.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import java.util.Map; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.protocol.StorageContainerLocationProtocol; import org.apache.hadoop.ozone.recon.api.types.DataNodeMetricsCompleteResponse; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PipelineEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PipelineEndpoint.java index 96badcb95485..0fe7228e15f6 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PipelineEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/PipelineEndpoint.java @@ -17,17 +17,17 @@ package org.apache.hadoop.ozone.recon.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.TreeMap; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdds.protocol.DatanodeID; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ReconGlobalMetricsService.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ReconGlobalMetricsService.java index d4dd2d210990..604a122a0728 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ReconGlobalMetricsService.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ReconGlobalMetricsService.java @@ -24,14 +24,14 @@ import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.OPEN_FILE_TABLE; import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.OPEN_KEY_TABLE; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.hdds.utils.db.Table; import org.apache.hadoop.hdds.utils.db.TableIterator; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java index 74584f843cbe..1a9a109eaaca 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java @@ -20,6 +20,12 @@ import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.FILE_TABLE; import static org.apache.hadoop.ozone.om.codec.OMDBDefinition.KEY_TABLE; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneOffset; @@ -31,12 +37,6 @@ import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.fs.SpaceUsageSource; import org.apache.hadoop.hdds.protocol.DatanodeDetails; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TaskStatusService.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TaskStatusService.java index 1bcd1a6eda03..3593bfe80792 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TaskStatusService.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TaskStatusService.java @@ -17,13 +17,13 @@ package org.apache.hadoop.ozone.recon.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.List; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.ozone.recon.schema.generated.tables.daos.ReconTaskStatusDao; import org.apache.ozone.recon.schema.generated.tables.pojos.ReconTaskStatus; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TriggerDBSyncEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TriggerDBSyncEndpoint.java index 493f2bfe4cde..f4d911d09464 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TriggerDBSyncEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/TriggerDBSyncEndpoint.java @@ -17,13 +17,13 @@ package org.apache.hadoop.ozone.recon.api; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.recon.api.types.OMDBReprocessResponse; import org.apache.hadoop.ozone.recon.scm.ReconStorageContainerManagerFacade; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/UtilizationEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/UtilizationEndpoint.java index 5a19890d3dcf..8633bd105f9e 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/UtilizationEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/UtilizationEndpoint.java @@ -23,17 +23,17 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_VOLUME; import static org.apache.ozone.recon.schema.generated.tables.ContainerCountBySizeTable.CONTAINER_COUNT_BY_SIZE; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.utils.db.Table; import org.apache.hadoop.hdds.utils.db.Table.KeyValueIterator; import org.apache.hadoop.ozone.recon.ReconUtils; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java index 8df4b2b5a442..f4ccb98851ea 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/VolumeEndpoint.java @@ -21,17 +21,17 @@ import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_LIMIT; import static org.apache.hadoop.ozone.recon.ReconConstants.RECON_QUERY_PREVKEY; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs; import org.apache.hadoop.ozone.recon.api.types.VolumeObjectDBInfo; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAdminFilter.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAdminFilter.java index 5cc82f384583..9a942ce7ebf0 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAdminFilter.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAdminFilter.java @@ -19,16 +19,16 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.Principal; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneSecurityUtil; import org.apache.hadoop.ozone.recon.ReconServer; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAuthFilter.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAuthFilter.java index 15df04e81569..ad013a4e0f55 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAuthFilter.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/filters/ReconAuthFilter.java @@ -22,27 +22,32 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; +import java.util.Collections; import java.util.Enumeration; import java.util.Map; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; import org.apache.hadoop.hdds.conf.OzoneConfiguration; -import org.apache.hadoop.security.authentication.server.AuthenticationFilter; +import org.apache.hadoop.hdds.server.http.servletbridge.JavaxFilterBridge; import org.apache.hadoop.security.authentication.server.ProxyUserAuthenticationFilter; -import org.eclipse.jetty.servlet.FilterHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Filter that can be applied to paths to only allow access by authenticated * kerberos users. + * + *

The authentication itself is performed by hadoop's + * {@code javax.servlet}-based {@link ProxyUserAuthenticationFilter}. This + * jakarta filter runs it through {@link JavaxFilterBridge} so it can be + * registered on Recon's Guice/Jetty EE10 (jakarta) servlet chain. */ @Singleton public class ReconAuthFilter implements Filter { @@ -51,7 +56,7 @@ public class ReconAuthFilter implements Filter { LoggerFactory.getLogger(ReconAuthFilter.class); private final OzoneConfiguration conf; - private ProxyUserAuthenticationFilter hadoopAuthFilter; + private JavaxFilterBridge authFilterBridge; @Inject ReconAuthFilter(OzoneConfiguration conf) { @@ -60,17 +65,13 @@ public class ReconAuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { - hadoopAuthFilter = new ProxyUserAuthenticationFilter(); - Map parameters = getFilterConfigMap(conf, OZONE_RECON_HTTP_AUTH_CONFIG_PREFIX); - FilterHolder filterHolder = getFilterHolder("authentication", - AuthenticationFilter.class.getName(), - parameters); - hadoopAuthFilter.init(new FilterConfig() { + authFilterBridge = new JavaxFilterBridge(new ProxyUserAuthenticationFilter()); + authFilterBridge.init(new FilterConfig() { @Override public String getFilterName() { - return filterHolder.getName(); + return "authentication"; } @Override @@ -80,12 +81,12 @@ public ServletContext getServletContext() { @Override public String getInitParameter(String s) { - return filterHolder.getInitParameter(s); + return parameters.get(s); } @Override public Enumeration getInitParameterNames() { - return filterHolder.getInitParameterNames(); + return Collections.enumeration(parameters.keySet()); } }); } @@ -99,20 +100,13 @@ public void doFilter(ServletRequest servletRequest, ((HttpServletRequest) servletRequest).getRequestURL()); } - hadoopAuthFilter.doFilter(servletRequest, servletResponse, filterChain); + authFilterBridge.doFilter(servletRequest, servletResponse, filterChain); } - private static FilterHolder getFilterHolder(String name, String classname, - Map parameters) { - FilterHolder holder = new FilterHolder(); - holder.setName(name); - holder.setClassName(classname); - if (parameters != null) { - holder.setInitParameters(parameters); + @Override + public void destroy() { + if (authFilterBridge != null) { + authFilterBridge.destroy(); } - return holder; } - - @Override - public void destroy() { } } diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ContainerMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ContainerMetadata.java index d9f8b7479955..57f8e36c2150 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ContainerMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ContainerMetadata.java @@ -18,10 +18,10 @@ package org.apache.hadoop.ozone.recon.api.types; import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; /** diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeMetadata.java index 324ce4f38d9a..0f112d83e40b 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeMetadata.java @@ -18,11 +18,11 @@ package org.apache.hadoop.ozone.recon.api.types; import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState; import org.apache.hadoop.hdds.scm.node.DatanodeInfo; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/IsoDateAdapter.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/IsoDateAdapter.java index fa548060b377..4c14527f2ccd 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/IsoDateAdapter.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/IsoDateAdapter.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.recon.api.types; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; -import javax.xml.bind.annotation.adapters.XmlAdapter; /** * A converter to convert Instant to standard date string. diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/KeyMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/KeyMetadata.java index c91a1c5761a1..9678c74adf01 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/KeyMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/KeyMetadata.java @@ -17,16 +17,16 @@ package org.apache.hadoop.ozone.recon.api.types; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * Metadata object represents one key in the object store. diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/MissingContainerMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/MissingContainerMetadata.java index 0a945718d6dd..0857ccc0c798 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/MissingContainerMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/MissingContainerMetadata.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.recon.api.types; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import java.util.List; import java.util.UUID; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import org.apache.hadoop.ozone.recon.persistence.ContainerHistory; /** diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/PipelineMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/PipelineMetadata.java index fd4834a68887..558d33d4d2b0 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/PipelineMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/PipelineMetadata.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.recon.api.types; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import java.util.List; import java.util.Objects; import java.util.UUID; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.protocol.DatanodeDetails; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/RemoveDataNodesResponseWrapper.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/RemoveDataNodesResponseWrapper.java index f276b6ed0685..6185e42c2f7f 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/RemoveDataNodesResponseWrapper.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/RemoveDataNodesResponseWrapper.java @@ -18,9 +18,9 @@ package org.apache.hadoop.ozone.recon.api.types; import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.xml.bind.annotation.XmlElement; import java.util.HashMap; import java.util.Map; -import javax.xml.bind.annotation.XmlElement; /** * Class that represents the API Response structure of Datanodes. diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UnhealthyContainerMetadata.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UnhealthyContainerMetadata.java index bc6bb57b4a69..911b06065901 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UnhealthyContainerMetadata.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UnhealthyContainerMetadata.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.recon.api.types; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import java.util.List; import java.util.UUID; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import org.apache.hadoop.ozone.recon.persistence.ContainerHistory; import org.apache.ozone.recon.schema.generated.tables.pojos.UnhealthyContainers; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/api/ChatbotEndpoint.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/api/ChatbotEndpoint.java index 6e774575d2e0..9b100503b037 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/api/ChatbotEndpoint.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/api/ChatbotEndpoint.java @@ -18,6 +18,16 @@ package org.apache.hadoop.ozone.recon.chatbot.api; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.annotation.PreDestroy; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -31,16 +41,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import javax.annotation.PreDestroy; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.recon.chatbot.ChatbotConfigKeys; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconEndpointRouter.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconEndpointRouter.java index 5a750043a5ef..89dd31069f02 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconEndpointRouter.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconEndpointRouter.java @@ -19,9 +19,9 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Map; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.recon.ReconConstants; import org.apache.hadoop.ozone.recon.api.BucketEndpoint; import org.apache.hadoop.ozone.recon.api.ClusterStateEndpoint; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconQueryExecutor.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconQueryExecutor.java index 2180e56050a0..84173bc40634 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconQueryExecutor.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconQueryExecutor.java @@ -20,11 +20,11 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.recon.ReconConstants; import org.apache.hadoop.ozone.recon.chatbot.agent.ChatbotUtils; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconResponseUnwrapper.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconResponseUnwrapper.java index 129fec45dddf..251619dbf910 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconResponseUnwrapper.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/chatbot/recon/ReconResponseUnwrapper.java @@ -19,8 +19,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.Response; /** * Converts a JAX-RS Response entity to JsonNode for the chatbot pipeline. diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/fsck/ContainerHealthTask.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/fsck/ContainerHealthTask.java index d4a1af51ad8e..aa8fb51adfea 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/fsck/ContainerHealthTask.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/fsck/ContainerHealthTask.java @@ -17,7 +17,7 @@ package org.apache.hadoop.ozone.recon.fsck; -import javax.inject.Inject; +import jakarta.inject.Inject; import org.apache.hadoop.ozone.recon.metrics.ContainerHealthTaskMetrics; import org.apache.hadoop.ozone.recon.scm.ReconScmTask; import org.apache.hadoop.ozone.recon.scm.ReconStorageContainerManagerFacade; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/HeatMapServiceImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/HeatMapServiceImpl.java index 1e2c5fd883dc..906a73fce3fd 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/HeatMapServiceImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/HeatMapServiceImpl.java @@ -21,7 +21,7 @@ import static org.apache.hadoop.ozone.OzoneConsts.OM_KEY_PREFIX; import com.google.inject.Inject; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/IHeatMapProvider.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/IHeatMapProvider.java index fe55f8431b9e..db450c6de230 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/IHeatMapProvider.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/heatmap/IHeatMapProvider.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.recon.heatmap; +import jakarta.ws.rs.core.Response; import java.net.InetSocketAddress; import java.util.List; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.recon.api.types.EntityMetaData; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/recovery/ReconOmMetadataManagerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/recovery/ReconOmMetadataManagerImpl.java index d0f92d0485f4..ba507ed899c0 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/recovery/ReconOmMetadataManagerImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/recovery/ReconOmMetadataManagerImpl.java @@ -22,13 +22,13 @@ import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_OM_SNAPSHOT_DB_DIR; import com.google.common.base.Strings; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.commons.compress.utils.Lists; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageConfig.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageConfig.java index d988d8b73cdf..f9d03de41fd8 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageConfig.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/scm/ReconStorageConfig.java @@ -20,10 +20,10 @@ import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.OZONE_RECON_DB_DIR; import static org.apache.hadoop.ozone.recon.ReconServerConfigKeys.RECON_STORAGE_DIR; +import jakarta.inject.Inject; import java.io.IOException; import java.util.Properties; import java.util.UUID; -import javax.inject.Inject; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeType; import org.apache.hadoop.hdds.scm.server.SCMStorageConfig; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/JmxServiceProviderImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/JmxServiceProviderImpl.java index d3de292945b1..f4bc4beafd84 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/JmxServiceProviderImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/JmxServiceProviderImpl.java @@ -19,13 +19,13 @@ import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_DATANODE_HTTP_AUTH_TYPE; +import jakarta.inject.Singleton; +import jakarta.ws.rs.core.Response; import java.io.InputStream; import java.net.HttpURLConnection; import java.util.Collections; import java.util.List; import java.util.Map; -import javax.inject.Singleton; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.server.JsonUtils; import org.apache.hadoop.hdfs.web.URLConnectionFactory; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/OzoneManagerServiceProviderImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/OzoneManagerServiceProviderImpl.java index 7453e7bcc63b..9a6e445db80a 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/OzoneManagerServiceProviderImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/OzoneManagerServiceProviderImpl.java @@ -43,6 +43,8 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Iterators; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; @@ -60,8 +62,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.hadoop.hdds.conf.OzoneConfiguration; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/PrometheusServiceProviderImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/PrometheusServiceProviderImpl.java index 0a784c50c90f..ed196a2aa414 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/PrometheusServiceProviderImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/PrometheusServiceProviderImpl.java @@ -18,6 +18,8 @@ package org.apache.hadoop.ozone.recon.spi.impl; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Singleton; +import jakarta.ws.rs.core.Response; import java.io.InputStream; import java.net.HttpURLConnection; import java.util.ArrayList; @@ -25,8 +27,6 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; -import javax.inject.Singleton; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.recon.ReconConfigKeys; import org.apache.hadoop.hdfs.web.URLConnectionFactory; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java index e4a43a925ef5..6263b220de9b 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconContainerMetadataManagerImpl.java @@ -24,6 +24,8 @@ import static org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.REPLICA_HISTORY_V2; import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.IOException; import java.io.UncheckedIOException; import java.time.Duration; @@ -33,8 +35,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.protocol.DatanodeID; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java index 9dd68746d4aa..b48c49a14a70 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconDBProvider.java @@ -22,11 +22,11 @@ import com.google.common.annotations.VisibleForTesting; import com.google.inject.ProvisionException; +import jakarta.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; -import javax.inject.Inject; import org.apache.commons.io.FileUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.utils.db.DBStore; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconFileMetadataManagerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconFileMetadataManagerImpl.java index 25b60f65e944..e697127bf5ba 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconFileMetadataManagerImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconFileMetadataManagerImpl.java @@ -19,9 +19,9 @@ import static org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.FILE_COUNT_BY_SIZE; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.IOException; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.hadoop.hdds.utils.db.BatchOperation; import org.apache.hadoop.hdds.utils.db.DBStore; import org.apache.hadoop.hdds.utils.db.RDBBatchOperation; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconGlobalStatsManagerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconGlobalStatsManagerImpl.java index d0c2581a4d71..29b0cf0787d8 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconGlobalStatsManagerImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconGlobalStatsManagerImpl.java @@ -19,9 +19,9 @@ import static org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.GLOBAL_STATS; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.IOException; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.hadoop.hdds.utils.db.BatchOperation; import org.apache.hadoop.hdds.utils.db.DBStore; import org.apache.hadoop.hdds.utils.db.RDBBatchOperation; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java index 8525ec3f7140..91c726c4e464 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/ReconNamespaceSummaryManagerImpl.java @@ -19,8 +19,8 @@ import static org.apache.hadoop.ozone.recon.spi.impl.ReconDBDefinition.NAMESPACE_SUMMARY; +import jakarta.inject.Inject; import java.io.IOException; -import javax.inject.Inject; import org.apache.hadoop.hdds.utils.db.BatchOperation; import org.apache.hadoop.hdds.utils.db.DBStore; import org.apache.hadoop.hdds.utils.db.RDBBatchOperation; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/StorageContainerServiceProviderImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/StorageContainerServiceProviderImpl.java index be3d917f42ca..90dbf474de42 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/StorageContainerServiceProviderImpl.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/spi/impl/StorageContainerServiceProviderImpl.java @@ -22,6 +22,7 @@ import static org.apache.hadoop.security.UserGroupInformation.getCurrentUser; import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Path; @@ -29,7 +30,6 @@ import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; -import javax.inject.Inject; import org.apache.commons.io.FileUtils; import org.apache.hadoop.hdds.HddsUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/NSSummaryTask.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/NSSummaryTask.java index 53d07bca6b1b..3ce94ef884bc 100644 --- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/NSSummaryTask.java +++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/NSSummaryTask.java @@ -22,6 +22,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import jakarta.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -36,7 +37,6 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -import javax.inject.Inject; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.utils.db.DBStore; diff --git a/hadoop-ozone/recon/src/main/resources/webapps/recon/WEB-INF/web.xml b/hadoop-ozone/recon/src/main/resources/webapps/recon/WEB-INF/web.xml index dbf0ae614f9f..88e7bc8853da 100644 --- a/hadoop-ozone/recon/src/main/resources/webapps/recon/WEB-INF/web.xml +++ b/hadoop-ozone/recon/src/main/resources/webapps/recon/WEB-INF/web.xml @@ -11,9 +11,9 @@ See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"> org.apache.hadoop.ozone.recon.ReconGuiceServletContextListener diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpointTestBase.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpointTestBase.java index 18a39ab85b06..ef0636cdd155 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpointTestBase.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/NSSummaryEndpointTestBase.java @@ -23,12 +23,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestBlocksEndPoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestBlocksEndPoint.java index b73d7a0b3678..c409d366a78b 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestBlocksEndPoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestBlocksEndPoint.java @@ -26,6 +26,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.mock; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -33,7 +34,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeoutException; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.StandaloneReplicationConfig; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java index fd497fd4b965..b49c48d54810 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java @@ -32,12 +32,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; import java.util.concurrent.TimeoutException; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.RatisReplicationConfig; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.fs.SpaceUsageSource; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java index 505f22c7c8e5..14fa0f24e94d 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestContainerEndpoint.java @@ -36,6 +36,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -54,8 +56,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.client.RatisReplicationConfig; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestDeletedKeysSearchEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestDeletedKeysSearchEndpoint.java index e4393cafba5f..58af03fb46df 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestDeletedKeysSearchEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestDeletedKeysSearchEndpoint.java @@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; +import jakarta.ws.rs.core.Response; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -32,7 +33,6 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.StandaloneReplicationConfig; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java index db9301e4795e..38d1740b75c1 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java @@ -43,6 +43,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -61,10 +65,6 @@ import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicInteger; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; import org.apache.commons.io.FileUtils; import org.apache.hadoop.hdds.client.RatisReplicationConfig; import org.apache.hadoop.hdds.conf.OzoneConfiguration; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestFeaturesEndPoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestFeaturesEndPoint.java index 796ff43736c6..4200a15d126d 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestFeaturesEndPoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestFeaturesEndPoint.java @@ -26,10 +26,10 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.mock; +import jakarta.ws.rs.core.Response; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.recon.ReconTestInjector; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryDiskUsageOrdering.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryDiskUsageOrdering.java index 86256a8a3f39..00402f9993d9 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryDiskUsageOrdering.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryDiskUsageOrdering.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -35,7 +36,6 @@ import java.util.Comparator; import java.util.List; import java.util.UUID; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.container.ContainerManager; import org.apache.hadoop.hdds.scm.container.ContainerNotFoundException; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryEndpoint.java index e9e411fccf89..a0575d1fe166 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestNSSummaryEndpoint.java @@ -25,11 +25,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.om.OMMetadataManager; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOmDBInsightEndPoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOmDBInsightEndPoint.java index c4f419b6e634..c13b9ff51e9b 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOmDBInsightEndPoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOmDBInsightEndPoint.java @@ -34,6 +34,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -49,7 +50,6 @@ import java.util.Set; import java.util.TimeZone; import java.util.stream.Collectors; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.BlockID; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationConfig; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenContainerCount.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenContainerCount.java index e4325f9604fb..20d48179db7f 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenContainerCount.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenContainerCount.java @@ -30,6 +30,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.net.HttpURLConnection; import java.nio.file.Files; @@ -38,8 +40,6 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.Callable; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.client.RatisReplicationConfig; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.DatanodeDetails; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenKeysSearchEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenKeysSearchEndpoint.java index 510367870ea4..d592dbab90b4 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenKeysSearchEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestOpenKeysSearchEndpoint.java @@ -28,12 +28,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; +import jakarta.ws.rs.core.Response; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.UUID; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; import org.apache.hadoop.ozone.om.OMMetadataManager; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestPendingDeletionEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestPendingDeletionEndpoint.java index 8a1987758077..fc91887b0578 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestPendingDeletionEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestPendingDeletionEndpoint.java @@ -22,10 +22,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.protocol.StorageContainerLocationProtocol; import org.apache.hadoop.ozone.recon.api.types.DataNodeMetricsCompleteResponse; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java index 6bbc448472c9..2fc7af57c730 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java @@ -25,6 +25,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -34,8 +36,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import org.apache.hadoop.hdds.fs.SpaceUsageSource; import org.apache.hadoop.hdds.protocol.DatanodeDetails; import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeMetric; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTaskStatusService.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTaskStatusService.java index 712b0909ee24..cab00106fdde 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTaskStatusService.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTaskStatusService.java @@ -21,9 +21,9 @@ import com.google.inject.AbstractModule; import com.google.inject.Injector; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.recon.persistence.AbstractReconSqlDBTest; import org.apache.ozone.recon.schema.generated.tables.daos.ReconTaskStatusDao; import org.apache.ozone.recon.schema.generated.tables.pojos.ReconTaskStatus; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTriggerDBSyncEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTriggerDBSyncEndpoint.java index 5ec99ee9b44a..86346f6193a4 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTriggerDBSyncEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestTriggerDBSyncEndpoint.java @@ -32,13 +32,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.nio.file.Files; import java.nio.file.Path; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.scm.protocol.StorageContainerLocationProtocol; import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/filters/TestAdminFilter.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/filters/TestAdminFilter.java index 2ebec50fed92..57a54422d971 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/filters/TestAdminFilter.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/filters/TestAdminFilter.java @@ -22,12 +22,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.servlet.FilterChain; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.Principal; import java.util.Collection; -import javax.servlet.FilterChain; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.recon.ReconConfigKeys; import org.apache.hadoop.hdds.server.OzoneAdmins; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/api/TestChatbotEndpoint.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/api/TestChatbotEndpoint.java index 1c1b86a90bc9..931a2fc83bfc 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/api/TestChatbotEndpoint.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/api/TestChatbotEndpoint.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -38,7 +39,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.recon.chatbot.ChatbotConfigKeys; import org.apache.hadoop.ozone.recon.chatbot.ChatbotException; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconEndpointRouter.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconEndpointRouter.java index c6bbd607c8d6..642579d463a3 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconEndpointRouter.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconEndpointRouter.java @@ -26,10 +26,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.Response; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.recon.api.BucketEndpoint; import org.apache.hadoop.ozone.recon.api.ClusterStateEndpoint; import org.apache.hadoop.ozone.recon.api.ContainerEndpoint; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutor.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutor.java index 3188b082e8b3..8b2301b8f1c5 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutor.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutor.java @@ -29,10 +29,10 @@ import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.ws.rs.core.Response; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; import org.junit.jupiter.api.Test; /** diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutorListKeys.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutorListKeys.java index 8375821ac279..1f550bc8ff86 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutorListKeys.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconQueryExecutorListKeys.java @@ -29,10 +29,10 @@ import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.ws.rs.core.Response; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.Response; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconResponseUnwrapper.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconResponseUnwrapper.java index 7d04a4b8e347..0dc1acce10f7 100644 --- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconResponseUnwrapper.java +++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/chatbot/recon/TestReconResponseUnwrapper.java @@ -22,9 +22,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Collections; -import javax.ws.rs.core.Response; import org.junit.jupiter.api.Test; /** Tests for {@link ReconResponseUnwrapper}. */ diff --git a/hadoop-ozone/s3gateway/pom.xml b/hadoop-ozone/s3gateway/pom.xml index eb3f38023b98..7850407d3b47 100644 --- a/hadoop-ozone/s3gateway/pom.xml +++ b/hadoop-ozone/s3gateway/pom.xml @@ -40,14 +40,7 @@ com.fasterxml.jackson.module - jackson-module-jaxb-annotations - - - - javax.xml.bind - jaxb-api - - + jackson-module-jakarta-xmlbind-annotations com.github.stephenc.jcip @@ -78,28 +71,24 @@ jakarta.annotation-api - jakarta.ws.rs - jakarta.ws.rs-api - - - jakarta.xml.bind - jakarta.xml.bind-api + jakarta.enterprise + jakarta.enterprise.cdi-api - javax.annotation - javax.annotation-api + jakarta.inject + jakarta.inject-api - javax.enterprise - cdi-api + jakarta.servlet + jakarta.servlet-api - javax.inject - javax.inject + jakarta.ws.rs + jakarta.ws.rs-api - javax.servlet - javax.servlet-api + jakarta.xml.bind + jakarta.xml.bind-api org.apache.commons @@ -168,12 +157,12 @@ ratis-common - org.eclipse.jetty - jetty-servlet + org.eclipse.jetty.ee10 + jetty-ee10-servlet - org.eclipse.jetty - jetty-webapp + org.eclipse.jetty.ee10 + jetty-ee10-webapp org.glassfish.jersey.core diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/AuthorizationFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/AuthorizationFilter.java index ae4ce9bada83..2110411fcbb5 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/AuthorizationFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/AuthorizationFilter.java @@ -23,13 +23,13 @@ import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapOS3Exception; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; -import javax.annotation.Priority; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; import org.apache.hadoop.ozone.s3.signature.SignatureInfo; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/ClientIpFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/ClientIpFilter.java index b01b379919cf..45204a88343c 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/ClientIpFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/ClientIpFilter.java @@ -18,13 +18,13 @@ package org.apache.hadoop.ozone.s3; import jakarta.annotation.Priority; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/CommonHeadersContainerResponseFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/CommonHeadersContainerResponseFilter.java index 3a5978a7ff89..84bfba97a32f 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/CommonHeadersContainerResponseFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/CommonHeadersContainerResponseFilter.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.ext.Provider; /** * This class adds common header responses for all the requests. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/EmptyContentTypeFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/EmptyContentTypeFilter.java index a2177cc2f4ef..4f4911e868b8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/EmptyContentTypeFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/EmptyContentTypeFilter.java @@ -17,18 +17,18 @@ package org.apache.hadoop.ozone.s3; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import java.io.IOException; import java.util.Collections; import java.util.Enumeration; import java.util.NoSuchElementException; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; /** * Filter to accept queries with empty string content-type (ruby sdk). diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/HeaderPreprocessor.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/HeaderPreprocessor.java index 0ae129670905..80c0cf44c493 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/HeaderPreprocessor.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/HeaderPreprocessor.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3; +import jakarta.annotation.Priority; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; -import javax.annotation.Priority; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; /** * Filter to adjust request headers for compatible reasons. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientCache.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientCache.java index 75afe46a92cf..bbc39b9f9932 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientCache.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientCache.java @@ -22,14 +22,14 @@ import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_TRANSPORT_CLASS; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_TRANSPORT_CLASS_DEFAULT; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.io.IOException; import java.security.cert.CertificateException; import java.util.Collections; import java.util.List; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; -import javax.inject.Inject; -import javax.inject.Singleton; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.security.SecurityConfig; import org.apache.hadoop.hdds.utils.IOUtils; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java index 7404019d0035..bd0f24193faa 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3; +import jakarta.annotation.PreDestroy; +import jakarta.enterprise.context.RequestScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.inject.Inject; import java.io.IOException; -import javax.annotation.PreDestroy; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Produces; -import javax.inject.Inject; import org.apache.hadoop.ozone.client.OzoneClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneConfigurationHolder.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneConfigurationHolder.java index 88652f0457aa..aa4ebbc0b8ab 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneConfigurationHolder.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneConfigurationHolder.java @@ -18,7 +18,7 @@ package org.apache.hadoop.ozone.s3; import com.google.common.annotations.VisibleForTesting; -import javax.enterprise.inject.Produces; +import jakarta.enterprise.inject.Produces; import org.apache.hadoop.hdds.conf.OzoneConfiguration; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/RequestIdentifier.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/RequestIdentifier.java index 8c5d5d110a50..35e29173f398 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/RequestIdentifier.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/RequestIdentifier.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3; +import jakarta.enterprise.context.RequestScoped; import java.security.SecureRandom; import java.util.Random; -import javax.enterprise.context.RequestScoped; import org.apache.commons.lang3.RandomStringUtils; import org.apache.hadoop.ozone.web.utils.OzoneUtils; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3ContentTypeFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3ContentTypeFilter.java new file mode 100644 index 000000000000..556184b7ccd0 --- /dev/null +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3ContentTypeFilter.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.ozone.s3; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; +import java.io.IOException; +import java.util.Locale; + +/** + * Emit {@code application/xml} without a charset parameter on S3 responses. + * + *

AWS S3 (and Ozone before the Jetty 12 upgrade) returns a bare + * {@code application/xml} Content-Type. On Jetty 12 the servlet response tracks + * a response character encoding ({@code _encodingFrom}); once that has been + * promoted from {@code NOT_SET} (which happens internally, below the servlet + * API), Jetty rebuilds the Content-Type as {@code application/xml;charset=utf-8} + * even though the value passed to {@code setHeader} is bare. Simply stripping + * the charset from the header value does not help, because Jetty re-appends it + * from the tracked encoding after the wrapper runs. + * + *

This wrapper resets the response character encoding back to {@code NOT_SET} + * (via {@code setCharacterEncoding(null)}) right before it writes an + * {@code application/xml} Content-Type, so Jetty keeps the header bare, and it + * also normalizes the value itself as a safeguard. It only touches + * {@code application/xml} responses; every other Content-Type is left unchanged. + */ +public class S3ContentTypeFilter implements Filter { + + private static final String APPLICATION_XML = "application/xml"; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter( + ServletRequest request, ServletResponse response, FilterChain chain + ) throws IOException, ServletException { + if (response instanceof HttpServletResponse) { + chain.doFilter(request, new XmlContentTypeResponse((HttpServletResponse) response)); + } else { + chain.doFilter(request, response); + } + } + + @Override + public void destroy() { + } + + private static boolean isXml(String contentType) { + return contentType != null + && contentType.toLowerCase(Locale.ROOT).startsWith(APPLICATION_XML); + } + + private static final class XmlContentTypeResponse extends HttpServletResponseWrapper { + + XmlContentTypeResponse(HttpServletResponse response) { + super(response); + } + + /** + * Reset the tracked response encoding so Jetty does not re-append a charset + * to a bare {@code application/xml} Content-Type, then write the bare value. + */ + private void putBareXml(Runnable write) { + setCharacterEncoding(null); + write.run(); + } + + @Override + public void setContentType(String type) { + if (isXml(type)) { + putBareXml(() -> super.setContentType(APPLICATION_XML)); + } else { + super.setContentType(type); + } + } + + @Override + public void setHeader(String name, String value) { + if ("Content-Type".equalsIgnoreCase(name) && isXml(value)) { + putBareXml(() -> super.setHeader(name, APPLICATION_XML)); + } else { + super.setHeader(name, value); + } + } + + @Override + public void addHeader(String name, String value) { + if ("Content-Type".equalsIgnoreCase(name) && isXml(value)) { + putBareXml(() -> super.addHeader(name, APPLICATION_XML)); + } else { + super.addHeader(name, value); + } + } + } +} diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayHttpServer.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayHttpServer.java index d2c3cb5bcdaa..e254e51e56a8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayHttpServer.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayHttpServer.java @@ -41,6 +41,11 @@ protected boolean shouldAddDefaultApps() { return false; } + @Override + protected boolean shouldAllowAmbiguousUri() { + return true; + } + @Override protected String getHttpAddressKey() { return S3GatewayConfigKeys.OZONE_S3G_HTTP_ADDRESS_KEY; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayWebAdminServer.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayWebAdminServer.java index f87343cfb92b..598ed5af45b8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayWebAdminServer.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/S3GatewayWebAdminServer.java @@ -36,21 +36,21 @@ import static org.apache.hadoop.security.authentication.server.AuthenticationFilter.AUTH_TYPE; import com.google.common.base.Strings; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.hadoop.hdds.conf.MutableConfigurationSource; import org.apache.hadoop.hdds.server.http.BaseHttpServer; import org.apache.hadoop.hdds.server.http.ServletElementsFactory; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.authentication.server.AuthenticationFilter; -import org.eclipse.jetty.servlet.FilterHolder; -import org.eclipse.jetty.servlet.FilterMapping; -import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.ee10.servlet.FilterHolder; +import org.eclipse.jetty.ee10.servlet.FilterMapping; +import org.eclipse.jetty.ee10.servlet.ServletHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/TracingFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/TracingFilter.java index 21bcf8aa7bde..59c9af192949 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/TracingFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/TracingFilter.java @@ -17,15 +17,15 @@ package org.apache.hadoop.ozone.s3; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.container.ResourceInfo; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.container.ResourceInfo; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.hdds.tracing.TracingUtil; import org.apache.hadoop.ozone.client.io.WrappedOutputStream; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java index 539c960e366d..65a671d5d31b 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/VirtualHostStyleFilter.java @@ -21,18 +21,18 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.net.HostAndPort; +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.PreMatching; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.net.URI; import java.util.Arrays; -import javax.annotation.Priority; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.fs.InvalidRequestException; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.slf4j.Logger; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/BucketMetadata.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/BucketMetadata.java index f00a17453f59..45565b03f658 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/BucketMetadata.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/BucketMetadata.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.commontypes; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * Metadata object represents one bucket. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/CommonPrefix.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/CommonPrefix.java index 064052243f88..fac11b24dfbd 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/CommonPrefix.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/CommonPrefix.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.commontypes; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * Directory name ("key prefix") in case of listing. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/DirectoryBucketMetadata.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/DirectoryBucketMetadata.java index dd0f50114e51..6e5523db67f4 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/DirectoryBucketMetadata.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/DirectoryBucketMetadata.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.commontypes; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * Metadata for one S3 directory bucket in a ListDirectoryBuckets response. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/IsoDateAdapter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/IsoDateAdapter.java index faaf6b85898e..f1c1f2ec7c59 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/IsoDateAdapter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/IsoDateAdapter.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.commontypes; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; -import javax.xml.bind.annotation.adapters.XmlAdapter; /** * A converter to convert Instant to standard date string. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/KeyMetadata.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/KeyMetadata.java index 1ebf28a9bc4c..7de50811d7b1 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/KeyMetadata.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/KeyMetadata.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.commontypes; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.endpoint.S3Owner; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/ObjectKeyNameAdapter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/ObjectKeyNameAdapter.java index 99b66381704e..d3d23829f0e7 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/ObjectKeyNameAdapter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/ObjectKeyNameAdapter.java @@ -17,8 +17,8 @@ package org.apache.hadoop.ozone.s3.commontypes; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import java.io.UnsupportedEncodingException; -import javax.xml.bind.annotation.adapters.XmlAdapter; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.s3.util.S3Utils; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/RequestParameters.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/RequestParameters.java index ebcddf592640..396acbdcbcfd 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/RequestParameters.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/RequestParameters.java @@ -17,7 +17,7 @@ package org.apache.hadoop.ozone.s3.commontypes; -import javax.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.MultivaluedMap; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; /** Allow looking up query parameters as primitive types. */ diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/package-info.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/package-info.java index 52d7cdc74bec..3305066da874 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/package-info.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/package-info.java @@ -18,11 +18,11 @@ /** * Common classes required for S3 rest API's. */ -@javax.xml.bind.annotation.XmlSchema( +@jakarta.xml.bind.annotation.XmlSchema( namespace = S3Consts.S3_XML_NAMESPACE, elementFormDefault = - javax.xml.bind.annotation.XmlNsForm.QUALIFIED, + jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { - @javax.xml.bind.annotation.XmlNs(namespaceURI = S3Consts.S3_XML_NAMESPACE, prefix = "")}) + @jakarta.xml.bind.annotation.XmlNs(namespaceURI = S3Consts.S3_XML_NAMESPACE, prefix = "")}) package org.apache.hadoop.ozone.s3.commontypes; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingBucketOperationHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingBucketOperationHandler.java index e86249d6c49d..109c0aafbc65 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingBucketOperationHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingBucketOperationHandler.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.exception.OS3Exception; /** Performs audit logging for {@link BucketOperationHandler}s. */ diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingObjectOperationHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingObjectOperationHandler.java index 0f5469cc4dd0..775bdfd0cff0 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingObjectOperationHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/AuditingObjectOperationHandler.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.ObjectRequestContext; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketAclHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketAclHandler.java index bc9e9dca2818..eb7ea1977831 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketAclHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketAclHandler.java @@ -23,6 +23,8 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; import static org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLIdentityType.USER; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -30,8 +32,6 @@ import java.util.List; import java.util.Set; import java.util.function.Supplier; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.audit.S3GAction; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketCrudHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketCrudHandler.java index 3d4cc4d6ad5a..541db6c3f2df 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketCrudHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketCrudHandler.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java index aac2c3920647..91fdbd5d5a78 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java @@ -27,6 +27,17 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.ENCODING_TYPE; import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapInQuotes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -34,17 +45,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.audit.AuditEventStatus; import org.apache.hadoop.ozone.audit.AuditMessage; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketGetLocationHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketGetLocationHandler.java index b01daf14e854..d5f91b1199a4 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketGetLocationHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketGetLocationHandler.java @@ -20,8 +20,8 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.NOT_IMPLEMENTED; import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketLifecycleHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketLifecycleHandler.java index f25ea9d8b89d..8913312d42e5 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketLifecycleHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketLifecycleHandler.java @@ -19,12 +19,12 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.EXPECTED_BUCKET_OWNER_HEADER; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneLifecycleConfiguration; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandler.java index e557d28f16de..1286a41c5e86 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandler.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.exception.OS3Exception; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandlerChain.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandlerChain.java index daf3cb1d7c29..f2a79e5bd3f8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandlerChain.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketOperationHandlerChain.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.List; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.exception.OS3Exception; /** Chain of responsibility for {@link BucketOperationHandler}s. */ diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketTaggingHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketTaggingHandler.java index 10d41558ec9c..a90c9c71e835 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketTaggingHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketTaggingHandler.java @@ -19,13 +19,13 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.TAG_BUCKET_NUM_LIMIT; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.function.Supplier; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.om.exceptions.OMException; import org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequest.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequest.java index f015431ce976..4cf5ef93a0b0 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequest.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequest.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequestUnmarshaller.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequestUnmarshaller.java index 7ea0fcd210d7..64bab47634d5 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequestUnmarshaller.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadRequestUnmarshaller.java @@ -22,16 +22,16 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapOS3Exception; +import jakarta.inject.Singleton; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.inject.Singleton; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; /** * Custom unmarshaller to read CompleteMultipartUploadRequest wo namespace. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadResponse.java index b566ce2c3469..e91ded40f970 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CompleteMultipartUploadResponse.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.endpoint; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyObjectResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyObjectResponse.java index c6a1c5e15cf8..3ba446ce2040 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyObjectResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyObjectResponse.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.commontypes.IsoDateAdapter; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyPartResult.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyPartResult.java index f3b8b6e60e60..7bac0399d600 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyPartResult.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/CopyPartResult.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.commontypes.IsoDateAdapter; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java index 854dcf80e270..f4d1efffc143 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java @@ -55,6 +55,13 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.annotation.PostConstruct; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; @@ -72,13 +79,6 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; import net.jcip.annotations.Immutable; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/GetObjectAttributesResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/GetObjectAttributesResponse.java index 188e2bc4e8a2..57d56aa342f6 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/GetObjectAttributesResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/GetObjectAttributesResponse.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListBucketResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListBucketResponse.java index 30db1de61b46..b099df2b3594 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListBucketResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListBucketResponse.java @@ -18,13 +18,13 @@ package org.apache.hadoop.ozone.s3.endpoint; import com.google.common.annotations.VisibleForTesting; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.commontypes.BucketMetadata; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListDirectoryBucketsResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListDirectoryBucketsResponse.java index f68baa10e73e..b23768ced20e 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListDirectoryBucketsResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListDirectoryBucketsResponse.java @@ -18,13 +18,13 @@ package org.apache.hadoop.ozone.s3.endpoint; import com.google.common.annotations.VisibleForTesting; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.commontypes.DirectoryBucketMetadata; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsHandler.java index 7f8efb3678d5..82947f8d3755 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsHandler.java @@ -19,8 +19,8 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneMultipartUploadList; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsResult.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsResult.java index 98801a520e96..f26346b08a99 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsResult.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListMultipartUploadsResult.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.s3.commontypes.IsoDateAdapter; import org.apache.hadoop.ozone.s3.util.S3Consts; import org.apache.hadoop.ozone.s3.util.S3StorageType; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListObjectResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListObjectResponse.java index bc27e4247031..2715b498a9cb 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListObjectResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListObjectResponse.java @@ -17,13 +17,13 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.s3.commontypes.CommonPrefix; import org.apache.hadoop.ozone.s3.commontypes.EncodingTypeObject; import org.apache.hadoop.ozone.s3.commontypes.KeyMetadata; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListPartsResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListPartsResponse.java index e04c9944a407..2c125b295a41 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListPartsResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ListPartsResponse.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.commontypes.IsoDateAdapter; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MessageUnmarshaller.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MessageUnmarshaller.java index 90c1835b8d67..a33a47a05d6d 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MessageUnmarshaller.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MessageUnmarshaller.java @@ -22,15 +22,15 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.S3_XML_NAMESPACE; import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapOS3Exception; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.UnmarshallerHandler; import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.UnmarshallerHandler; import javax.xml.parsers.SAXParserFactory; import org.apache.hadoop.util.XMLUtils; import org.xml.sax.InputSource; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequest.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequest.java index 10ba02456a9a..1aae98d69f13 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequest.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequest.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequestUnmarshaller.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequestUnmarshaller.java index adf5e66ef928..fa1f77ab9059 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequestUnmarshaller.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteRequestUnmarshaller.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.endpoint; -import javax.inject.Singleton; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.ext.Provider; +import jakarta.inject.Singleton; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.ext.Provider; /** * Custom unmarshaller to read MultiDeleteRequest w/wo namespace. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteResponse.java index 222a56239346..412b2f6ff8ab 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultiDeleteResponse.java @@ -17,12 +17,12 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartKeyHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartKeyHandler.java index 984355d10f85..a4befe52e37d 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartKeyHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartKeyHandler.java @@ -21,10 +21,10 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; import static org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import java.io.IOException; import java.time.Instant; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.audit.AuditLogger; import org.apache.hadoop.ozone.audit.AuditLogger.PerformanceStringBuilder; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartUploadInitiateResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartUploadInitiateResponse.java index ea8b50307921..13b97bf227a3 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartUploadInitiateResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/MultipartUploadInitiateResponse.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.endpoint; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAclHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAclHandler.java index 263c093970ad..245ff11b9bf0 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAclHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAclHandler.java @@ -20,10 +20,10 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.NOT_IMPLEMENTED; import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.ObjectRequestContext; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAttributesHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAttributesHandler.java index 1a1319bc13ae..1dcf391584c9 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAttributesHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectAttributesHandler.java @@ -28,6 +28,8 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.PART_NUMBER_MARKER_HEADER; import static org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Arrays; import java.util.HashSet; @@ -36,8 +38,6 @@ import java.util.Map; import java.util.NavigableMap; import java.util.Set; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.audit.S3GAction; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java index 21be929e211f..582db7e4baaa 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java @@ -49,6 +49,23 @@ import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapInQuotes; import com.google.common.collect.ImmutableMap; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.ResponseBuilder; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.StreamingOutput; +import jakarta.xml.bind.DatatypeConverter; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -61,23 +78,6 @@ import java.util.List; import java.util.Map; import java.util.regex.Matcher; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.ResponseBuilder; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.StreamingOutput; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java index 55420a1668ca..bb629eaec2e0 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpointStreaming.java @@ -23,13 +23,13 @@ import static org.apache.hadoop.ozone.s3.util.S3Utils.validateSignatureHeader; import static org.apache.hadoop.ozone.s3.util.S3Utils.wrapInQuotes; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; +import jakarta.xml.bind.DatatypeConverter; import java.io.IOException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.ozone.OzoneConsts; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectGetTorrentHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectGetTorrentHandler.java index 312d323d8034..c4489d083489 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectGetTorrentHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectGetTorrentHandler.java @@ -20,8 +20,8 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.NOT_IMPLEMENTED; import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.ObjectRequestContext; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandler.java index 82ddda475c38..0e40fa9a9b17 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandler.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.ObjectRequestContext; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandlerChain.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandlerChain.java index 805d478353ca..9bf13ce2faba 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandlerChain.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectOperationHandlerChain.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.List; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.endpoint.ObjectEndpoint.ObjectRequestContext; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectTaggingHandler.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectTaggingHandler.java index 3c5e756ed5ba..b7d71fed0120 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectTaggingHandler.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectTaggingHandler.java @@ -17,13 +17,13 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.function.Supplier; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.om.exceptions.OMException; import org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/PlainTextMultipartUploadReader.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/PlainTextMultipartUploadReader.java index 87d7bfea7e7a..750116a92863 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/PlainTextMultipartUploadReader.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/PlainTextMultipartUploadReader.java @@ -17,16 +17,16 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.Consumes; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; /** * Body reader to accept plain text MPU. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/RootEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/RootEndpoint.java index e89d09a54328..a34ad8267207 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/RootEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/RootEndpoint.java @@ -20,11 +20,11 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.INVALID_ARGUMENT; import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Iterator; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.s3.commontypes.BucketMetadata; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3BucketAcl.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3BucketAcl.java index 78cb0ff32246..a2dcc5db0ed9 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3BucketAcl.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3BucketAcl.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3ConditionalRequest.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3ConditionalRequest.java index e7826c294bc9..cc08e072dd6b 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3ConditionalRequest.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3ConditionalRequest.java @@ -22,14 +22,14 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.newError; import static org.apache.hadoop.ozone.s3.util.S3Utils.parseETag; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.ResponseBuilder; +import jakarta.ws.rs.core.Response.Status; import java.text.ParseException; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.OptionalLong; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.ResponseBuilder; -import javax.ws.rs.core.Response.Status; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneKey; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3LifecycleConfiguration.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3LifecycleConfiguration.java index f7d72421fe10..426a521f9fb8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3LifecycleConfiguration.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3LifecycleConfiguration.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneLifecycleConfiguration; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Owner.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Owner.java index 4f84bb0b4664..5d27de5ef1b1 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Owner.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Owner.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.endpoint; -import javax.ws.rs.core.HttpHeaders; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Tagging.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Tagging.java index fd48a7dcfe74..5d7981907ba2 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Tagging.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/S3Tagging.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3.endpoint; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import org.apache.hadoop.ozone.s3.util.S3Consts; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/package-info.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/package-info.java index 4bc2b820a655..d86666249063 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/package-info.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/package-info.java @@ -18,11 +18,11 @@ /** * Rest endpoint implementation for the s3 gateway. */ -@javax.xml.bind.annotation.XmlSchema( +@jakarta.xml.bind.annotation.XmlSchema( namespace = S3Consts.S3_XML_NAMESPACE, elementFormDefault = - javax.xml.bind.annotation.XmlNsForm.QUALIFIED, + jakarta.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { - @javax.xml.bind.annotation.XmlNs(namespaceURI = S3Consts.S3_XML_NAMESPACE, prefix = "")}) + @jakarta.xml.bind.annotation.XmlNs(namespaceURI = S3Consts.S3_XML_NAMESPACE, prefix = "")}) package org.apache.hadoop.ozone.s3.endpoint; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/BadRequestExceptionMapper.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/BadRequestExceptionMapper.java index 2218544a37c6..84b52352d645 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/BadRequestExceptionMapper.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/BadRequestExceptionMapper.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3.exception; -import javax.ws.rs.BadRequestException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.BadRequestException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3Exception.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3Exception.java index 2b6affd3c03d..b378fcc4cf4f 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3Exception.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3Exception.java @@ -20,12 +20,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,7 +43,7 @@ public class OS3Exception extends RuntimeException { static { mapper = new XmlMapper(); - mapper.registerModule(new JaxbAnnotationModule()); + mapper.registerModule(new JakartaXmlBindAnnotationModule()); mapper.enable(SerializationFeature.INDENT_OUTPUT); } diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java index 16a529d3f5d6..5e4f20d9dca7 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3.exception; -import javax.inject.Inject; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.apache.hadoop.ozone.s3.RequestIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java index 4533db115307..dddcdabbc588 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AWSSignatureProcessor.java @@ -21,16 +21,16 @@ import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.MALFORMED_HEADER; import com.google.common.annotations.VisibleForTesting; +import jakarta.enterprise.context.RequestScoped; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MultivaluedMap; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import javax.enterprise.context.RequestScoped; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MultivaluedMap; import org.apache.hadoop.ozone.audit.AuditEventStatus; import org.apache.hadoop.ozone.audit.AuditLogger; import org.apache.hadoop.ozone.audit.AuditLoggerType; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthOperation.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthOperation.java index 3d68afa60c65..d767eae436c5 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthOperation.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/AuthOperation.java @@ -17,7 +17,7 @@ package org.apache.hadoop.ozone.s3.signature; -import javax.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestContext; import org.apache.hadoop.ozone.audit.AuditAction; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java index 730481bce214..a45d3c0ae23e 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/SignatureInfo.java @@ -17,7 +17,7 @@ package org.apache.hadoop.ozone.s3.signature; -import javax.enterprise.context.RequestScoped; +import jakarta.enterprise.context.RequestScoped; /** * Signature and related information. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/StringToSignProducer.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/StringToSignProducer.java index 5e1ae4d89cdd..8ada86948068 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/StringToSignProducer.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/signature/StringToSignProducer.java @@ -24,6 +24,8 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.X_AMZ_CONTENT_SHA256; import com.google.common.annotations.VisibleForTesting; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedMap; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -41,8 +43,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.signature.AWSSignatureProcessor.LowerCaseKeyStringMap; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/AuditUtils.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/AuditUtils.java index 978f96ddb35e..c4c26e317f29 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/AuditUtils.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/AuditUtils.java @@ -19,10 +19,10 @@ import static org.apache.hadoop.ozone.s3.ClientIpFilter.CLIENT_IP_HEADER; +import jakarta.ws.rs.container.ContainerRequestContext; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.ws.rs.container.ContainerRequestContext; /** * Common utilities for operation auditing purposes. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java index b72c4adb2d24..e83ca74e031f 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java @@ -30,6 +30,10 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.X_AMZ_CONTENT_SHA256; import jakarta.annotation.Nonnull; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; @@ -37,10 +41,6 @@ import java.util.Base64; import java.util.Objects; import java.util.stream.Collectors; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3AdminEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3AdminEndpoint.java index d91b1dea4fcb..c4164c3a19b2 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3AdminEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3AdminEndpoint.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3secret; +import jakarta.ws.rs.NameBinding; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.ws.rs.NameBinding; /** * Annotation to only allow admin users to access the endpoint. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretAdminFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretAdminFilter.java index 889f466e7dfb..64480ef0ade8 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretAdminFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretAdminFilter.java @@ -17,14 +17,14 @@ package org.apache.hadoop.ozone.s3secret; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.security.Principal; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.server.OzoneAdmins; import org.apache.hadoop.ozone.OzoneSecurityUtil; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabled.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabled.java index c0a5084079f6..74277d9f2670 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabled.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabled.java @@ -17,11 +17,11 @@ package org.apache.hadoop.ozone.s3secret; +import jakarta.ws.rs.NameBinding; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import javax.ws.rs.NameBinding; /** * Annotation to disable S3 Secure Endpoint. diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabledEndpointRequestFilter.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabledEndpointRequestFilter.java index 96d9f4c54258..295954169eda 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabledEndpointRequestFilter.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEnabledEndpointRequestFilter.java @@ -19,12 +19,12 @@ import static org.apache.hadoop.ozone.s3secret.S3SecretConfigKeys.OZONE_S3G_SECRET_HTTP_ENABLED_KEY; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; import org.apache.hadoop.hdds.conf.OzoneConfiguration; /** diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEndpointBase.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEndpointBase.java index c63751c83086..3bc975fbd3d9 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEndpointBase.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretEndpointBase.java @@ -21,12 +21,12 @@ import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_TRANSPORT_CLASS_DEFAULT; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.PostConstruct; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.Context; import java.io.IOException; import java.util.Map; -import javax.annotation.PostConstruct; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.Context; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneSecurityUtil; import org.apache.hadoop.ozone.audit.AuditAction; diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretManagementEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretManagementEndpoint.java index 648c9d26ed00..6b15da601537 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretManagementEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretManagementEndpoint.java @@ -17,17 +17,17 @@ package org.apache.hadoop.ozone.s3secret; -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; -import static javax.ws.rs.core.Response.Status.NOT_FOUND; +import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; +import static jakarta.ws.rs.core.Response.Status.NOT_FOUND; import jakarta.annotation.Nullable; +import jakarta.inject.Inject; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.inject.Inject; -import javax.ws.rs.DELETE; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.audit.S3GAction; import org.apache.hadoop.ozone.om.exceptions.OMException; @@ -76,7 +76,9 @@ private Response generateInternal(@Nullable String username) throws IOException AUDIT.logWriteFailure(buildAuditMessageForFailure( S3GAction.GENERATE_SECRET, getAuditParameters(), e)); if (e.getResult() == OMException.ResultCodes.S3_SECRET_ALREADY_EXISTS) { - return Response.status(BAD_REQUEST.getStatusCode(), e.getResult().toString()).build(); + // Jetty 12 no longer emits custom HTTP reason phrases, so convey the + // error code in the response body instead of the status line. + return Response.status(BAD_REQUEST).entity(e.getResult().toString()).build(); } else { LOG.error("Can't execute get secret request: ", e); return Response.serverError().build(); @@ -113,8 +115,10 @@ private Response revokeInternal(@Nullable String username) AUDIT.logWriteFailure(buildAuditMessageForFailure( S3GAction.REVOKE_SECRET, getAuditParameters(), e)); if (e.getResult() == OMException.ResultCodes.S3_SECRET_NOT_FOUND) { - return Response.status(NOT_FOUND.getStatusCode(), - OMException.ResultCodes.S3_SECRET_NOT_FOUND.toString()) + // Jetty 12 no longer emits custom HTTP reason phrases, so convey the + // error code in the response body instead of the status line. + return Response.status(NOT_FOUND) + .entity(OMException.ResultCodes.S3_SECRET_NOT_FOUND.toString()) .build(); } else { LOG.error("Can't execute revoke secret request: ", e); diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretResponse.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretResponse.java index e3fdb4d6fd74..55af32ee95c6 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretResponse.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3secret/S3SecretResponse.java @@ -17,10 +17,10 @@ package org.apache.hadoop.ozone.s3secret; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * Response with S3 secrets. diff --git a/hadoop-ozone/s3gateway/src/main/resources/META-INF/beans.xml b/hadoop-ozone/s3gateway/src/main/resources/META-INF/beans.xml index cf00d2936afd..f901f9826ba8 100644 --- a/hadoop-ozone/s3gateway/src/main/resources/META-INF/beans.xml +++ b/hadoop-ozone/s3gateway/src/main/resources/META-INF/beans.xml @@ -12,9 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee + https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd" + version="4.0" bean-discovery-mode="all"> \ No newline at end of file diff --git a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3g-web/WEB-INF/web.xml b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3g-web/WEB-INF/web.xml index 092c8a41af5a..dbced94f6712 100644 --- a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3g-web/WEB-INF/web.xml +++ b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3g-web/WEB-INF/web.xml @@ -11,14 +11,14 @@ See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"> secret org.glassfish.jersey.servlet.ServletContainer - javax.ws.rs.Application + jakarta.ws.rs.Application org.apache.hadoop.ozone.s3secret.Application 1 diff --git a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/beans.xml b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/beans.xml index cf00d2936afd..f901f9826ba8 100644 --- a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/beans.xml +++ b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/beans.xml @@ -12,9 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee + https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd" + version="4.0" bean-discovery-mode="all"> \ No newline at end of file diff --git a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/web.xml b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/web.xml index b3d7a72b2cd6..ef9659f0b004 100644 --- a/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/web.xml +++ b/hadoop-ozone/s3gateway/src/main/resources/webapps/s3gateway/WEB-INF/web.xml @@ -11,14 +11,14 @@ See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> - + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"> jaxrs org.glassfish.jersey.servlet.ServletContainer - javax.ws.rs.Application + jakarta.ws.rs.Application org.apache.hadoop.ozone.s3.GatewayApplication 1 @@ -36,6 +36,15 @@ optional-content-type /* + + xml-content-type + org.apache.hadoop.ozone.s3.S3ContentTypeFilter + + + + xml-content-type + /* + org.jboss.weld.environment.servlet.Listener diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java index 5c8c7e0b4485..6c55750c3f1b 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/client/OzoneBucketStub.java @@ -23,6 +23,7 @@ import static org.apache.hadoop.ozone.OzoneConsts.OZONE_URI_DELIMITER; import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.LIFECYCLE_CONFIGURATION_NOT_FOUND; +import jakarta.xml.bind.DatatypeConverter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -39,7 +40,6 @@ import java.util.TreeMap; import java.util.UUID; import java.util.stream.Collectors; -import javax.xml.bind.DatatypeConverter; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.RatisReplicationConfig; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestAuthorizationFilter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestAuthorizationFilter.java index 6df57448cadc..96204359134d 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestAuthorizationFilter.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestAuthorizationFilter.java @@ -35,6 +35,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriInfo; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; @@ -42,11 +47,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.stream.Stream; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.ozone.s3.signature.AWSSignatureProcessor; import org.apache.hadoop.ozone.s3.signature.SignatureInfo; import org.apache.hadoop.ozone.s3.signature.StringToSignProducer; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestEmptyContentTypeFilter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestEmptyContentTypeFilter.java index 1b5479f850b8..2017858555e5 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestEmptyContentTypeFilter.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestEmptyContentTypeFilter.java @@ -24,10 +24,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.servlet.http.HttpServletRequest; import java.util.Collections; import java.util.Vector; import java.util.concurrent.atomic.AtomicReference; -import javax.servlet.http.HttpServletRequest; import org.apache.hadoop.ozone.s3.EmptyContentTypeFilter.EnumerationWrapper; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3ContentTypeFilter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3ContentTypeFilter.java new file mode 100644 index 000000000000..1926a28bcec4 --- /dev/null +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3ContentTypeFilter.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.ozone.s3; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import jakarta.servlet.http.HttpServletResponse; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + +/** + * Tests for {@link S3ContentTypeFilter}. + */ +public class TestS3ContentTypeFilter { + + private HttpServletResponse wrap(HttpServletResponse delegate) throws Exception { + AtomicReference wrapped = new AtomicReference<>(); + new S3ContentTypeFilter().doFilter(mock(jakarta.servlet.http.HttpServletRequest.class), + delegate, (request, response) -> wrapped.set((HttpServletResponse) response)); + return wrapped.get(); + } + + @Test + public void stripsCharsetFromXmlSetHeader() throws Exception { + HttpServletResponse delegate = mock(HttpServletResponse.class); + wrap(delegate).setHeader("Content-Type", "application/xml;charset=utf-8"); + verify(delegate).setHeader("Content-Type", "application/xml"); + } + + @Test + public void stripsCharsetFromXmlSetContentType() throws Exception { + HttpServletResponse delegate = mock(HttpServletResponse.class); + wrap(delegate).setContentType("application/xml;charset=UTF-8"); + verify(delegate).setContentType("application/xml"); + } + + @Test + public void stripsCharsetFromXmlAddHeader() throws Exception { + HttpServletResponse delegate = mock(HttpServletResponse.class); + wrap(delegate).addHeader("Content-Type", "application/xml; charset=utf-8"); + verify(delegate).addHeader("Content-Type", "application/xml"); + } + + @Test + public void leavesNonXmlContentTypeUnchanged() throws Exception { + HttpServletResponse delegate = mock(HttpServletResponse.class); + wrap(delegate).setHeader("Content-Type", "application/json;charset=utf-8"); + verify(delegate).setHeader("Content-Type", "application/json;charset=utf-8"); + } + + @Test + public void leavesOtherHeadersUnchanged() throws Exception { + HttpServletResponse delegate = mock(HttpServletResponse.class); + wrap(delegate).setHeader("ETag", "\"abc\""); + verify(delegate).setHeader("ETag", "\"abc\""); + } +} diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java index 5c0edb6f0847..8db4e8aaf8da 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestVirtualHostStyleFilter.java @@ -26,13 +26,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriInfo; import java.net.URI; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.fs.InvalidRequestException; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.junit.jupiter.api.BeforeEach; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/commontypes/TestObjectKeyNameAdapter.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/commontypes/TestObjectKeyNameAdapter.java index c98d0a27981a..fcde811fda94 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/commontypes/TestObjectKeyNameAdapter.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/commontypes/TestObjectKeyNameAdapter.java @@ -20,7 +20,7 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.ENCODING_TYPE; import static org.junit.jupiter.api.Assertions.assertEquals; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import org.junit.jupiter.api.Test; /** diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBuilder.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBuilder.java index d19390ef9e2f..0795168f8b61 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBuilder.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBuilder.java @@ -20,11 +20,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.UriInfo; import java.util.function.Supplier; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointTestUtils.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointTestUtils.java index c1210ceb8b0e..3cf5ed58ca61 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointTestUtils.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/EndpointTestUtils.java @@ -23,13 +23,13 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestAbortMultipartUpload.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestAbortMultipartUpload.java index f8d6d73204ba..727dd1cdd65f 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestAbortMultipartUpload.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestAbortMultipartUpload.java @@ -25,7 +25,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import javax.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.HttpHeaders; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAcl.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAcl.java index ba16f7acac4d..dc8e36ada870 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAcl.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAcl.java @@ -34,16 +34,16 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneAcl; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneBucket; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAclHandler.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAclHandler.java index 475de95feca7..913b159ed382 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAclHandler.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAclHandler.java @@ -27,13 +27,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.stream.Stream; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketDelete.java index d576a7dedece..08c03acd4d34 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketDelete.java @@ -20,7 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketHead.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketHead.java index dce0a1df03b5..b1e5a02a32b2 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketHead.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketHead.java @@ -21,7 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java index 3ce9e70153a2..02a497bb8cca 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java @@ -27,10 +27,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.xml.bind.JAXB; import java.io.IOException; import java.io.StringWriter; import java.util.stream.IntStream; -import javax.xml.bind.JAXB; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketPut.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketPut.java index e5464e179aa5..0031a0e1240b 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketPut.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketPut.java @@ -26,7 +26,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.BucketArgs; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketResponse.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketResponse.java index 7ca5032154e0..926ee86187dd 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketResponse.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketResponse.java @@ -17,8 +17,8 @@ package org.apache.hadoop.ozone.s3.endpoint; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.Test; /** diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingDelete.java index b8ad60a245e2..64e2abc7f53c 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingDelete.java @@ -28,9 +28,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; import org.apache.hadoop.ozone.s3.exception.OS3Exception; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingGet.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingGet.java index d685e2c7ebfa..f39648b0e1b0 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingGet.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingGet.java @@ -30,9 +30,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; import org.apache.hadoop.ozone.s3.endpoint.S3Tagging.Tag; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingPut.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingPut.java index 6d19c39f20d3..d4a7f0411308 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingPut.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketTaggingPut.java @@ -33,9 +33,9 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; +import jakarta.ws.rs.core.HttpHeaders; import java.io.IOException; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestCompleteMultipartUploadRequestUnmarshaller.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestCompleteMultipartUploadRequestUnmarshaller.java index 859eeb4052b0..d95bba7d535c 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestCompleteMultipartUploadRequestUnmarshaller.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestCompleteMultipartUploadRequestUnmarshaller.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.ws.rs.WebApplicationException; import java.io.ByteArrayInputStream; import java.io.FilterInputStream; import java.io.IOException; @@ -32,7 +33,6 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.CompletableFuture; -import javax.ws.rs.WebApplicationException; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java index 7002fbd09997..d30d345c8019 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestEndpointBase.java @@ -24,12 +24,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.Map; import java.util.stream.Stream; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestInitiateMultipartUpload.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestInitiateMultipartUpload.java index a425c166af4e..4bae4f95c9d2 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestInitiateMultipartUpload.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestInitiateMultipartUpload.java @@ -24,7 +24,7 @@ import static org.mockito.Mockito.when; import jakarta.annotation.Nonnull; -import javax.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.HttpHeaders; import org.apache.hadoop.hdds.client.ECReplicationConfig; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestListParts.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestListParts.java index d9828eb2e8e4..b366db57095c 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestListParts.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestListParts.java @@ -28,9 +28,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadComplete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadComplete.java index e95d8085c2db..f5d62b461b4f 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadComplete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadComplete.java @@ -30,16 +30,16 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java index 8bb2cf3fa623..e60da11c0b22 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestMultipartUploadWithCopy.java @@ -35,6 +35,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -43,8 +45,6 @@ import java.util.List; import java.util.Map; import java.util.Scanner; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.commons.codec.digest.DigestUtils; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationFactor; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectAttributesGet.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectAttributesGet.java index 6c39ac89e1a0..ca31d1edcd90 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectAttributesGet.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectAttributesGet.java @@ -36,11 +36,11 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneBucketStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectDelete.java index 00114e3977c8..d50bfb3657a8 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectDelete.java @@ -29,9 +29,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectGet.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectGet.java index d33e506362cd..a19efa3c088d 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectGet.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectGet.java @@ -44,14 +44,14 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneBucket; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectHead.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectHead.java index 2c1b7f8699cd..3b683a13500e 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectHead.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectHead.java @@ -45,16 +45,16 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.OutputStream; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.stream.Stream; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.RandomStringUtils; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneConsts; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectMultiDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectMultiDelete.java index 1d657460346a..6983d6620c9d 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectMultiDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectMultiDelete.java @@ -23,11 +23,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import com.google.common.collect.Sets; +import jakarta.xml.bind.JAXBException; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; -import javax.xml.bind.JAXBException; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectPut.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectPut.java index 3db0722bc319..e5c3a6aa45da 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectPut.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectPut.java @@ -57,6 +57,11 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @@ -64,11 +69,6 @@ import java.util.Base64; import java.util.Map; import java.util.stream.Stream; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.ECReplicationConfig; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingDelete.java index d60752dfeddb..9011661f64ad 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingDelete.java @@ -32,9 +32,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingGet.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingGet.java index 1f0f0d7b4715..b63b77a47290 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingGet.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingGet.java @@ -30,10 +30,10 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.List; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; import org.apache.hadoop.ozone.s3.endpoint.S3Tagging.Tag; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingPut.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingPut.java index 75ddd97bd241..8c7a8fa05ed7 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingPut.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestObjectTaggingPut.java @@ -32,8 +32,8 @@ import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; +import jakarta.ws.rs.core.HttpHeaders; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneBucket; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPartUpload.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPartUpload.java index 49adfa065117..61223643241e 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPartUpload.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPartUpload.java @@ -37,6 +37,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -45,9 +48,6 @@ import java.util.Base64; import java.util.UUID; import java.util.stream.Stream; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.ozone.OzoneConsts; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPermissionCheck.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPermissionCheck.java index bc9e19db1b6d..02c6f082ec43 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPermissionCheck.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPermissionCheck.java @@ -39,12 +39,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.OzoneConfigKeys; import org.apache.hadoop.ozone.client.ObjectStore; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPutBucketLifecycleConfigurationUnmarshaller.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPutBucketLifecycleConfigurationUnmarshaller.java index 76c67c5e3da8..1e8ddaa6df06 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPutBucketLifecycleConfigurationUnmarshaller.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestPutBucketLifecycleConfigurationUnmarshaller.java @@ -23,8 +23,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import jakarta.ws.rs.WebApplicationException; import java.io.ByteArrayInputStream; -import javax.ws.rs.WebApplicationException; import org.apache.hadoop.ozone.s3.util.S3Consts; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationDelete.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationDelete.java index 5080f192b9c4..99d4be315000 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationDelete.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationDelete.java @@ -23,10 +23,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationGet.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationGet.java index 8e4d0eb88ada..014dfadac6cd 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationGet.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationGet.java @@ -24,10 +24,10 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.fail; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import javax.ws.rs.core.Response; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneClient; import org.apache.hadoop.ozone.client.OzoneClientStub; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationPut.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationPut.java index e923526a0f58..93368bd28dc6 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationPut.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3LifecycleConfigurationPut.java @@ -39,11 +39,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.function.Supplier; -import javax.ws.rs.core.HttpHeaders; import org.apache.hadoop.ozone.client.BucketArgs; import org.apache.hadoop.ozone.client.ObjectStore; import org.apache.hadoop.ozone.client.OzoneBucket; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3Owner.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3Owner.java index fe5b606a480c..06322c9b151d 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3Owner.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestS3Owner.java @@ -23,8 +23,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; import java.util.stream.Stream; -import javax.ws.rs.core.HttpHeaders; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; import org.apache.hadoop.ozone.s3.util.S3Consts; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestUploadWithStream.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestUploadWithStream.java index ddbfeb2b8669..a712a032b780 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestUploadWithStream.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestUploadWithStream.java @@ -31,13 +31,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; import java.io.IOException; import java.io.OutputStream; import java.security.MessageDigest; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.ws.rs.core.HttpHeaders; import org.apache.hadoop.hdds.client.ReplicationConfig; import org.apache.hadoop.hdds.client.ReplicationFactor; import org.apache.hadoop.hdds.client.ReplicationType; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java index 239eb0791392..9c5166a522ca 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java @@ -20,8 +20,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.hadoop.ozone.s3.RequestIdentifier; import org.apache.hadoop.ozone.web.utils.OzoneUtils; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/metrics/TestS3GatewayMetrics.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/metrics/TestS3GatewayMetrics.java index f9bf4df67753..d59e2e0d9d5f 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/metrics/TestS3GatewayMetrics.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/metrics/TestS3GatewayMetrics.java @@ -48,12 +48,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import org.apache.hadoop.metrics2.impl.MetricsCollectorImpl; import org.apache.hadoop.ozone.OzoneConsts; import org.apache.hadoop.ozone.client.OzoneBucket; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestAWSSignatureProcessor.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestAWSSignatureProcessor.java index 7f9681054d29..f90e8ef5179f 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestAWSSignatureProcessor.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestAWSSignatureProcessor.java @@ -24,10 +24,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriInfo; import org.apache.hadoop.ozone.s3.HeaderPreprocessor; import org.apache.hadoop.ozone.s3.exception.S3ErrorTable; import org.junit.jupiter.api.Test; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestStringToSignProducer.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestStringToSignProducer.java index 9a2ce5bce826..d9845a144129 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestStringToSignProducer.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/signature/TestStringToSignProducer.java @@ -25,6 +25,10 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriInfo; import java.net.URI; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; @@ -33,10 +37,6 @@ import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.ozone.s3.HeaderPreprocessor; import org.apache.hadoop.ozone.s3.exception.OS3Exception; import org.apache.hadoop.ozone.s3.signature.AWSSignatureProcessor.LowerCaseKeyStringMap; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java index f178c507ac99..b129c1d1dd4c 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java @@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; +import jakarta.ws.rs.core.MediaType; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.ArrayList; @@ -29,7 +30,6 @@ import java.util.Base64; import java.util.List; import java.util.stream.Stream; -import javax.ws.rs.core.MediaType; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.hdds.client.ECReplicationConfig; diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretGenerate.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretGenerate.java index 72879c45f835..8ac7f47b395a 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretGenerate.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretGenerate.java @@ -17,18 +17,18 @@ package org.apache.hadoop.ozone.s3secret; -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; +import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.notNull; import static org.mockito.Mockito.when; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.UriInfo; import java.io.IOException; import java.security.Principal; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.SecurityContext; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.client.ObjectStoreStub; import org.apache.hadoop.ozone.client.OzoneClient; @@ -105,7 +105,7 @@ void testIfSecretAlreadyExists() throws IOException { assertEquals(BAD_REQUEST.getStatusCode(), response.getStatus()); assertEquals(OMException.ResultCodes.S3_SECRET_ALREADY_EXISTS.toString(), - response.getStatusInfo().getReasonPhrase()); + response.getEntity()); } @Test diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretRevoke.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretRevoke.java index 500cb7272dd6..7a54d0a122f7 100644 --- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretRevoke.java +++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3secret/TestSecretRevoke.java @@ -17,9 +17,9 @@ package org.apache.hadoop.ozone.s3secret; -import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; -import static javax.ws.rs.core.Response.Status.NOT_FOUND; -import static javax.ws.rs.core.Response.Status.OK; +import static jakarta.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; +import static jakarta.ws.rs.core.Response.Status.NOT_FOUND; +import static jakarta.ws.rs.core.Response.Status.OK; import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.ACCESS_DENIED; import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.S3_SECRET_NOT_FOUND; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -30,13 +30,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.MultivaluedHashMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.UriInfo; import java.io.IOException; import java.security.Principal; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.SecurityContext; -import javax.ws.rs.core.UriInfo; import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.ozone.client.ObjectStoreStub; import org.apache.hadoop.ozone.client.OzoneClient; diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java index 251328434510..6a337065d772 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/genconf/GenerateOzoneRequiredConfigurations.java @@ -17,6 +17,9 @@ package org.apache.hadoop.ozone.genconf; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import java.io.File; import java.io.IOException; import java.net.URL; @@ -26,9 +29,6 @@ import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; import org.apache.hadoop.hdds.cli.GenericCli; import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.hdds.conf.OzoneConfiguration; diff --git a/pom.xml b/pom.xml index b6249c17e6bf..d2a3ec41d034 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ - 1.2.2 + 2.1.3 1.3.2 1.0 0.16.1 @@ -44,7 +44,7 @@ 1.85 3.6.1 1.18.12 - 2.0.SP1 + 4.0.1 9.3 true 10.9.1 @@ -85,12 +85,12 @@ 1.15.4 2.14.0 33.6.0-jre - 6.0.0 + 7.0.0 3.4.3 2.10.2 ${hdds.version} ${ozone.version} - 2.6.1 + 3.0.6 4.5.14 4.4.16 1.10.2 @@ -98,19 +98,20 @@ 2.21.6 0.8.15 2.1.1 - 2.6.1 - 2.1.6 + 2.0.1 + 3.1.0 5.2.0 file:///dev/urandom 3.32.0-GA + 3.1.0 1 - 2.3.3 - 2.3.9 + 4.0.2 + 4.0.5 1.0-1 1.14 1.19.4 - 2.48 - 9.4.58.v20250814 + 3.1.12 + 12.0.38 1.4.0 3.9.12 3.30.16 @@ -119,7 +120,6 @@ 2.12.7 3.11.10 0.1.55 - 2.1 1.1.1 5.14.4 2.1.2 @@ -197,7 +197,7 @@ 1.2.26 3.0.1 10.10.1.1 - 3.1.0 + 6.0.0 bash 2.0.18 2.5 @@ -221,7 +221,7 @@ flaky | slow | unhealthy | benchmark 5.1.0 - 3.1.9.Final + 5.1.7.Final 5.4.0 3.8.6 1.5.7-15 @@ -271,6 +271,13 @@ pom import + + org.eclipse.jetty.ee10 + jetty-ee10-bom + ${jetty.version} + pom + import + org.glassfish.jersey jersey-bom @@ -589,6 +596,21 @@ jakarta.annotation-api ${jakarta.annotation.version} + + jakarta.enterprise + jakarta.enterprise.cdi-api + ${cdi-api.version} + + + jakarta.inject + jakarta.inject-api + ${jakarta.inject.version} + + + jakarta.servlet + jakarta.servlet-api + ${servlet-api.version} + jakarta.ws.rs jakarta.ws.rs-api @@ -604,25 +626,17 @@ javax.annotation-api ${annotation-api.version} - - javax.enterprise - cdi-api - ${cdi-api.version} - javax.inject javax.inject ${javax.inject.version} + javax.servlet javax.servlet-api - ${servlet-api.version} - - - javax.servlet.jsp - jsp-api - ${jsp-api.version} + ${javax-servlet-api.version} javax.ws.rs @@ -871,6 +885,14 @@ org.apache.zookeeper zookeeper + + + org.eclipse.jetty + * + org.slf4j * @@ -916,6 +938,14 @@ org.apache.zookeeper zookeeper + + + org.eclipse.jetty + * + org.xerial.snappy snappy-java @@ -1560,11 +1590,6 @@ hk2-api ${hk2.version} - - org.glassfish.hk2.external - jakarta.inject - ${jakarta.inject.version} - org.glassfish.jaxb jaxb-runtime