Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0FF40946C for ; Wed, 5 Oct 2011 11:31:24 +0000 (UTC) Received: (qmail 38813 invoked by uid 500); 5 Oct 2011 11:31:23 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 38762 invoked by uid 500); 5 Oct 2011 11:31:23 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 38755 invoked by uid 99); 5 Oct 2011 11:31:23 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Oct 2011 11:31:23 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Oct 2011 11:31:18 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 42E99238897D for ; Wed, 5 Oct 2011 11:30:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1179171 - in /hadoop/common/branches/branch-0.20-security: ./ src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/ src/hdfs/org/apache/hadoop/hdfs/web/ src/test/org/apache/hadoop/hdfs/web/ Date: Wed, 05 Oct 2011 11:30:55 -0000 To: common-commits@hadoop.apache.org From: szetszwo@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111005113056.42E99238897D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: szetszwo Date: Wed Oct 5 11:30:54 2011 New Revision: 1179171 URL: http://svn.apache.org/viewvc?rev=1179171&view=rev Log: HDFS-2395. Add a root element in the JSON responses of webhdfs. Modified: hadoop/common/branches/branch-0.20-security/CHANGES.txt hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/JsonUtil.java hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/web/TestJsonUtil.java Modified: hadoop/common/branches/branch-0.20-security/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/CHANGES.txt?rev=1179171&r1=1179170&r2=1179171&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/CHANGES.txt (original) +++ hadoop/common/branches/branch-0.20-security/CHANGES.txt Wed Oct 5 11:30:54 2011 @@ -395,6 +395,9 @@ Release 0.20.205.0 - unreleased HADOOP-7720. Added parameter for HBase user to setup config script. (Arpit Gupta via Eric Yang) + HDFS-2395. Add a root element in the JSON responses of webhdfs. + (szetszwo) + Release 0.20.204.0 - 2011-8-25 NEW FEATURES Modified: hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java?rev=1179171&r1=1179170&r2=1179171&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java (original) +++ hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/server/namenode/web/resources/NamenodeWebHdfsMethods.java Wed Oct 5 11:30:54 2011 @@ -236,19 +236,19 @@ public class NamenodeWebHdfsMethods { case MKDIRS: { final boolean b = namenode.mkdirs(fullpath, permission.getFsPermission()); - final String js = JsonUtil.toJsonString(PutOpParam.Op.MKDIRS, b); + final String js = JsonUtil.toJsonString("boolean", b); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } case RENAME: { final boolean b = namenode.rename(fullpath, dstPath.getValue()); - final String js = JsonUtil.toJsonString(PutOpParam.Op.RENAME, b); + final String js = JsonUtil.toJsonString("boolean", b); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } case SETREPLICATION: { final boolean b = namenode.setReplication(fullpath, replication.getValue()); - final String js = JsonUtil.toJsonString(PutOpParam.Op.SETREPLICATION, b); + final String js = JsonUtil.toJsonString("boolean", b); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } case SETOWNER: @@ -271,7 +271,7 @@ public class NamenodeWebHdfsMethods { final Token token = new Token(); token.decodeFromUrlString(delegation.getValue()); final long expiryTime = namenode.renewDelegationToken(token); - final String js = JsonUtil.toJsonString(PutOpParam.Op.RENEWDELEGATIONTOKEN, expiryTime); + final String js = JsonUtil.toJsonString("long", expiryTime); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } case CANCELDELEGATIONTOKEN: @@ -476,7 +476,7 @@ public class NamenodeWebHdfsMethods { @Override public void write(final OutputStream outstream) throws IOException { final PrintStream out = new PrintStream(outstream); - out.print('['); + out.println("{\"" + HdfsFileStatus[].class.getSimpleName() + "\":["); final HdfsFileStatus[] partial = first.getPartialListing(); if (partial.length > 0) { @@ -495,7 +495,7 @@ public class NamenodeWebHdfsMethods { } } - out.println(']'); + out.println("]}"); } }; } @@ -531,7 +531,7 @@ public class NamenodeWebHdfsMethods { case DELETE: { final boolean b = namenode.delete(fullpath, recursive.getValue()); - final String js = JsonUtil.toJsonString(DeleteOpParam.Op.DELETE, b); + final String js = JsonUtil.toJsonString("boolean", b); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } default: Modified: hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/JsonUtil.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/JsonUtil.java?rev=1179171&r1=1179170&r2=1179171&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/JsonUtil.java (original) +++ hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/JsonUtil.java Wed Oct 5 11:30:54 2011 @@ -42,42 +42,29 @@ import org.apache.hadoop.io.MD5Hash; import org.apache.hadoop.ipc.RemoteException; import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.TokenIdentifier; +import org.apache.hadoop.util.StringUtils; import org.mortbay.util.ajax.JSON; /** JSON Utilities */ public class JsonUtil { - private static class ThreadLocalMap extends ThreadLocal> { - @Override - protected Map initialValue() { - return new TreeMap(); - } - - @Override - public Map get() { - final Map m = super.get(); - m.clear(); - return m; - } - } - - private static final ThreadLocalMap jsonMap = new ThreadLocalMap(); - private static final ThreadLocalMap tokenMap = new ThreadLocalMap(); - private static final ThreadLocalMap datanodeInfoMap = new ThreadLocalMap(); - private static final ThreadLocalMap BlockMap = new ThreadLocalMap(); - private static final ThreadLocalMap locatedBlockMap = new ThreadLocalMap(); - + private static final Object[] EMPTY_OBJECT_ARRAY = {}; private static final DatanodeInfo[] EMPTY_DATANODE_INFO_ARRAY = {}; /** Convert a token object to a Json string. */ public static String toJsonString(final Token token ) throws IOException { + return toJsonString(Token.class, toJsonMap(token)); + } + + private static Map toJsonMap( + final Token token) throws IOException { if (token == null) { return null; } - final Map m = tokenMap.get(); + final Map m = new TreeMap(); m.put("urlString", token.encodeToUrlString()); - return JSON.toString(m); + return m; } /** Convert a Json map to a Token. */ @@ -96,46 +83,52 @@ public class JsonUtil { /** Convert a Json map to a Token of DelegationTokenIdentifier. */ @SuppressWarnings("unchecked") public static Token toDelegationToken( - final Map m) throws IOException { + final Map json) throws IOException { + final Map m = (Map)json.get(Token.class.getSimpleName()); return (Token)toToken(m); } /** Convert a Json map to a Token of BlockTokenIdentifier. */ @SuppressWarnings("unchecked") - public static Token toBlockToken( + private static Token toBlockToken( final Map m) throws IOException { return (Token)toToken(m); } /** Convert an exception object to a Json string. */ public static String toJsonString(final Exception e) { - final Map m = jsonMap.get(); + final Map m = new TreeMap(); m.put("className", e.getClass().getName()); m.put("message", e.getMessage()); - return JSON.toString(m); + return toJsonString(RemoteException.class, m); } /** Convert a Json map to a RemoteException. */ - public static RemoteException toRemoteException(final Map m) { + public static RemoteException toRemoteException(final Map json) { + final Map m = (Map)json.get(RemoteException.class.getSimpleName()); final String className = (String)m.get("className"); final String message = (String)m.get("message"); return new RemoteException(className, message); } + private static String toJsonString(final Class clazz, final Object value) { + return toJsonString(clazz.getSimpleName(), value); + } + /** Convert a key-value pair to a Json string. */ - public static String toJsonString(final Object key, final Object value) { - final Map m = jsonMap.get(); - m.put(key instanceof String ? (String) key : key.toString(), value); + public static String toJsonString(final String key, final Object value) { + final Map m = new TreeMap(); + m.put(key, value); return JSON.toString(m); } /** Convert a FsPermission object to a string. */ - public static String toString(final FsPermission permission) { + private static String toString(final FsPermission permission) { return String.format("%o", permission.toShort()); } /** Convert a string to a FsPermission object. */ - public static FsPermission toFsPermission(final String s) { + private static FsPermission toFsPermission(final String s) { return new FsPermission(Short.parseShort(s, 8)); } @@ -144,7 +137,7 @@ public class JsonUtil { if (status == null) { return null; } else { - final Map m = jsonMap.get(); + final Map m = new TreeMap(); m.put("localName", status.getLocalName()); m.put("isDir", status.isDir()); m.put("len", status.getLen()); @@ -155,21 +148,17 @@ public class JsonUtil { m.put("modificationTime", status.getModificationTime()); m.put("blockSize", status.getBlockSize()); m.put("replication", status.getReplication()); - return JSON.toString(m); + return toJsonString(HdfsFileStatus.class, m); } } - @SuppressWarnings("unchecked") - static Map parse(String jsonString) { - return (Map) JSON.parse(jsonString); - } - /** Convert a Json map to a HdfsFileStatus object. */ - public static HdfsFileStatus toFileStatus(final Map m) { - if (m == null) { + public static HdfsFileStatus toFileStatus(final Map json) { + if (json == null) { return null; } + final Map m = (Map)json.get(HdfsFileStatus.class.getSimpleName()); final String localName = (String) m.get("localName"); final boolean isDir = (Boolean) m.get("isDir"); final long len = (Long) m.get("len"); @@ -184,21 +173,21 @@ public class JsonUtil { permission, owner, group, DFSUtil.string2Bytes(localName)); } - /** Convert a LocatedBlock to a Json string. */ - public static String toJsonString(final Block Block) { - if (Block == null) { + /** Convert a Block to a Json map. */ + private static Map toJsonMap(final Block block) { + if (block == null) { return null; } - final Map m = BlockMap.get(); - m.put("blockId", Block.getBlockId()); - m.put("numBytes", Block.getNumBytes()); - m.put("generationStamp", Block.getGenerationStamp()); - return JSON.toString(m); + final Map m = new TreeMap(); + m.put("blockId", block.getBlockId()); + m.put("numBytes", block.getNumBytes()); + m.put("generationStamp", block.getGenerationStamp()); + return m; } /** Convert a Json map to an Block object. */ - public static Block toBlock(final Map m) { + private static Block toBlock(final Map m) { if (m == null) { return null; } @@ -209,13 +198,13 @@ public class JsonUtil { return new Block(blockId, numBytes, generationStamp); } - /** Convert a DatanodeInfo to a Json string. */ - public static String toJsonString(final DatanodeInfo datanodeinfo) { + /** Convert a DatanodeInfo to a Json map. */ + private static Map toJsonMap(final DatanodeInfo datanodeinfo) { if (datanodeinfo == null) { return null; } - final Map m = datanodeInfoMap.get(); + final Map m = new TreeMap(); m.put("name", datanodeinfo.getName()); m.put("storageID", datanodeinfo.getStorageID()); m.put("infoPort", datanodeinfo.getInfoPort()); @@ -230,11 +219,11 @@ public class JsonUtil { m.put("networkLocation", datanodeinfo.getNetworkLocation()); m.put("hostName", datanodeinfo.getHostName()); m.put("adminState", datanodeinfo.getAdminState().name()); - return JSON.toString(m); + return m; } /** Convert a Json map to an DatanodeInfo object. */ - public static DatanodeInfo toDatanodeInfo(final Map m) { + private static DatanodeInfo toDatanodeInfo(final Map m) { if (m == null) { return null; } @@ -255,25 +244,23 @@ public class JsonUtil { AdminStates.valueOf((String)m.get("adminState"))); } - /** Convert a DatanodeInfo[] to a Json string. */ - public static String toJsonString(final DatanodeInfo[] array - ) throws IOException { + /** Convert a DatanodeInfo[] to a Json array. */ + private static Object[] toJsonArray(final DatanodeInfo[] array) { if (array == null) { return null; } else if (array.length == 0) { - return "[]"; + return EMPTY_OBJECT_ARRAY; } else { - final StringBuilder b = new StringBuilder().append('[').append( - toJsonString(array[0])); - for(int i = 1; i < array.length; i++) { - b.append(", ").append(toJsonString(array[i])); + final Object[] a = new Object[array.length]; + for(int i = 0; i < array.length; i++) { + a[i] = toJsonMap(array[i]); } - return b.append(']').toString(); + return a; } } /** Convert an Object[] to a DatanodeInfo[]. */ - public static DatanodeInfo[] toDatanodeInfoArray(final Object[] objects) { + private static DatanodeInfo[] toDatanodeInfoArray(final Object[] objects) { if (objects == null) { return null; } else if (objects.length == 0) { @@ -281,66 +268,64 @@ public class JsonUtil { } else { final DatanodeInfo[] array = new DatanodeInfo[objects.length]; for(int i = 0; i < array.length; i++) { - array[i] = (DatanodeInfo)toDatanodeInfo((Map) objects[i]); + array[i] = toDatanodeInfo((Map) objects[i]); } return array; } } - /** Convert a LocatedBlock to a Json string. */ - public static String toJsonString(final LocatedBlock locatedblock + /** Convert a LocatedBlock to a Json map. */ + private static Map toJsonMap(final LocatedBlock locatedblock ) throws IOException { if (locatedblock == null) { return null; } - final Map m = locatedBlockMap.get(); - m.put("blockToken", toJsonString(locatedblock.getBlockToken())); + final Map m = new TreeMap(); + m.put("blockToken", toJsonMap(locatedblock.getBlockToken())); m.put("isCorrupt", locatedblock.isCorrupt()); m.put("startOffset", locatedblock.getStartOffset()); - m.put("block", toJsonString(locatedblock.getBlock())); + m.put("block", toJsonMap(locatedblock.getBlock())); - m.put("locations", toJsonString(locatedblock.getLocations())); - return JSON.toString(m); + m.put("locations", toJsonArray(locatedblock.getLocations())); + return m; } /** Convert a Json map to LocatedBlock. */ - public static LocatedBlock toLocatedBlock(final Map m) throws IOException { + private static LocatedBlock toLocatedBlock(final Map m) throws IOException { if (m == null) { return null; } - final Block b = toBlock((Map)JSON.parse((String)m.get("block"))); + final Block b = toBlock((Map)m.get("block")); final DatanodeInfo[] locations = toDatanodeInfoArray( - (Object[])JSON.parse((String)m.get("locations"))); + (Object[])m.get("locations")); final long startOffset = (Long)m.get("startOffset"); final boolean isCorrupt = (Boolean)m.get("isCorrupt"); final LocatedBlock locatedblock = new LocatedBlock(b, locations, startOffset, isCorrupt); - locatedblock.setBlockToken(toBlockToken((Map)JSON.parse((String)m.get("blockToken")))); + locatedblock.setBlockToken(toBlockToken((Map)m.get("blockToken"))); return locatedblock; } - /** Convert a LocatedBlock[] to a Json string. */ - public static String toJsonString(final List array + /** Convert a LocatedBlock[] to a Json array. */ + private static Object[] toJsonArray(final List array ) throws IOException { if (array == null) { return null; } else if (array.size() == 0) { - return "[]"; + return EMPTY_OBJECT_ARRAY; } else { - final StringBuilder b = new StringBuilder().append('[').append( - toJsonString(array.get(0))); - for(int i = 1; i < array.size(); i++) { - b.append(",\n ").append(toJsonString(array.get(i))); + final Object[] a = new Object[array.size()]; + for(int i = 0; i < array.size(); i++) { + a[i] = toJsonMap(array.get(0)); } - return b.append(']').toString(); + return a; } } - /** Convert an Object[] to a List of LocatedBlock. - * @throws IOException */ - public static List toLocatedBlockList(final Object[] objects + /** Convert an Object[] to a List of LocatedBlock. */ + private static List toLocatedBlockList(final Object[] objects ) throws IOException { if (objects == null) { return null; @@ -349,7 +334,7 @@ public class JsonUtil { } else { final List list = new ArrayList(objects.length); for(int i = 0; i < objects.length; i++) { - list.add((LocatedBlock)toLocatedBlock((Map)objects[i])); + list.add(toLocatedBlock((Map)objects[i])); } return list; } @@ -362,52 +347,52 @@ public class JsonUtil { return null; } - final Map m = jsonMap.get(); + final Map m = new TreeMap(); m.put("fileLength", locatedblocks.getFileLength()); m.put("isUnderConstruction", locatedblocks.isUnderConstruction()); - m.put("locatedBlocks", toJsonString(locatedblocks.getLocatedBlocks())); - return JSON.toString(m); + m.put("locatedBlocks", toJsonArray(locatedblocks.getLocatedBlocks())); + return toJsonString(LocatedBlocks.class, m); } /** Convert a Json map to LocatedBlock. */ - public static LocatedBlocks toLocatedBlocks(final Map m + public static LocatedBlocks toLocatedBlocks(final Map json ) throws IOException { - if (m == null) { + if (json == null) { return null; } - + + final Map m = (Map)json.get(LocatedBlocks.class.getSimpleName()); final long fileLength = (Long)m.get("fileLength"); final boolean isUnderConstruction = (Boolean)m.get("isUnderConstruction"); final List locatedBlocks = toLocatedBlockList( - (Object[])JSON.parse((String) m.get("locatedBlocks"))); + (Object[])m.get("locatedBlocks")); return new LocatedBlocks(fileLength, locatedBlocks, isUnderConstruction); } /** Convert a ContentSummary to a Json string. */ - public static String toJsonString(final ContentSummary contentsummary - ) throws IOException { + public static String toJsonString(final ContentSummary contentsummary) { if (contentsummary == null) { return null; } - final Map m = jsonMap.get(); + final Map m = new TreeMap(); m.put("length", contentsummary.getLength()); m.put("fileCount", contentsummary.getFileCount()); m.put("directoryCount", contentsummary.getDirectoryCount()); m.put("quota", contentsummary.getQuota()); m.put("spaceConsumed", contentsummary.getSpaceConsumed()); m.put("spaceQuota", contentsummary.getSpaceQuota()); - return JSON.toString(m); + return toJsonString(ContentSummary.class, m); } /** Convert a Json map to a ContentSummary. */ - public static ContentSummary toContentSummary(final Map m - ) throws IOException { - if (m == null) { + public static ContentSummary toContentSummary(final Map json) { + if (json == null) { return null; } + final Map m = (Map)json.get(ContentSummary.class.getSimpleName()); final long length = (Long)m.get("length"); final long fileCount = (Long)m.get("fileCount"); final long directoryCount = (Long)m.get("directoryCount"); @@ -420,36 +405,51 @@ public class JsonUtil { } /** Convert a MD5MD5CRC32FileChecksum to a Json string. */ - public static String toJsonString(final MD5MD5CRC32FileChecksum checksum - ) throws IOException { + public static String toJsonString(final MD5MD5CRC32FileChecksum checksum) { if (checksum == null) { return null; } - final Map m = jsonMap.get(); - final byte[] bytes = checksum.getBytes(); - final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes)); - final int bytesPerCRC = in.readInt(); - final long crcPerBlock = in.readLong(); - final MD5Hash md5 = MD5Hash.read(in); - m.put("bytesPerCRC", bytesPerCRC); - m.put("crcPerBlock", crcPerBlock); - m.put("md5", "" + md5); - return JSON.toString(m); + final Map m = new TreeMap(); + m.put("algorithm", checksum.getAlgorithmName()); + m.put("length", checksum.getLength()); + m.put("bytes", StringUtils.byteToHexString(checksum.getBytes())); + return toJsonString(MD5MD5CRC32FileChecksum.class, m); } /** Convert a Json map to a MD5MD5CRC32FileChecksum. */ public static MD5MD5CRC32FileChecksum toMD5MD5CRC32FileChecksum( - final Map m) throws IOException { - if (m == null) { + final Map json) throws IOException { + if (json == null) { return null; } - final int bytesPerCRC = (int)(long)(Long)m.get("bytesPerCRC"); - final long crcPerBlock = (Long)m.get("crcPerBlock"); - final String md5 = (String)m.get("md5"); + final Map m = (Map)json.get( + MD5MD5CRC32FileChecksum.class.getSimpleName()); + final String algorithm = (String)m.get("algorithm"); + final int length = (int)(long)(Long)m.get("length"); + final byte[] bytes = StringUtils.hexStringToByte((String)m.get("bytes")); + + final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes)); + final int bytesPerCRC = in.readInt(); + final long crcPerBlock = in.readLong(); + final MD5Hash md5 = MD5Hash.read(in); + final MD5MD5CRC32FileChecksum checksum = new MD5MD5CRC32FileChecksum( + bytesPerCRC, crcPerBlock, md5); + + //check algorithm name + final String alg = "MD5-of-" + crcPerBlock + "MD5-of-" + bytesPerCRC + "CRC32"; + if (!alg.equals(algorithm)) { + throw new IOException("Algorithm not matched: algorithm=" + algorithm + + ", crcPerBlock=" + crcPerBlock + + ", bytesPerCRC=" + bytesPerCRC); + } + //check length + if (length != checksum.getLength()) { + throw new IOException("Length not matched: length=" + length + + ", checksum.getLength()=" + checksum.getLength()); + } - return new MD5MD5CRC32FileChecksum(bytesPerCRC, crcPerBlock, - new MD5Hash(md5)); + return checksum; } } \ No newline at end of file Modified: hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java?rev=1179171&r1=1179170&r2=1179171&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java (original) +++ hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/web/WebHdfsFileSystem.java Wed Oct 5 11:30:54 2011 @@ -363,7 +363,7 @@ public class WebHdfsFileSystem extends F final HttpOpParam.Op op = PutOpParam.Op.MKDIRS; final Map json = run(op, f, new PermissionParam(applyUMask(permission))); - return (Boolean)json.get(op.toString()); + return (Boolean)json.get("boolean"); } @Override @@ -372,7 +372,7 @@ public class WebHdfsFileSystem extends F final HttpOpParam.Op op = PutOpParam.Op.RENAME; final Map json = run(op, src, new DstPathParam(makeQualified(dst).toUri().getPath())); - return (Boolean)json.get(op.toString()); + return (Boolean)json.get("boolean"); } @Override @@ -402,7 +402,7 @@ public class WebHdfsFileSystem extends F final HttpOpParam.Op op = PutOpParam.Op.SETREPLICATION; final Map json = run(op, p, new ReplicationParam(replication)); - return (Boolean)json.get(op.toString()); + return (Boolean)json.get("boolean"); } @Override @@ -464,7 +464,7 @@ public class WebHdfsFileSystem extends F public boolean delete(Path f, boolean recursive) throws IOException { final HttpOpParam.Op op = DeleteOpParam.Op.DELETE; final Map json = run(op, f, new RecursiveParam(recursive)); - return (Boolean)json.get(op.toString()); + return (Boolean)json.get("boolean"); } @Override @@ -481,7 +481,9 @@ public class WebHdfsFileSystem extends F statistics.incrementReadOps(1); final HttpOpParam.Op op = GetOpParam.Op.LISTSTATUS; - final Object[] array = run(op, f); + final Map json = run(op, f); + final Object[] array = (Object[])json.get( + HdfsFileStatus[].class.getSimpleName()); //convert FileStatus final FileStatus[] statuses = new FileStatus[array.length]; @@ -528,7 +530,7 @@ public class WebHdfsFileSystem extends F delegationToken = token; final HttpOpParam.Op op = PutOpParam.Op.RENEWDELEGATIONTOKEN; final Map m = run(op, null); - return (Long)m.get(op.toString()); + return (Long)m.get("long"); } private synchronized void cancelDelegationToken(final Token token Modified: hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/web/TestJsonUtil.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/web/TestJsonUtil.java?rev=1179171&r1=1179170&r2=1179171&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/web/TestJsonUtil.java (original) +++ hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/web/TestJsonUtil.java Wed Oct 5 11:30:54 2011 @@ -17,14 +17,16 @@ */ package org.apache.hadoop.hdfs.web; +import java.util.Map; + import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.hdfs.DFSUtil; import org.apache.hadoop.hdfs.protocol.HdfsFileStatus; -import org.apache.hadoop.hdfs.web.JsonUtil; import org.junit.Assert; import org.junit.Test; +import org.mortbay.util.ajax.JSON; public class TestJsonUtil { static FileStatus toFileStatus(HdfsFileStatus f, String parent) { @@ -46,7 +48,7 @@ public class TestJsonUtil { System.out.println("fstatus = " + fstatus); final String json = JsonUtil.toJsonString(status); System.out.println("json = " + json.replace(",", ",\n ")); - final HdfsFileStatus s2 = JsonUtil.toFileStatus(JsonUtil.parse(json)); + final HdfsFileStatus s2 = JsonUtil.toFileStatus((Map)JSON.parse(json)); final FileStatus fs2 = toFileStatus(s2, parent); System.out.println("s2 = " + s2); System.out.println("fs2 = " + fs2);