You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-issues@hadoop.apache.org by "Elek, Marton (JIRA)" <ji...@apache.org> on 2018/09/13 09:25:00 UTC

[jira] [Commented] (HDDS-444) Add rest service to the s3gateway

    [ https://issues.apache.org/jira/browse/HDDS-444?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16613239#comment-16613239 ] 

Elek, Marton commented on HDDS-444:
-----------------------------------

Marked as newbie, not because it's a simple task, but it doesn't require and deep knowledge about Ozone. It requires just standard Java/JAX-RS/Jetty  skills.

As usual, I would be happy to explain the problem further, if somebody is interested.

> Add rest service to the s3gateway
> ---------------------------------
>
>                 Key: HDDS-444
>                 URL: https://issues.apache.org/jira/browse/HDDS-444
>             Project: Hadoop Distributed Data Store
>          Issue Type: Sub-task
>            Reporter: Elek, Marton
>            Priority: Major
>              Labels: newbie
>
> The next step is after HDDS-441 is to add a rest server to the s3gateway service.
> For the http server the obvious choice is to use org.apache.hadoop.http.HttpServer2. We also have a org.apache.hadoop.hdds.server.BaseHttpServer which helps to create the HttpServer2.
> In hadoop usually the jersey 1.19 is used. I prefer to exclude jersey dependency from the s3gateway and add the latest jersey2. Hopefully it also could be initialized easily, similar to HttpServer2.addJerseyResourcePackage
> The trickiest part is the resource handling. By default the input parameter of the jersey is the JAX-RS resource class and jersey creates new instances from the specified resource classes.
> But with this approach we can't inject other components (such as the OzoneClient) to the resource classes. In Hadoop usually a singleton is used or the reference object is injected to the ServletContext. Both of these are just workaround and make the testing harder.
> I propose to use some lightweight managed dependency injection:
>  # If we can use and JettyApi to instantiate the resource classes, that would be the easiest one.
>  # Using a simple CDI framework like dagger, also would help. Dagger is very lightweight, it doesn't support request scoped objects just simple @Inject annotations, but hopefully we won't need fancy new features.
>  # The most complex solution would be to use CDI or Guice. CDI seems to be more nature choice for the JAX-RS. It can be checked how easy is to integrate Weld to the Jetty + Jersey combo.
> The expected end result of this task is a new HttpServer subcomponent inside the s3gateway which could be started/stopped. We need an example simple service (for exampe a /health endpoint which returns with an 'OK' string) which can demonstrate how our own utilitites (such as OzoneClient) could be injected to the REST resources.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org