Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-8842

local file system behavior of mv into an empty directory is inconsistent with HDFS

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Won't Fix
    • 0.20.2
    • None
    • None
    • None

    Description

      moving into an empty directory replaces the directory instead.
      See output of attached script to reproduce :

      repro.sh

      rm -rf local_fs_bug
      mkdir local_fs_bug
      hdfs -rmr local_fs_bug
      hdfs -mkdir local_fs_bug
      
      echo ">>> HDFS: normal behavior"
      touch part-0000
      hdfs -mkdir local_fs_bug/a
      hdfs -copyFromLocal part-0000 local_fs_bug/a
      hdfs -mkdir local_fs_bug/b
      hdfs -mkdir local_fs_bug/b/c
      echo "content of a: 1 part"
      hdfs -ls local_fs_bug/a
      echo "content of b/c: empty"
      hdfs -ls local_fs_bug/b/c
      echo "mv a b/c"
      hdfs -mv local_fs_bug/a local_fs_bug/b/c
      echo "resulting content of b/c"
      hdfs -ls local_fs_bug/b/c
      echo "a is moved inside of c"
      echo
      echo ">>> local fs: bug"
      mkdir -p local_fs_bug/a
      touch local_fs_bug/a/part-0000
      mkdir -p local_fs_bug/b/c
      echo "content of a: 1 part"
      hdfs -fs local -ls local_fs_bug/a
      echo "content of b/c: empty"
      hdfs -fs local -ls local_fs_bug/b/c
      echo "mv a b/c"
      hdfs -fs local -mv local_fs_bug/a local_fs_bug/b/c
      echo "resulting content of b/c"
      hdfs -fs local -ls local_fs_bug/b/c
      echo "bug: a replaces c"
      echo
      echo ">>> but it works if the destination is not empty"
      mkdir local_fs_bug/a2
      touch local_fs_bug/a2/part-0000
      mkdir -p local_fs_bug/b2/c2
      touch local_fs_bug/b2/c2/dummy
      echo "content of a2: 1 part"
      hdfs -fs local -ls local_fs_bug/a2
      echo "content of b2/c2: 1 dummy file"
      hdfs -fs local -ls local_fs_bug/b2/c2
      echo "mv a2 b2/c2"
      hdfs -fs local -mv local_fs_bug/a2 local_fs_bug/b2/c2
      echo "resulting content of b/c"
      hdfs -fs local -ls local_fs_bug/b2/c2
      echo "a2 is moved inside of c2"
      

      Output:

      >>> HDFS: normal behavior
      content of a: 1 part
      Found 1 items
      -rw-r--r--   3 julien g          0 2012-09-25 17:16 /user/julien/local_fs_bug/a/part-0000
      content of b/c: empty
      mv a b/c
      resulting content of b/c
      Found 1 items
      drwxr-xr-x   - julien g          0 2012-09-25 17:16 /user/julien/local_fs_bug/b/c/a
      a is moved inside of c
      
      >>> local fs: bug
      content of a: 1 part
      12/09/25 17:16:34 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      Found 1 items
      -rw-r--r--   1 julien g          0 2012-09-25 17:16 /home/julien/local_fs_bug/a/part-0000
      content of b/c: empty
      12/09/25 17:16:34 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      mv a b/c
      12/09/25 17:16:35 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      resulting content of b/c
      12/09/25 17:16:35 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      Found 1 items
      -rw-r--r--   1 julien g          0 2012-09-25 17:16 /home/julien/local_fs_bug/b/c/part-0000
      bug: a replaces c
      
      >>> but it works if the destination is not empty
      content of a2: 1 part
      12/09/25 17:16:36 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      Found 1 items
      -rw-r--r--   1 julien g          0 2012-09-25 17:16 /home/julien/local_fs_bug/a2/part-0000
      content of b2/c2: 1 dummy file
      12/09/25 17:16:37 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      Found 1 items
      -rw-r--r--   1 julien g          0 2012-09-25 17:16 /home/julien/local_fs_bug/b2/c2/dummy
      mv a2 b2/c2
      12/09/25 17:16:37 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      resulting content of b/c
      12/09/25 17:16:38 WARN fs.FileSystem: "local" is a deprecated filesystem name. Use "file:///" instead.
      Found 2 items
      drwxr-xr-x   - julien g       4096 2012-09-25 17:16 /home/julien/local_fs_bug/b2/c2/a2
      -rw-r--r--   1 julien g          0 2012-09-25 17:16 /home/julien/local_fs_bug/b2/c2/dummy
      a2 is moved inside of c2
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            julienledem Julien Le Dem
            Votes:
            0 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: