SLIDER-713 Jersey is simply not setting MIME types on PUT operations, at least 
with the code here


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/f1a2c52d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/f1a2c52d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/f1a2c52d

Branch: refs/heads/develop
Commit: f1a2c52d4931d7a41919625c1a32a04260af4745
Parents: 47416da
Author: Steve Loughran <ste...@apache.org>
Authored: Wed Feb 18 13:35:50 2015 +0000
Committer: Steve Loughran <ste...@apache.org>
Committed: Wed Feb 18 13:35:50 2015 +0000

----------------------------------------------------------------------
 .../rest/SliderApplicationApiRestClient.java       |  4 ++--
 .../slider/core/exceptions/ExceptionConverter.java | 17 ++++++++++++++---
 .../appmaster/web/rest/InsecureAmFilter.java       |  2 +-
 .../web/rest/application/ApplicationResource.java  | 14 +++++++++++---
 .../agent/rest/RestAPIClientTestDelegates.groovy   |  2 +-
 5 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/f1a2c52d/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
 
b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
index a55e640..d304962 100644
--- 
a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
+++ 
b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
@@ -177,12 +177,12 @@ public class SliderApplicationApiRestClient extends 
BaseRestClient
 
       resource.accept(MediaType.APPLICATION_JSON_TYPE);
       // entity to put
-      resource.entity(json, MediaType.APPLICATION_JSON_TYPE);
+      resource.type(MediaType.APPLICATION_JSON_TYPE);
 
       // put operation. The result is discarded; it does help validate
       // that the operation returned a JSON data structure as well as a 200
       // response.
-      resource.put(ConfTree.class);
+      resource.put(ConfTree.class, json);
       //ClientResponse response = resource.put(ClientResponse.class);
     } catch (ClientHandlerException ex) {
         throw ExceptionConverter.convertJerseyException("PUT",

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/f1a2c52d/slider-core/src/main/java/org/apache/slider/core/exceptions/ExceptionConverter.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/core/exceptions/ExceptionConverter.java
 
b/slider-core/src/main/java/org/apache/slider/core/exceptions/ExceptionConverter.java
index 02cc64a..5dbb881 100644
--- 
a/slider-core/src/main/java/org/apache/slider/core/exceptions/ExceptionConverter.java
+++ 
b/slider-core/src/main/java/org/apache/slider/core/exceptions/ExceptionConverter.java
@@ -21,6 +21,7 @@ package org.apache.slider.core.exceptions;
 import com.sun.jersey.api.client.ClientHandlerException;
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.UniformInterfaceException;
+import org.apache.hadoop.fs.InvalidRequestException;
 import org.apache.hadoop.fs.PathAccessDeniedException;
 import org.apache.hadoop.fs.PathIOException;
 import org.apache.hadoop.yarn.webapp.*;
@@ -58,10 +59,20 @@ public class ExceptionConverter {
       if (status == HttpServletResponse.SC_UNAUTHORIZED
           || status == HttpServletResponse.SC_FORBIDDEN) {
         ioe = new PathAccessDeniedException(targetURL);
-      }
-      if (status >= 400 && status < 500) {
+      } else if (status == HttpServletResponse.SC_BAD_REQUEST
+          || status == HttpServletResponse.SC_NOT_ACCEPTABLE
+          || status == HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE) {
+        // bad request
+        ioe = new InvalidRequestException(
+            String.format("Bad %s request: status code %d against %s",
+                verb, status, targetURL));
+      } else if (status > 400 && status < 500) {
         ioe =  new FileNotFoundException(targetURL);
-      }
+      } else {
+        ioe = new PathIOException(targetURL,
+            String.format("%s failed: status code %d against %s",
+                verb, status, targetURL));
+        }
     }
 
     if (ioe == null) {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/f1a2c52d/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/InsecureAmFilter.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/InsecureAmFilter.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/InsecureAmFilter.java
index 6ee3d91..d5b6b36 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/InsecureAmFilter.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/InsecureAmFilter.java
@@ -91,7 +91,7 @@ public class InsecureAmFilter extends AmIpFilter {
     }
     
     if (user == null) {
-      log.warn("Could not find " + WebAppProxyServlet.PROXY_USER_COOKIE_NAME
+      log.debug("Could not find " + WebAppProxyServlet.PROXY_USER_COOKIE_NAME
                + " cookie, so user will not be set");
       chain.doFilter(req, resp);
     } else {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/f1a2c52d/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
index 68e4807..df60782 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
@@ -20,6 +20,7 @@ package 
org.apache.slider.server.appmaster.web.rest.application;
 
 import com.google.common.collect.Lists;
 import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
+import org.apache.hadoop.yarn.webapp.BadRequestException;
 import org.apache.hadoop.yarn.webapp.NotFoundException;
 import org.apache.slider.api.types.ApplicationLivenessInformation;
 import org.apache.slider.api.types.ComponentInformation;
@@ -159,13 +160,20 @@ public class ApplicationResource extends 
AbstractSliderResource {
 
   @PUT
   @Path(MODEL_DESIRED_RESOURCES)
-  @Consumes({APPLICATION_JSON})
+  @Consumes({APPLICATION_JSON, TEXT_PLAIN})
   @Produces({APPLICATION_JSON})
-  public ConfTree putModelDesiredResources(
+  public ConfTree setModelDesiredResources(
       String json) {
     markPut(SLIDER_SUBPATH_APPLICATION, MODEL_DESIRED_RESOURCES);
-    log.info("PUT {}:\n{}", MODEL_DESIRED_RESOURCES,
+    int size = json != null ? json.length() : 0;
+    log.info("PUT {} {} bytes:\n{}", MODEL_DESIRED_RESOURCES,
+        size,
         json);
+    if (size == 0) {
+      log.warn("No JSON in PUT request; rejecting");
+      throw new BadRequestException("No JSON in PUT");
+    }
+    
     try {
       ConfTreeSerDeser serDeser = new ConfTreeSerDeser();
       ConfTree updated = serDeser.fromJson(json);

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/f1a2c52d/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
index b76a0d3..fc3a29e 100644
--- 
a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
+++ 
b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
@@ -69,6 +69,6 @@ class RestAPIClientTestDelegates extends 
AbstractAppApiTestDelegates {
 
   @Override
   void testFlexOperation() {
-//    super.testFlexOperation()
+    super.testFlexOperation()
   }
 }

Reply via email to