You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/05/22 01:33:49 UTC

svn commit: r540360 - in /lucene/hadoop/branches/branch-0.13: ./ src/contrib/hbase/src/java/org/apache/hadoop/hbase/ src/java/org/apache/hadoop/fs/ src/test/org/apache/hadoop/fs/

Author: cutting
Date: Mon May 21 16:33:48 2007
New Revision: 540360

URL: http://svn.apache.org/viewvc?view=rev&rev=540360
Log:
Merge -r 540358:540359 from trunk to 0.13 branch.  Fixes: HADOOP-1386.

Modified:
    lucene/hadoop/branches/branch-0.13/CHANGES.txt
    lucene/hadoop/branches/branch-0.13/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStoreFile.java
    lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/FsShell.java
    lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/InMemoryFileSystem.java
    lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/Path.java
    lucene/hadoop/branches/branch-0.13/src/test/org/apache/hadoop/fs/TestPath.java

Modified: lucene/hadoop/branches/branch-0.13/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/CHANGES.txt?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/CHANGES.txt (original)
+++ lucene/hadoop/branches/branch-0.13/CHANGES.txt Mon May 21 16:33:48 2007
@@ -410,6 +410,11 @@
 123. HADOOP-1385.  Fix MD5Hash#hashCode() to generally hash to more
      than 256 values.  (omalley via cutting)
 
+124. HADOOP-1386.  Fix Path to not permit the empty string as a
+     path, as this has lead to accidental file deletion.  Instead
+     force applications to use "." to name the default directory.
+     (Hairong Kuang via cutting)
+
 
 Release 0.12.3 - 2007-04-06
 

Modified: lucene/hadoop/branches/branch-0.13/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStoreFile.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStoreFile.java?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStoreFile.java (original)
+++ lucene/hadoop/branches/branch-0.13/src/contrib/hbase/src/java/org/apache/hadoop/hbase/HStoreFile.java Mon May 21 16:33:48 2007
@@ -54,7 +54,7 @@
    */
   public HStoreFile(Configuration conf) {
     this.conf = conf;
-    this.dir = new Path("");
+    this.dir = new Path(Path.CUR_DIR);
     this.regionName = new Text();
     this.colFamily = new Text();
     this.fileId = 0;

Modified: lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/FsShell.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/FsShell.java?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/FsShell.java (original)
+++ lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/FsShell.java Mon May 21 16:33:48 2007
@@ -1015,13 +1015,13 @@
         if (i < argv.length) {
           exitCode = doall(cmd, argv, conf, i);
         } else {
-          ls("", false);
+          ls(Path.CUR_DIR, false);
         } 
       } else if ("-lsr".equals(cmd)) {
         if (i < argv.length) {
           exitCode = doall(cmd, argv, conf, i);
         } else {
-          ls("", true);
+          ls(Path.CUR_DIR, true);
         } 
       } else if ("-mv".equals(cmd)) {
         exitCode = rename(argv, conf);

Modified: lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/InMemoryFileSystem.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/InMemoryFileSystem.java?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/InMemoryFileSystem.java (original)
+++ lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/InMemoryFileSystem.java Mon May 21 16:33:48 2007
@@ -68,7 +68,11 @@
       int size = Integer.parseInt(conf.get("fs.inmemory.size.mb", "100"));
       this.fsSize = size * 1024 * 1024;
       this.uri = URI.create(uri.getScheme() + "://" + uri.getAuthority());
-      this.staticWorkingDir = new Path(this.uri.getPath());
+      String path = this.uri.getPath();
+      if (path.length() == 0) {
+        path = Path.CUR_DIR;
+      }
+      this.staticWorkingDir = new Path(path);
       LOG.info("Initialized InMemoryFileSystem: " + uri.toString() + 
                " of size (in bytes): " + fsSize);
     }

Modified: lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/Path.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/Path.java?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/Path.java (original)
+++ lucene/hadoop/branches/branch-0.13/src/java/org/apache/hadoop/fs/Path.java Mon May 21 16:33:48 2007
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.fs;
 
-import java.util.*;
 import java.net.*;
 import java.io.*;
 
@@ -34,6 +33,8 @@
   public static final String SEPARATOR = "/";
   public static final char SEPARATOR_CHAR = '/';
   
+  public static final String CUR_DIR = ".";
+  
   static final boolean WINDOWS
     = System.getProperty("os.name").startsWith("Windows");
 
@@ -71,9 +72,23 @@
                normalizePath(resolved.getPath()));
   }
 
