Merge from trunk. HDFS-6620. Snapshot docs should specify about preserve options with cp command. Contributed by Stephen Chu.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2.5@1607687 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Uma Maheswara Rao G 2014-07-03 16:14:13 +00:00
parent 6818a66eb3
commit f27470d984
3 changed files with 29 additions and 1 deletions

View File

@ -239,6 +239,9 @@ Release 2.5.0 - UNRELEASED
HDFS-6610. TestShortCircuitLocalRead tests sometimes timeout on slow HDFS-6610. TestShortCircuitLocalRead tests sometimes timeout on slow
machines. (Charles Lamb via wang) machines. (Charles Lamb via wang)
HDFS-6620. Snapshot docs should specify about preserve options with cp command
(Stephen Chu via umamahesh)
OPTIMIZATIONS OPTIMIZATIONS
HDFS-6214. Webhdfs has poor throughput for files >2GB (daryn) HDFS-6214. Webhdfs has poor throughput for files >2GB (daryn)

View File

@ -97,7 +97,9 @@
<li>Listing the files in snapshot <code>s0</code>: <li>Listing the files in snapshot <code>s0</code>:
<source>hdfs dfs -ls /foo/.snapshot/s0</source></li> <source>hdfs dfs -ls /foo/.snapshot/s0</source></li>
<li>Copying a file from snapshot <code>s0</code>: <li>Copying a file from snapshot <code>s0</code>:
<source>hdfs dfs -cp /foo/.snapshot/s0/bar /tmp</source></li> <source>hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp</source>
<p>Note that this example uses the preserve option to preserve
timestamps, ownership, permission, ACLs and XAttrs.</p></li>
</ul> </ul>
</subsection> </subsection>
</section> </section>

View File

@ -26,6 +26,7 @@ import java.util.Map;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsShell;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.XAttrSetFlag; import org.apache.hadoop.fs.XAttrSetFlag;
import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.fs.permission.FsPermission;
@ -38,6 +39,7 @@ import org.apache.hadoop.hdfs.protocol.SnapshotAccessControlException;
import org.apache.hadoop.hdfs.server.namenode.NameNode; import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter; import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter;
import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.ToolRunner;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
@ -57,6 +59,7 @@ public class TestXAttrWithSnapshot {
private static int pathCount = 0; private static int pathCount = 0;
private static Path path, snapshotPath; private static Path path, snapshotPath;
private static String snapshotName; private static String snapshotName;
private final int SUCCESS = 0;
// XAttrs // XAttrs
private static final String name1 = "user.a1"; private static final String name1 = "user.a1";
private static final byte[] value1 = { 0x31, 0x32, 0x33 }; private static final byte[] value1 = { 0x31, 0x32, 0x33 };
@ -351,6 +354,26 @@ public class TestXAttrWithSnapshot {
hdfs.removeXAttr(filePath, name1); hdfs.removeXAttr(filePath, name1);
} }
/**
* Test that users can copy a snapshot while preserving its xattrs.
*/
@Test (timeout = 120000)
public void testCopySnapshotShouldPreserveXAttrs() throws Exception {
FileSystem.mkdirs(hdfs, path, FsPermission.createImmutable((short) 0700));
hdfs.setXAttr(path, name1, value1);
hdfs.setXAttr(path, name2, value2);
SnapshotTestHelper.createSnapshot(hdfs, path, snapshotName);
Path snapshotCopy = new Path(path.toString() + "-copy");
String[] argv = new String[] { "-cp", "-px", snapshotPath.toUri().toString(),
snapshotCopy.toUri().toString() };
int ret = ToolRunner.run(new FsShell(conf), argv);
assertEquals("cp -px is not working on a snapshot", SUCCESS, ret);
Map<String, byte[]> xattrs = hdfs.getXAttrs(snapshotCopy);
assertArrayEquals(value1, xattrs.get(name1));
assertArrayEquals(value2, xattrs.get(name2));
}
/** /**
* Initialize the cluster, wait for it to become active, and get FileSystem * Initialize the cluster, wait for it to become active, and get FileSystem
* instances for our test users. * instances for our test users.