FALCON-885 RequestID is coming as null for all instance API calls. Contributed by Venkatesh Seetharam
Project: http://git-wip-us.apache.org/repos/asf/incubator-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-falcon/commit/fc3094a8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-falcon/tree/fc3094a8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-falcon/diff/fc3094a8 Branch: refs/heads/master Commit: fc3094a8bed22d3b28609d5c1d69cc85d9e16034 Parents: ff7b5a7 Author: Venkatesh Seetharam <venkat...@apache.org> Authored: Thu Nov 13 18:15:48 2014 -0800 Committer: Venkatesh Seetharam <venkat...@apache.org> Committed: Thu Nov 13 18:15:48 2014 -0800 ---------------------------------------------------------------------- CHANGES.txt | 3 +++ .../org/apache/falcon/resource/APIResult.java | 10 +--------- .../falcon/security/FalconAuditFilter.java | 19 +++++++++++-------- .../security/FalconAuthorizationFilter.java | 2 ++ .../java/org/apache/falcon/util/Servlets.java | 2 ++ 5 files changed, 19 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/fc3094a8/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 9bd7d4d..443eb65 100755 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -144,6 +144,9 @@ Trunk (Unreleased) OPTIMIZATIONS BUG FIXES + FALCON-885 RequestID is coming as null for all instance API calls + (Venkatesh Seetharam) + FALCON-880 Oozie Java actions for hive tables fail in secure mode (Venkatesh Seetharam) http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/fc3094a8/client/src/main/java/org/apache/falcon/resource/APIResult.java ---------------------------------------------------------------------- diff --git a/client/src/main/java/org/apache/falcon/resource/APIResult.java b/client/src/main/java/org/apache/falcon/resource/APIResult.java index 3b89040..e67eb3a 100644 --- a/client/src/main/java/org/apache/falcon/resource/APIResult.java +++ b/client/src/main/java/org/apache/falcon/resource/APIResult.java @@ -18,8 +18,6 @@ package org.apache.falcon.resource; -import org.apache.log4j.NDC; - import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; @@ -27,7 +25,6 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.StringWriter; -import java.util.UUID; /** * APIResult is the output returned by all the APIs; status-SUCCEEDED or FAILED @@ -65,12 +62,7 @@ public class APIResult { super(); this.status = status; this.message = message; - requestId = NDC.peek(); - try { - UUID.fromString(requestId); - } catch (IllegalArgumentException e) { - requestId = null; - } + requestId = Thread.currentThread().getName(); } protected APIResult() { http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/fc3094a8/prism/src/main/java/org/apache/falcon/security/FalconAuditFilter.java ---------------------------------------------------------------------- diff --git a/prism/src/main/java/org/apache/falcon/security/FalconAuditFilter.java b/prism/src/main/java/org/apache/falcon/security/FalconAuditFilter.java index c1e54b8..7d40b6f 100644 --- a/prism/src/main/java/org/apache/falcon/security/FalconAuditFilter.java +++ b/prism/src/main/java/org/apache/falcon/security/FalconAuditFilter.java @@ -21,7 +21,6 @@ package org.apache.falcon.security; import org.apache.falcon.aspect.GenericAlert; import org.apache.falcon.entity.v0.SchemaHelper; import org.apache.falcon.util.Servlets; -import org.apache.log4j.NDC; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,8 +44,6 @@ public class FalconAuditFilter implements Filter { private static final Logger LOG = LoggerFactory.getLogger(FalconAuditFilter.class); - public static final String REQUEST_ID = "requestId"; - @Override public void init(FilterConfig filterConfig) throws ServletException { LOG.info("FalconAuditFilter initialization started"); @@ -57,22 +54,28 @@ public class FalconAuditFilter implements Filter { ServletResponse response, FilterChain filterChain) throws IOException, ServletException { final String requestTimeISO9601 = SchemaHelper.formatDateUTC(new Date()); - // generate a unique id and shove it into NDC + final HttpServletRequest httpRequest = (HttpServletRequest) request; final String requestId = UUID.randomUUID().toString(); - NDC.push(requestId); + final Thread currentThread = Thread.currentThread(); + final String oldName = currentThread.getName(); try { + currentThread.setName(formatName(oldName, requestId)); filterChain.doFilter(request, response); } finally { - recordAudit((HttpServletRequest) request, requestTimeISO9601); + recordAudit(httpRequest, requestTimeISO9601); // put the request id into the response so users can trace logs for this request - ((HttpServletResponse) response).setHeader(REQUEST_ID, requestId); - NDC.pop(); + ((HttpServletResponse) response).setHeader(Servlets.REQUEST_ID, requestId); CurrentUser.clear(); + currentThread.setName(oldName); } } + private String formatName(String oldName, String requestId) { + return oldName + " - " + requestId; + } + private void recordAudit(HttpServletRequest httpRequest, String whenISO9601) { final String who = getUserFromRequest(httpRequest); final String fromHost = httpRequest.getRemoteHost(); http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/fc3094a8/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java ---------------------------------------------------------------------- diff --git a/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java b/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java index a3b7b9c..fb30507 100644 --- a/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java +++ b/prism/src/main/java/org/apache/falcon/security/FalconAuthorizationFilter.java @@ -23,6 +23,7 @@ import org.apache.falcon.entity.EntityNotRegisteredException; import org.apache.falcon.entity.EntityUtil; import org.apache.falcon.entity.v0.Entity; import org.apache.falcon.entity.v0.EntityType; +import org.apache.falcon.util.Servlets; import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.authorize.AuthorizationException; import org.codehaus.jettison.json.JSONException; @@ -165,6 +166,7 @@ public class FalconAuthorizationFilter implements Filter { JSONObject response = new JSONObject(); response.put("errorCode", errorCode); response.put("errorMessage", errorMessage); + response.put(Servlets.REQUEST_ID, Thread.currentThread().getName()); return response.toString(); } catch (JSONException e) { throw new IOException(e); http://git-wip-us.apache.org/repos/asf/incubator-falcon/blob/fc3094a8/prism/src/main/java/org/apache/falcon/util/Servlets.java ---------------------------------------------------------------------- diff --git a/prism/src/main/java/org/apache/falcon/util/Servlets.java b/prism/src/main/java/org/apache/falcon/util/Servlets.java index 0df2dda..37766f0 100644 --- a/prism/src/main/java/org/apache/falcon/util/Servlets.java +++ b/prism/src/main/java/org/apache/falcon/util/Servlets.java @@ -27,6 +27,8 @@ import javax.servlet.http.HttpServletRequest; */ public final class Servlets { + public static final String REQUEST_ID = "requestId"; + private Servlets() { /* singleton */ }