+  private void checkPathArg( String path ) {
+    // disallow construction of a Path from an empty string
+    if ( path == null ) {
+      throw new IllegalArgumentException(
+          "Can not create a Path from a null string");
+    }
+    if( path.length() == 0 ) {
+       throw new IllegalArgumentException(
+           "Can not create a Path from an empty string");
+    }   
+  }
+  
   /** Construct a path from a String.  Path strings are URIs, but with
    * unescaped elements and some additional normalization. */
   public Path(String pathString) {
+    checkPathArg( pathString );
+    
     // We can't use 'new URI(String)' directly, since it assumes things are
     // escaped, which we don't require of Paths. 
     
@@ -113,6 +128,7 @@
 
   /** Construct a Path from components. */
   public Path(String scheme, String authority, String path) {
+    checkPathArg( path );
     initialize(scheme, authority, path);
   }
 
@@ -183,7 +199,7 @@
     }
     String parent;
     if (lastSlash==-1) {
-      parent = "";
+      parent = CUR_DIR;
     } else {
       int end = hasWindowsDrive(path, true) ? 3 : 0;
       parent = path.substring(0, lastSlash==end?end+1:lastSlash);

Modified: lucene/hadoop/branches/branch-0.13/src/test/org/apache/hadoop/fs/TestPath.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/branches/branch-0.13/src/test/org/apache/hadoop/fs/TestPath.java?view=diff&rev=540360&r1=540359&r2=540360
==============================================================================
--- lucene/hadoop/branches/branch-0.13/src/test/org/apache/hadoop/fs/TestPath.java (original)
+++ lucene/hadoop/branches/branch-0.13/src/test/org/apache/hadoop/fs/TestPath.java Mon May 21 16:33:48 2007
@@ -28,7 +28,14 @@
     toStringTest("/foo/bar");
     toStringTest("foo");
     toStringTest("foo/bar");
-    toStringTest("");
+    boolean emptyException = false;
+    try {
+      toStringTest("");
+    } catch (IllegalArgumentException e) {
+      // expect to receive an IllegalArgumentException
+      emptyException = true;
+    }
+    assertTrue(emptyException);
     if (Path.WINDOWS) {
       toStringTest("c:");
       toStringTest("c:/");
@@ -60,7 +67,7 @@
     assertTrue(new Path("/foo").isAbsolute());
     assertFalse(new Path("foo").isAbsolute());
     assertFalse(new Path("foo/bar").isAbsolute());
-    assertFalse(new Path("").isAbsolute());
+    assertFalse(new Path(".").isAbsolute());
     if (Path.WINDOWS) {
       assertTrue(new Path("c:/a/b").isAbsolute());
       assertFalse(new Path("c:a/b").isAbsolute());
@@ -77,14 +84,14 @@
   }
 
   public void testChild() {
-    assertEquals(new Path(""), new Path("", ""));
-    assertEquals(new Path("/"), new Path("/", ""));
-    assertEquals(new Path("/"), new Path("", "/"));
+    assertEquals(new Path("."), new Path(".", "."));
+    assertEquals(new Path("/"), new Path("/", "."));
+    assertEquals(new Path("/"), new Path(".", "/"));
     assertEquals(new Path("/foo"), new Path("/", "foo"));
     assertEquals(new Path("/foo/bar"), new Path("/foo", "bar"));
     assertEquals(new Path("/foo/bar/baz"), new Path("/foo/bar", "baz"));
     assertEquals(new Path("/foo/bar/baz"), new Path("/foo", "bar/baz"));
-    assertEquals(new Path("foo"), new Path("", "foo"));
+    assertEquals(new Path("foo"), new Path(".", "foo"));
     assertEquals(new Path("foo/bar"), new Path("foo", "bar"));
     assertEquals(new Path("foo/bar/baz"), new Path("foo", "bar/baz"));
     assertEquals(new Path("foo/bar/baz"), new Path("foo/bar", "baz"));
@@ -122,7 +129,7 @@
     
     assertEquals(new Path("/foo/bar","../../boo/bud").toString(), "/boo/bud");
     assertEquals(new Path("foo/bar","../../boo/bud").toString(), "boo/bud");
-    assertEquals(new Path("","boo/bud").toString(), "boo/bud");
+    assertEquals(new Path(".","boo/bud").toString(), "boo/bud");
 
     assertEquals(new Path("/foo/bar/baz","../../boo/bud").toString(), "/foo/boo/bud");
     assertEquals(new Path("foo/bar/baz","../../boo/bud").toString(), "foo/boo/bud");