You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ar...@apache.org on 2015/11/02 00:38:37 UTC
[1/2] hadoop git commit: HDFS-9343. Empty caller context considered
invalid. (Contributed by Mingliang Liu)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 caa5da06f -> bb2ee9f8e
refs/heads/trunk 7fd641675 -> 3cde6931c
HDFS-9343. Empty caller context considered invalid. (Contributed by Mingliang Liu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/3cde6931
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/3cde6931
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/3cde6931
Branch: refs/heads/trunk
Commit: 3cde6931cb5055a9d92503f4ecefa35571e7b07f
Parents: 7fd6416
Author: Arpit Agarwal <ar...@apache.org>
Authored: Sun Nov 1 15:35:02 2015 -0800
Committer: Arpit Agarwal <ar...@apache.org>
Committed: Sun Nov 1 15:35:02 2015 -0800
----------------------------------------------------------------------
.../java/org/apache/hadoop/ipc/CallerContext.java | 13 ++++++++-----
.../main/java/org/apache/hadoop/util/ProtoUtil.java | 2 +-
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++
.../hadoop/hdfs/server/namenode/FSNamesystem.java | 8 ++++----
.../hadoop/hdfs/server/namenode/TestAuditLogger.java | 15 ++++++++++++---
5 files changed, 28 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3cde6931/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
index 8be7e35..b197575 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
@@ -44,6 +44,7 @@ public class CallerContext {
* {@link org.apache.hadoop.fs.CommonConfigurationKeysPublic#HADOOP_CALLER_CONTEXT_MAX_SIZE_DEFAULT}
*/
private final String context;
+
/** The caller's signature for validation.
*
* The signature is optional. The null or empty signature will be abandoned.
@@ -58,10 +59,6 @@ public class CallerContext {
this.signature = builder.signature;
}
- public boolean isValid() {
- return context != null;
- }
-
public String getContext() {
return context;
}
@@ -71,6 +68,11 @@ public class CallerContext {
null : Arrays.copyOf(signature, signature.length);
}
+ @InterfaceAudience.Private
+ public boolean isContextValid() {
+ return context != null && !context.isEmpty();
+ }
+
@Override
public int hashCode() {
return new HashCodeBuilder().append(context).toHashCode();
@@ -92,9 +94,10 @@ public class CallerContext {
.isEquals();
}
}
+
@Override
public String toString() {
- if (!isValid()) {
+ if (!isContextValid()) {
return "";
}
String str = context;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3cde6931/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
index 4bfcd66..1a5acba 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
@@ -180,7 +180,7 @@ public abstract class ProtoUtil {
// Add caller context if it is not null
CallerContext callerContext = CallerContext.getCurrent();
- if (callerContext != null && callerContext.isValid()) {
+ if (callerContext != null && callerContext.isContextValid()) {
RPCCallerContextProto.Builder contextBuilder = RPCCallerContextProto
.newBuilder().setContext(callerContext.getContext());
if (callerContext.getSignature() != null) {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3cde6931/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 30cdfee..8e6634a 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -2201,6 +2201,9 @@ Release 2.8.0 - UNRELEASED
HDFS-9332. Fix Precondition failures from NameNodeEditLogRoller while
saving namespace. (wang)
+ HDFS-9343. Empty caller context considered invalid. (Mingliang Liu via
+ Arpit Agarwal)
+
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3cde6931/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index 8d70fbc..65b40c8 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -7498,9 +7498,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
sb.append(NamenodeWebHdfsMethods.isWebHdfsInvocation() ? "webhdfs" : "rpc");
if (isCallerContextEnabled &&
callerContext != null &&
- callerContext.isValid() &&
- (callerContext.getSignature() == null ||
- callerContext.getSignature().length <= callerSignatureMaxLen)) {
+ callerContext.isContextValid()) {
sb.append("\t").append("callerContext=");
if (callerContext.getContext().length() > callerContextMaxLen) {
sb.append(callerContext.getContext().substring(0,
@@ -7508,7 +7506,9 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
} else {
sb.append(callerContext.getContext());
}
- if (callerContext.getSignature() != null) {
+ if (callerContext.getSignature() != null &&
+ callerContext.getSignature().length > 0 &&
+ callerContext.getSignature().length <= callerSignatureMaxLen) {
sb.append(":");
sb.append(new String(callerContext.getSignature(),
CallerContext.SIGNATURE_ENCODING));
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3cde6931/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
index 168b9d6..252f7af 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
@@ -243,7 +243,6 @@ public class TestAuditLogger {
CallerContext.setCurrent(context);
LOG.info("Set current caller context as {}", CallerContext.getCurrent());
fs.setTimes(p, time, time);
- System.out.println("LLLLLL" + auditlog.getOutput());
assertTrue(auditlog.getOutput().endsWith("callerContext=setTimes\n"));
auditlog.clearOutput();
@@ -270,6 +269,16 @@ public class TestAuditLogger {
"callerContext=" + longContext.substring(0, 128) + ":L\n"));
auditlog.clearOutput();
+ // empty context is ignored
+ context = new CallerContext.Builder("")
+ .setSignature("L".getBytes(CallerContext.SIGNATURE_ENCODING))
+ .build();
+ CallerContext.setCurrent(context);
+ LOG.info("Set empty caller context");
+ fs.setTimes(p, time, time);
+ assertFalse(auditlog.getOutput().contains("callerContext="));
+ auditlog.clearOutput();
+
// caller context is inherited in child thread
context = new CallerContext.Builder("setTimes")
.setSignature("L".getBytes(CallerContext.SIGNATURE_ENCODING))
@@ -333,14 +342,14 @@ public class TestAuditLogger {
assertTrue(auditlog.getOutput().endsWith("callerContext=mkdirs:L\n"));
auditlog.clearOutput();
- // caller context with too long signature is abandoned
+ // too long signature is ignored
context = new CallerContext.Builder("setTimes")
.setSignature(new byte[41])
.build();
CallerContext.setCurrent(context);
LOG.info("Set current caller context as {}", CallerContext.getCurrent());
fs.setTimes(p, time, time);
- assertFalse(auditlog.getOutput().contains("callerContext="));
+ assertTrue(auditlog.getOutput().endsWith("callerContext=setTimes\n"));
auditlog.clearOutput();
// null signature is ignored
[2/2] hadoop git commit: HDFS-9343. Empty caller context considered
invalid. (Contributed by Mingliang Liu)
Posted by ar...@apache.org.
HDFS-9343. Empty caller context considered invalid. (Contributed by Mingliang Liu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/bb2ee9f8
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/bb2ee9f8
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/bb2ee9f8
Branch: refs/heads/branch-2
Commit: bb2ee9f8eb6193d74954bcb1b32a64d16cc2ea1c
Parents: caa5da0
Author: Arpit Agarwal <ar...@apache.org>
Authored: Sun Nov 1 15:35:02 2015 -0800
Committer: Arpit Agarwal <ar...@apache.org>
Committed: Sun Nov 1 15:35:11 2015 -0800
----------------------------------------------------------------------
.../java/org/apache/hadoop/ipc/CallerContext.java | 13 ++++++++-----
.../main/java/org/apache/hadoop/util/ProtoUtil.java | 2 +-
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++
.../hadoop/hdfs/server/namenode/FSNamesystem.java | 8 ++++----
.../hadoop/hdfs/server/namenode/TestAuditLogger.java | 15 ++++++++++++---
5 files changed, 28 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb2ee9f8/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
index 8be7e35..b197575 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
@@ -44,6 +44,7 @@ public class CallerContext {
* {@link org.apache.hadoop.fs.CommonConfigurationKeysPublic#HADOOP_CALLER_CONTEXT_MAX_SIZE_DEFAULT}
*/
private final String context;
+
/** The caller's signature for validation.
*
* The signature is optional. The null or empty signature will be abandoned.
@@ -58,10 +59,6 @@ public class CallerContext {
this.signature = builder.signature;
}
- public boolean isValid() {
- return context != null;
- }
-
public String getContext() {
return context;
}
@@ -71,6 +68,11 @@ public class CallerContext {
null : Arrays.copyOf(signature, signature.length);
}
+ @InterfaceAudience.Private
+ public boolean isContextValid() {
+ return context != null && !context.isEmpty();
+ }
+
@Override
public int hashCode() {
return new HashCodeBuilder().append(context).toHashCode();
@@ -92,9 +94,10 @@ public class CallerContext {
.isEquals();
}
}
+
@Override
public String toString() {
- if (!isValid()) {
+ if (!isContextValid()) {
return "";
}
String str = context;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb2ee9f8/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
index 4bfcd66..1a5acba 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ProtoUtil.java
@@ -180,7 +180,7 @@ public abstract class ProtoUtil {
// Add caller context if it is not null
CallerContext callerContext = CallerContext.getCurrent();
- if (callerContext != null && callerContext.isValid()) {
+ if (callerContext != null && callerContext.isContextValid()) {
RPCCallerContextProto.Builder contextBuilder = RPCCallerContextProto
.newBuilder().setContext(callerContext.getContext());
if (callerContext.getSignature() != null) {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb2ee9f8/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 40ef124..d879c93 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -1364,6 +1364,9 @@ Release 2.8.0 - UNRELEASED
HDFS-9332. Fix Precondition failures from NameNodeEditLogRoller while
saving namespace. (wang)
+ HDFS-9343. Empty caller context considered invalid. (Mingliang Liu via
+ Arpit Agarwal)
+
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb2ee9f8/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index 2c09a2b..5966a36 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -7362,9 +7362,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
sb.append(NamenodeWebHdfsMethods.isWebHdfsInvocation() ? "webhdfs" : "rpc");
if (isCallerContextEnabled &&
callerContext != null &&
- callerContext.isValid() &&
- (callerContext.getSignature() == null ||
- callerContext.getSignature().length <= callerSignatureMaxLen)) {
+ callerContext.isContextValid()) {
sb.append("\t").append("callerContext=");
if (callerContext.getContext().length() > callerContextMaxLen) {
sb.append(callerContext.getContext().substring(0,
@@ -7372,7 +7370,9 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
} else {
sb.append(callerContext.getContext());
}
- if (callerContext.getSignature() != null) {
+ if (callerContext.getSignature() != null &&
+ callerContext.getSignature().length > 0 &&
+ callerContext.getSignature().length <= callerSignatureMaxLen) {
sb.append(":");
sb.append(new String(callerContext.getSignature(),
CallerContext.SIGNATURE_ENCODING));
http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb2ee9f8/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
index 168b9d6..252f7af 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestAuditLogger.java
@@ -243,7 +243,6 @@ public class TestAuditLogger {
CallerContext.setCurrent(context);
LOG.info("Set current caller context as {}", CallerContext.getCurrent());
fs.setTimes(p, time, time);
- System.out.println("LLLLLL" + auditlog.getOutput());
assertTrue(auditlog.getOutput().endsWith("callerContext=setTimes\n"));
auditlog.clearOutput();
@@ -270,6 +269,16 @@ public class TestAuditLogger {
"callerContext=" + longContext.substring(0, 128) + ":L\n"));
auditlog.clearOutput();
+ // empty context is ignored
+ context = new CallerContext.Builder("")
+ .setSignature("L".getBytes(CallerContext.SIGNATURE_ENCODING))
+ .build();
+ CallerContext.setCurrent(context);
+ LOG.info("Set empty caller context");
+ fs.setTimes(p, time, time);
+ assertFalse(auditlog.getOutput().contains("callerContext="));
+ auditlog.clearOutput();
+
// caller context is inherited in child thread
context = new CallerContext.Builder("setTimes")
.setSignature("L".getBytes(CallerContext.SIGNATURE_ENCODING))
@@ -333,14 +342,14 @@ public class TestAuditLogger {
assertTrue(auditlog.getOutput().endsWith("callerContext=mkdirs:L\n"));
auditlog.clearOutput();
- // caller context with too long signature is abandoned
+ // too long signature is ignored
context = new CallerContext.Builder("setTimes")
.setSignature(new byte[41])
.build();
CallerContext.setCurrent(context);
LOG.info("Set current caller context as {}", CallerContext.getCurrent());
fs.setTimes(p, time, time);
- assertFalse(auditlog.getOutput().contains("callerContext="));
+ assertTrue(auditlog.getOutput().endsWith("callerContext=setTimes\n"));
auditlog.clearOutput();
// null signature is ignored