HDFS-9724. Degraded performance in WebHDFS listing as it does not reuse ObjectMapper. Contributed by Akira Ajisaka.
This commit is contained in:
parent
e26c58fb4e
commit
e62ca14856
|
@ -87,6 +87,7 @@ import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSelect
|
|||
import org.apache.hadoop.util.Progressable;
|
||||
import org.apache.hadoop.util.StringUtils;
|
||||
import org.codehaus.jackson.map.ObjectMapper;
|
||||
import org.codehaus.jackson.map.ObjectReader;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -128,6 +129,8 @@ public class WebHdfsFileSystem extends FileSystem
|
|||
private InetSocketAddress nnAddrs[];
|
||||
private int currentNNAddrIndex;
|
||||
private boolean disallowFallbackToInsecureCluster;
|
||||
private static final ObjectReader READER =
|
||||
new ObjectMapper().reader(Map.class);
|
||||
|
||||
/**
|
||||
* Return the protocol scheme for the FileSystem.
|
||||
|
@ -368,8 +371,7 @@ public class WebHdfsFileSystem extends FileSystem
|
|||
+ "\" (parsed=\"" + parsed + "\")");
|
||||
}
|
||||
}
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
return mapper.reader(Map.class).readValue(in);
|
||||
return READER.readValue(in);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
|
|
|
@ -1870,6 +1870,9 @@ Release 2.7.3 - UNRELEASED
|
|||
HDFS-9730. Storage ID update does not happen when there is a layout change
|
||||
(Tsz Wo Nicholas Sze via kihwal)
|
||||
|
||||
HDFS-9724. Degraded performance in WebHDFS listing as it does not reuse
|
||||
ObjectMapper. (Akira AJISAKA via wheat9)
|
||||
|
||||
Release 2.7.2 - 2016-01-25
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -38,6 +38,12 @@ import java.util.*;
|
|||
public class JsonUtil {
|
||||
private static final Object[] EMPTY_OBJECT_ARRAY = {};
|
||||
|
||||
// Reuse ObjectMapper instance for improving performance.
|
||||
// ObjectMapper is thread safe as long as we always configure instance
|
||||
// before use. We don't have a re-entrant call pattern in WebHDFS,
|
||||
// so we just need to worry about thread-safety.
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
/** Convert a token object to a Json string. */
|
||||
public static String toJsonString(final Token<? extends TokenIdentifier> token
|
||||
) throws IOException {
|
||||
|
@ -72,9 +78,8 @@ public class JsonUtil {
|
|||
public static String toJsonString(final String key, final Object value) {
|
||||
final Map<String, Object> m = new TreeMap<String, Object>();
|
||||
m.put(key, value);
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
try {
|
||||
return mapper.writeValueAsString(m);
|
||||
return MAPPER.writeValueAsString(m);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
return null;
|
||||
|
@ -116,10 +121,9 @@ public class JsonUtil {
|
|||
m.put("fileId", status.getFileId());
|
||||
m.put("childrenNum", status.getChildrenNum());
|
||||
m.put("storagePolicy", status.getStoragePolicy());
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
try {
|
||||
return includeType ?
|
||||
toJsonString(FileStatus.class, m) : mapper.writeValueAsString(m);
|
||||
toJsonString(FileStatus.class, m) : MAPPER.writeValueAsString(m);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
return null;
|
||||
|
@ -331,9 +335,8 @@ public class JsonUtil {
|
|||
new TreeMap<String, Map<String, Object>>();
|
||||
finalMap.put(AclStatus.class.getSimpleName(), m);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
try {
|
||||
return mapper.writeValueAsString(finalMap);
|
||||
return MAPPER.writeValueAsString(finalMap);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
return null;
|
||||
|
@ -371,8 +374,7 @@ public class JsonUtil {
|
|||
final XAttrCodec encoding) throws IOException {
|
||||
final Map<String, Object> finalMap = new TreeMap<String, Object>();
|
||||
finalMap.put("XAttrs", toJsonArray(xAttrs, encoding));
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
return mapper.writeValueAsString(finalMap);
|
||||
return MAPPER.writeValueAsString(finalMap);
|
||||
}
|
||||
|
||||
public static String toJsonString(final List<XAttr> xAttrs)
|
||||
|
@ -381,10 +383,9 @@ public class JsonUtil {
|
|||
for (XAttr xAttr : xAttrs) {
|
||||
names.add(XAttrHelper.getPrefixedName(xAttr));
|
||||
}
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
String ret = mapper.writeValueAsString(names);
|
||||
String ret = MAPPER.writeValueAsString(names);
|
||||
final Map<String, Object> finalMap = new TreeMap<String, Object>();
|
||||
finalMap.put("XAttrNames", ret);
|
||||
return mapper.writeValueAsString(finalMap);
|
||||
return MAPPER.writeValueAsString(finalMap);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue