From common-commits-return-15578-apmail-hadoop-common-commits-archive=hadoop.apache.org@hadoop.apache.org Thu Oct 6 17:54:39 2011 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 604D97EEE for ; Thu, 6 Oct 2011 17:54:39 +0000 (UTC) Received: (qmail 86225 invoked by uid 500); 6 Oct 2011 17:54:39 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 86193 invoked by uid 500); 6 Oct 2011 17:54:39 -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 86181 invoked by uid 99); 6 Oct 2011 17:54:39 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 06 Oct 2011 17:54:39 +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; Thu, 06 Oct 2011 17:54:35 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 01A422388847 for ; Thu, 6 Oct 2011 17:54:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1179722 - 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: Thu, 06 Oct 2011 17:54:13 -0000 To: common-commits@hadoop.apache.org From: mattf@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111006175414.01A422388847@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mattf Date: Thu Oct 6 17:54:12 2011 New Revision: 1179722 URL: http://svn.apache.org/viewvc?rev=1179722&view=rev Log: HDFS-2404. Webhdfs liststatus json response is not correct. Contributed by Suresh Srinivas. 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=1179722&r1=1179721&r2=1179722&view=diff ============================================================================== --- hadoop/common/branches/branch-0.20-security/CHANGES.txt (original) +++ hadoop/common/branches/branch-0.20-security/CHANGES.txt Thu Oct 6 17:54:12 2011 @@ -91,6 +91,9 @@ Release 0.20.205.0 - unreleased BUG FIXES + HDFS-2404. Webhdfs liststatus json response is not correct. + (Suresh Srinivas via mattf) + HDFS-2358. NPE when the default filesystem's uri has no authority. (Daryn Sharp via mattf) 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=1179722&r1=1179721&r2=1179722&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 Thu Oct 6 17:54:12 2011 @@ -420,7 +420,7 @@ public class NamenodeWebHdfsMethods { case GETFILESTATUS: { final HdfsFileStatus status = namenode.getFileInfo(fullpath); - final String js = JsonUtil.toJsonString(status); + final String js = JsonUtil.toJsonString(status, true); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } case LISTSTATUS: @@ -476,22 +476,22 @@ public class NamenodeWebHdfsMethods { @Override public void write(final OutputStream outstream) throws IOException { final PrintStream out = new PrintStream(outstream); - out.println("{\"" + HdfsFileStatus[].class.getSimpleName() + "\":["); + out.println("{\"" + HdfsFileStatus.class.getSimpleName() + "\":["); final HdfsFileStatus[] partial = first.getPartialListing(); if (partial.length > 0) { - out.print(JsonUtil.toJsonString(partial[0])); + out.print(JsonUtil.toJsonString(partial[0], false)); } for(int i = 1; i < partial.length; i++) { out.println(','); - out.print(JsonUtil.toJsonString(partial[i])); + out.print(JsonUtil.toJsonString(partial[i], false)); } for(DirectoryListing curr = first; curr.hasMore(); ) { curr = getDirectoryListing(np, p, curr.getLastName()); for(HdfsFileStatus s : curr.getPartialListing()) { out.println(','); - out.print(JsonUtil.toJsonString(s)); + out.print(JsonUtil.toJsonString(s, false)); } } 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=1179722&r1=1179721&r2=1179722&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 Thu Oct 6 17:54:12 2011 @@ -133,32 +133,34 @@ public class JsonUtil { } /** Convert a HdfsFileStatus object to a Json string. */ - public static String toJsonString(final HdfsFileStatus status) { + public static String toJsonString(final HdfsFileStatus status, + boolean includeType) { if (status == null) { return null; - } else { - final Map m = new TreeMap(); - m.put("localName", status.getLocalName()); - m.put("isDir", status.isDir()); - m.put("len", status.getLen()); - m.put("owner", status.getOwner()); - m.put("group", status.getGroup()); - m.put("permission", toString(status.getPermission())); - m.put("accessTime", status.getAccessTime()); - m.put("modificationTime", status.getModificationTime()); - m.put("blockSize", status.getBlockSize()); - m.put("replication", status.getReplication()); - return toJsonString(HdfsFileStatus.class, m); } + final Map m = new TreeMap(); + m.put("localName", status.getLocalName()); + m.put("isDir", status.isDir()); + m.put("len", status.getLen()); + m.put("owner", status.getOwner()); + m.put("group", status.getGroup()); + m.put("permission", toString(status.getPermission())); + m.put("accessTime", status.getAccessTime()); + m.put("modificationTime", status.getModificationTime()); + m.put("blockSize", status.getBlockSize()); + m.put("replication", status.getReplication()); + return includeType ? toJsonString(HdfsFileStatus.class, m) : + JSON.toString(m); } /** Convert a Json map to a HdfsFileStatus object. */ - public static HdfsFileStatus toFileStatus(final Map json) { + public static HdfsFileStatus toFileStatus(final Map json, boolean includesType) { if (json == null) { return null; } - final Map m = (Map)json.get(HdfsFileStatus.class.getSimpleName()); + final Map m = includesType ? + (Map)json.get(HdfsFileStatus.class.getSimpleName()) : json; final String localName = (String) m.get("localName"); final boolean isDir = (Boolean) m.get("isDir"); final long len = (Long) m.get("len"); @@ -273,7 +275,7 @@ public class JsonUtil { return array; } } - + /** Convert a LocatedBlock to a Json map. */ private static Map toJsonMap(final LocatedBlock locatedblock ) throws IOException { @@ -452,4 +454,4 @@ public class JsonUtil { 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=1179722&r1=1179721&r2=1179722&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 Thu Oct 6 17:54:12 2011 @@ -336,7 +336,7 @@ public class WebHdfsFileSystem extends F private HdfsFileStatus getHdfsFileStatus(Path f) throws IOException { final HttpOpParam.Op op = GetOpParam.Op.GETFILESTATUS; final Map json = run(op, f); - final HdfsFileStatus status = JsonUtil.toFileStatus(json); + final HdfsFileStatus status = JsonUtil.toFileStatus(json, true); if (status == null) { throw new FileNotFoundException("File does not exist: " + f); } @@ -483,14 +483,14 @@ public class WebHdfsFileSystem extends F final HttpOpParam.Op op = GetOpParam.Op.LISTSTATUS; final Map json = run(op, f); final Object[] array = (Object[])json.get( - HdfsFileStatus[].class.getSimpleName()); + HdfsFileStatus.class.getSimpleName()); //convert FileStatus final FileStatus[] statuses = new FileStatus[array.length]; for(int i = 0; i < array.length; i++) { @SuppressWarnings("unchecked") final Map m = (Map)array[i]; - statuses[i] = makeQualified(JsonUtil.toFileStatus(m), f); + statuses[i] = makeQualified(JsonUtil.toFileStatus(m, false), f); } return statuses; } @@ -638,4 +638,4 @@ public class WebHdfsFileSystem extends F }); } } -} \ No newline at end of file +} 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=1179722&r1=1179721&r2=1179722&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 Thu Oct 6 17:54:12 2011 @@ -46,9 +46,9 @@ public class TestJsonUtil { final FileStatus fstatus = toFileStatus(status, parent); System.out.println("status = " + status); System.out.println("fstatus = " + fstatus); - final String json = JsonUtil.toJsonString(status); + final String json = JsonUtil.toJsonString(status, true); System.out.println("json = " + json.replace(",", ",\n ")); - final HdfsFileStatus s2 = JsonUtil.toFileStatus((Map)JSON.parse(json)); + final HdfsFileStatus s2 = JsonUtil.toFileStatus((Map)JSON.parse(json), true); final FileStatus fs2 = toFileStatus(s2, parent); System.out.println("s2 = " + s2); System.out.println("fs2 = " + fs2);