HDFS-8686. WebHdfsFileSystem#getXAttr(Path p, final String name) doesn't work if namespace is in capitals (Contributed by kanaka kumar avvaru)

This commit is contained in:
Vinayakumar B 2015-07-06 16:09:24 +05:30
parent 233cab89ad
commit fc92d3e651
5 changed files with 25 additions and 2 deletions

View File

@ -413,6 +413,20 @@ static byte[] getXAttr(final Map<?, ?> json, final String name)
return null;
}
/** Expecting only single XAttr in the map. return its value */
static byte[] getXAttr(final Map<?, ?> json) throws IOException {
if (json == null) {
return null;
}
Map<String, byte[]> xAttrs = toXAttrs(json);
if (xAttrs != null && !xAttrs.values().isEmpty()) {
return xAttrs.values().iterator().next();
}
return null;
}
static Map<String, byte[]> toXAttrs(final Map<?, ?> json)
throws IOException {
if (json == null) {

View File

@ -963,7 +963,7 @@ public byte[] getXAttr(Path p, final String name) throws IOException {
new XAttrEncodingParam(XAttrCodec.HEX)) {
@Override
byte[] decodeResponse(Map<?, ?> json) throws IOException {
return JsonUtilClient.getXAttr(json, name);
return JsonUtilClient.getXAttr(json);
}
}.run();
}

View File

@ -1005,6 +1005,9 @@ Release 2.8.0 - UNRELEASED
HDFS-8577. Avoid retrying to recover lease on a file which does not exist
(J.Andreina via vinayakumarb)
HDFS-8686. WebHdfsFileSystem#getXAttr(Path p, final String name) doesn't
work if namespace is in capitals (kanaka kumar avvaru via vinayakumarb)
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -396,6 +396,9 @@ public void testGetXAttrs() throws Exception {
fs.setXAttr(path, name1, value1, EnumSet.of(XAttrSetFlag.CREATE));
fs.setXAttr(path, name2, value2, EnumSet.of(XAttrSetFlag.CREATE));
final byte[] theValue = fs.getXAttr(path, "USER.a2");
Assert.assertArrayEquals(value2, theValue);
/* An XAttr that was requested does not exist. */
try {
final byte[] value = fs.getXAttr(path, name3);

View File

@ -231,6 +231,9 @@ public void testWithWebHdfsFileSystem() throws Exception {
"user.attr1"));
assertEquals("value1", value);
value = new String(webhdfs.getXAttr(new Path("/dir1"), "USER.attr1"));
assertEquals("value1", value);
Map<String, byte[]> contentMap = webhdfs.getXAttrs(new Path("/dir1"),
names);