Author: szetszwo
Date: Wed May 11 20:20:18 2011
New Revision: 1102068
URL: http://svn.apache.org/viewvc?rev=1102068&view=rev
Log:
HADOOP-7237. Refactor the touchz commands to conform to new FsCommand class.
Contributed by Daryn Sharp
Added:
hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/Touchz.java
Modified:
hadoop/common/trunk/CHANGES.txt
hadoop/common/trunk/src/java/org/apache/hadoop/fs/FsShell.java
hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/FsCommand.java
hadoop/common/trunk/src/test/core/org/apache/hadoop/cli/testConf.xml
Modified: hadoop/common/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/CHANGES.txt?rev=1102068&r1=1102067&r2=1102068&view=diff
==============================================================================
--- hadoop/common/trunk/CHANGES.txt (original)
+++ hadoop/common/trunk/CHANGES.txt Wed May 11 20:20:18 2011
@@ -144,6 +144,9 @@ Trunk (unreleased changes)
HADOOP-7275. Refactor the stat commands to conform to new FsCommand
class. (Daryn Sharp via szetszwo)
+ HADOOP-7237. Refactor the touchz commands to conform to new FsCommand
+ class. (Daryn Sharp via szetszwo)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/fs/FsShell.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/fs/FsShell.java?rev=1102068&r1=1102067&r2=1102068&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/fs/FsShell.java (original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/fs/FsShell.java Wed May 11
20:20:18 2011
@@ -433,27 +433,6 @@ public class FsShell extends Configured
}
/**
- * (Re)create zero-length file at the specified path.
- * This will be replaced by a more UNIX-like touch when files may be
- * modified.
- */
- void touchz(String src) throws IOException {
- Path f = new Path(src);
- FileSystem srcFs = f.getFileSystem(getConf());
- FileStatus st;
- if (srcFs.exists(f)) {
- st = srcFs.getFileStatus(f);
- if (st.isDirectory()) {
- // TODO: handle this
- throw new IOException(src + " is a directory");
- } else if (st.getLen() != 0)
- throw new IOException(src + " must be a zero-length file");
- }
- FSDataOutputStream out = srcFs.create(f);
- out.close();
- }
-
- /**
* Check file types.
*/
int test(String argv[], int i) throws IOException {
@@ -765,7 +744,7 @@ public class FsShell extends Configured
GET_SHORT_USAGE + "\n\t" +
"[" + COPYTOLOCAL_SHORT_USAGE + "] [-moveToLocal <src> <localdst>]\n\t" +
"[-report]\n\t" +
- "[-touchz <path>] [-test -[ezd] <path>]";
+ "[-test -[ezd] <path>]";
String conf ="-conf <configuration file>: Specify an application
configuration file.";
@@ -838,10 +817,6 @@ public class FsShell extends Configured
String moveToLocal = "-moveToLocal <src> <localdst>: Not implemented yet
\n";
- String touchz = "-touchz <path>: Creates a file of zero length\n"
- + "\t\t at <path> with current time as the timestamp of that <path>.\n"
- + "\t\t An error is returned if the file exists with non-zero length\n";
-
String test = "-test -[ezd] <path>: If file { exists, has zero length, is
a directory\n" +
"\t\tthen return 0, else return 1.\n";
@@ -889,8 +864,6 @@ public class FsShell extends Configured
System.out.println(moveToLocal);
} else if ("get".equals(cmd)) {
System.out.println(get);
- } else if ("touchz".equals(cmd)) {
- System.out.println(touchz);
} else if ("test".equals(cmd)) {
System.out.println(test);
} else if ("help".equals(cmd)) {
@@ -917,7 +890,6 @@ public class FsShell extends Configured
System.out.println(get);
System.out.println(copyToLocal);
System.out.println(moveToLocal);
- System.out.println(touchz);
System.out.println(test);
for (String thisCmdName : commandFactory.getNames()) {
@@ -974,8 +946,6 @@ public class FsShell extends Configured
delete(argv[i], true, rmSkipTrash);
} else if ("-df".equals(cmd)) {
df(argv[i]);
- } else if ("-touchz".equals(cmd)) {
- touchz(argv[i]);
}
} catch (IOException e) {
LOG.debug("Error", e);
@@ -1005,8 +975,7 @@ public class FsShell extends Configured
} else if ("-D".equals(cmd)) {
System.err.println("Usage: java FsShell" +
" [-D <[property=value>]");
- } else if ("-du".equals(cmd) || "-dus".equals(cmd) ||
- "-touchz".equals(cmd)) {
+ } else if ("-du".equals(cmd) || "-dus".equals(cmd)) {
System.err.println("Usage: java FsShell" +
" [" + cmd + " <path>]");
} else if ("-df".equals(cmd) ) {
@@ -1048,7 +1017,6 @@ public class FsShell extends Configured
System.err.println(" [" + GET_SHORT_USAGE + "]");
System.err.println(" [" + COPYTOLOCAL_SHORT_USAGE + "]");
System.err.println(" [-moveToLocal [-crc] <src> <localdst>]");
- System.err.println(" [-touchz <path>]");
System.err.println(" [-test -[ezd] <path>]");
for (String name : commandFactory.getNames()) {
instance = commandFactory.getInstance(name);
@@ -1098,8 +1066,7 @@ public class FsShell extends Configured
printUsage(cmd);
return exitCode;
}
- } else if ("-rm".equals(cmd) || "-rmr".equals(cmd) ||
- "-touchz".equals(cmd)) {
+ } else if ("-rm".equals(cmd) || "-rmr".equals(cmd)) {
if (argv.length < 2) {
printUsage(cmd);
return exitCode;
@@ -1168,8 +1135,6 @@ public class FsShell extends Configured
du(argv, i);
} else if ("-dus".equals(cmd)) {
dus(argv, i);
- } else if ("-touchz".equals(cmd)) {
- exitCode = doall(cmd, argv, i);
} else if ("-test".equals(cmd)) {
exitCode = test(argv, i);
} else if ("-help".equals(cmd)) {
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/FsCommand.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/FsCommand.java?rev=1102068&r1=1102067&r2=1102068&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/FsCommand.java
(original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/FsCommand.java Wed
May 11 20:20:18 2011
@@ -52,6 +52,7 @@ abstract public class FsCommand extends
factory.registerCommands(SetReplication.class);
factory.registerCommands(Stat.class);
factory.registerCommands(Tail.class);
+ factory.registerCommands(Touch.class);
}
protected FsCommand() {}
Added: hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/Touchz.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/Touchz.java?rev=1102068&view=auto
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/Touchz.java (added)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/fs/shell/Touchz.java Wed May
11 20:20:18 2011
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.fs.shell;
+
+import java.io.IOException;
+import java.util.LinkedList;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.fs.shell.PathExceptions.PathIOException;
+import org.apache.hadoop.fs.shell.PathExceptions.PathIsDirectoryException;
+
+/**
+ * Unix touch like commands
+ */
[email protected]
[email protected]
+
+class Touch extends FsCommand {
+ public static void registerCommands(CommandFactory factory) {
+ factory.addClass(Touchz.class, "-touchz");
+ }
+
+ /**
+ * (Re)create zero-length file at the specified path.
+ * This will be replaced by a more UNIX-like touch when files may be
+ * modified.
+ */
+ public static class Touchz extends Touch {
+ public static final String NAME = "touchz";
+ public static final String USAGE = "<path> ...";
+ public static final String DESCRIPTION =
+ "Creates a file of zero length\n" +
+ "at <path> with current time as the timestamp of that <path>.\n" +
+ "An error is returned if the file exists with non-zero length\n";
+
+ @Override
+ protected void processOptions(LinkedList<String> args) {
+ CommandFormat cf = new CommandFormat(null, 1, Integer.MAX_VALUE);
+ cf.parse(args);
+ }
+
+ @Override
+ protected void processPath(PathData item) throws IOException {
+ if (item.stat.isDirectory()) {
+ // TODO: handle this
+ throw new PathIsDirectoryException(item.toString());
+ }
+ if (item.stat.getLen() != 0) {
+ throw new PathIOException(item.toString(), "Not a zero-length file");
+ }
+ touchz(item);
+ }
+
+ @Override
+ protected void processNonexistentPath(PathData item) throws IOException {
+ touchz(item);
+ }
+
+ private void touchz(PathData item) throws IOException {
+ item.fs.create(item.path).close();
+ }
+ }
+}
Modified: hadoop/common/trunk/src/test/core/org/apache/hadoop/cli/testConf.xml
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/test/core/org/apache/hadoop/cli/testConf.xml?rev=1102068&r1=1102067&r2=1102068&view=diff
==============================================================================
--- hadoop/common/trunk/src/test/core/org/apache/hadoop/cli/testConf.xml
(original)
+++ hadoop/common/trunk/src/test/core/org/apache/hadoop/cli/testConf.xml Wed
May 11 20:20:18 2011
@@ -541,7 +541,7 @@
<comparators>
<comparator>
<type>RegexpComparator</type>
- <expected-output>^-touchz <path>: Creates a file of zero
length( )*</expected-output>
+ <expected-output>^-touchz <path> \.\.\.:( |\t)*Creates a file
of zero length( )*</expected-output>
</comparator>
<comparator>
<type>RegexpComparator</type>
@@ -549,7 +549,7 @@
</comparator>
<comparator>
<type>RegexpComparator</type>
- <expected-output>^( |\t)* An error is returned if the file exists
with non-zero length( )*</expected-output>
+ <expected-output>^( |\t)*An error is returned if the file exists
with non-zero length( )*</expected-output>
</comparator>
</comparators>
</test>