You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@twill.apache.org by ch...@apache.org on 2017/04/03 22:28:09 UTC

twill git commit: (TWILL-176) Redirect all requests to tracker URL to /resources path

Repository: twill
Updated Branches:
  refs/heads/master c8e2a615a -> 10fff16c0


(TWILL-176) Redirect all requests to tracker URL to /resources path

- "/resources" is the only path supported for the tracker service for now

This fixes #52 on Github.

Signed-off-by: Terence Yim <ch...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/twill/repo
Commit: http://git-wip-us.apache.org/repos/asf/twill/commit/10fff16c
Tree: http://git-wip-us.apache.org/repos/asf/twill/tree/10fff16c
Diff: http://git-wip-us.apache.org/repos/asf/twill/diff/10fff16c

Branch: refs/heads/master
Commit: 10fff16c07ca7e47f413b1965e72d5544e712433
Parents: c8e2a61
Author: Terence Yim <ch...@apache.org>
Authored: Mon Apr 3 14:42:44 2017 -0700
Committer: Terence Yim <ch...@apache.org>
Committed: Mon Apr 3 15:10:45 2017 -0700

----------------------------------------------------------------------
 .../internal/json/ResourceReportAdapter.java    |  1 +
 .../internal/appmaster/TrackerService.java      | 37 +++++++++++---------
 2 files changed, 22 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/twill/blob/10fff16c/twill-core/src/main/java/org/apache/twill/internal/json/ResourceReportAdapter.java
----------------------------------------------------------------------
diff --git a/twill-core/src/main/java/org/apache/twill/internal/json/ResourceReportAdapter.java b/twill-core/src/main/java/org/apache/twill/internal/json/ResourceReportAdapter.java
index 4427704..7484f7a 100644
--- a/twill-core/src/main/java/org/apache/twill/internal/json/ResourceReportAdapter.java
+++ b/twill-core/src/main/java/org/apache/twill/internal/json/ResourceReportAdapter.java
@@ -39,6 +39,7 @@ public final class ResourceReportAdapter {
   private ResourceReportAdapter() {
     gson = new GsonBuilder()
               .serializeNulls()
+              .setPrettyPrinting()
               .registerTypeAdapter(TwillRunResources.class, new TwillRunResourcesCodec())
               .registerTypeAdapter(ResourceReport.class, new ResourceReportCodec())
               .create();

http://git-wip-us.apache.org/repos/asf/twill/blob/10fff16c/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/TrackerService.java
----------------------------------------------------------------------
diff --git a/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/TrackerService.java b/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/TrackerService.java
index d3f7c86..f91efcc 100644
--- a/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/TrackerService.java
+++ b/twill-yarn/src/main/java/org/apache/twill/internal/appmaster/TrackerService.java
@@ -61,6 +61,7 @@ import java.io.Writer;
 import java.net.InetSocketAddress;
 import java.net.URI;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
@@ -178,33 +179,33 @@ public final class TrackerService extends AbstractIdleService {
   final class ReportHandler extends SimpleChannelUpstreamHandler {
     private final ResourceReportAdapter reportAdapter;
 
-    public ReportHandler() {
+    ReportHandler() {
       this.reportAdapter = ResourceReportAdapter.create();
     }
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
       HttpRequest request = (HttpRequest) e.getMessage();
-      if (!isValid(request)) {
-        write404(e);
+      if (request.getMethod() != HttpMethod.GET) {
+        HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.METHOD_NOT_ALLOWED);
+        response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "text/plain; charset=UTF-8");
+        response.setContent(ChannelBuffers.wrappedBuffer("Only GET is supported".getBytes(StandardCharsets.UTF_8)));
+        writeResponse(e.getChannel(), response);
         return;
       }
 
-      writeResponse(e);
-    }
-
-    // only accepts GET on /resources for now
-    private boolean isValid(HttpRequest request) {
-      return (request.getMethod() == HttpMethod.GET) && PATH.equals(request.getUri());
-    }
+      if (!PATH.equals(request.getUri())) {
+        // Redirect all GET call to the /resources path.
+        HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.TEMPORARY_REDIRECT);
+        response.setHeader(HttpHeaders.Names.LOCATION, PATH);
+        writeResponse(e.getChannel(), response);
+        return;
+      }
 
-    private void write404(MessageEvent e) {
-      HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.NOT_FOUND);
-      ChannelFuture future = e.getChannel().write(response);
-      future.addListener(ChannelFutureListener.CLOSE);
+      writeResourceReport(e.getChannel());
     }
 
-    private void writeResponse(MessageEvent e) {
+    private void writeResourceReport(Channel channel) {
       HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
       response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/json; charset=UTF-8");
 
@@ -217,7 +218,11 @@ public final class TrackerService extends AbstractIdleService {
         LOG.error("error writing resource report", e1);
       }
       response.setContent(content);
-      ChannelFuture future = e.getChannel().write(response);
+      writeResponse(channel, response);
+    }
+
+    private void writeResponse(Channel channel, HttpResponse response) {
+      ChannelFuture future = channel.write(response);
       future.addListener(ChannelFutureListener.CLOSE);
     }