From 4cccdc2a96b90c9e46e801b12b03788c1b16ecb7 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Fri, 19 Oct 2012 21:01:26 +0000 Subject: [PATCH] Moving HDFS-2802 related changes to a separate CHANGES.txt git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-2802@1400285 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 9 -- .../hdfs/server/namenode/FSEditLog.java | 14 +++ .../hdfs/server/namenode/FSEditLogOp.java | 110 +++++++++++++++++- .../server/namenode/FSEditLogOpCodes.java | 4 +- 4 files changed, 126 insertions(+), 11 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 3fe7c9c5cb..d9a678f166 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1,14 +1,5 @@ Hadoop HDFS Change Log -Branch-2802 Snapshot (Unreleased) - - NEW FEATURES - - HDFS-4076. Support snapshot of single files. (szetszwo) - - HDFS-4082. Add editlog opcodes for snapshot create and delete operations. - (suresh via szetszwo) - Trunk (Unreleased) INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java index c64d85a121..f7ccb552d9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java @@ -44,12 +44,14 @@ import org.apache.hadoop.hdfs.server.common.Storage.FormatConfirmable; import org.apache.hadoop.hdfs.server.common.Storage.StorageDirectory; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AddOp; +import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AllowSnapshotOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CancelDelegationTokenOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CloseOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.ConcatDeleteOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CreateSnapshotOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.DeleteOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.DeleteSnapshotOp; +import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.DisallowSnapshotOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.GetDelegationTokenOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.LogSegmentOp; import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.MkdirOp; @@ -877,6 +879,18 @@ void logDeleteSnapshot(String snapName, String snapRoot) { logEdit(op); } + void logAllowSnapshot(String snapName, String snapRoot) { + AllowSnapshotOp op = AllowSnapshotOp.getInstance(cache.get()) + .setSnapshotRoot(snapRoot); + logEdit(op); + } + + void logDisallowSnapshot(String snapName, String snapRoot) { + DisallowSnapshotOp op = DisallowSnapshotOp.getInstance(cache.get()) + .setSnapshotRoot(snapRoot); + logEdit(op); + } + /** * Get all the journals this edit log is currently operating on. */ diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java index 743cbf091e..d819543f7c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java @@ -2281,7 +2281,115 @@ public String toString() { return builder.toString(); } } - + + /** + * Operation corresponding to allow creating snapshot on a directory + */ + static class AllowSnapshotOp extends FSEditLogOp { + String snapshotRoot; + + public AllowSnapshotOp() { + super(OP_ALLOW_SNAPSHOT); + } + + public AllowSnapshotOp(String snapRoot) { + super(OP_ALLOW_SNAPSHOT); + snapshotRoot = snapRoot; + } + + static AllowSnapshotOp getInstance(OpInstanceCache cache) { + return (AllowSnapshotOp) cache.get(OP_ALLOW_SNAPSHOT); + } + + public AllowSnapshotOp setSnapshotRoot(String snapRoot) { + snapshotRoot = snapRoot; + return this; + } + + @Override + void readFields(DataInputStream in, int logVersion) throws IOException { + snapshotRoot = FSImageSerialization.readString(in); + } + + @Override + public void writeFields(DataOutputStream out) throws IOException { + FSImageSerialization.writeString(snapshotRoot, out); + } + + @Override + protected void toXml(ContentHandler contentHandler) throws SAXException { + XMLUtils.addSaxString(contentHandler, "SNAPSHOTROOT", snapshotRoot); + } + + @Override + void fromXml(Stanza st) throws InvalidXmlException { + snapshotRoot = st.getValue("SNAPSHOTROOT"); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("AllowSnapshotOp [snapshotRoot="); + builder.append(snapshotRoot); + builder.append("]"); + return builder.toString(); + } + } + + /** + * Operation corresponding to disallow creating snapshot on a directory + */ + static class DisallowSnapshotOp extends FSEditLogOp { + String snapshotRoot; + + public DisallowSnapshotOp() { + super(OP_DISALLOW_SNAPSHOT); + } + + public DisallowSnapshotOp(String snapRoot) { + super(OP_DISALLOW_SNAPSHOT); + snapshotRoot = snapRoot; + } + + static DisallowSnapshotOp getInstance(OpInstanceCache cache) { + return (DisallowSnapshotOp) cache.get(OP_DISALLOW_SNAPSHOT); + } + + public DisallowSnapshotOp setSnapshotRoot(String snapRoot) { + snapshotRoot = snapRoot; + return this; + } + + @Override + void readFields(DataInputStream in, int logVersion) throws IOException { + snapshotRoot = FSImageSerialization.readString(in); + } + + @Override + public void writeFields(DataOutputStream out) throws IOException { + FSImageSerialization.writeString(snapshotRoot, out); + } + + @Override + protected void toXml(ContentHandler contentHandler) throws SAXException { + XMLUtils.addSaxString(contentHandler, "SNAPSHOTROOT", snapshotRoot); + } + + @Override + void fromXml(Stanza st) throws InvalidXmlException { + snapshotRoot = st.getValue("SNAPSHOTROOT"); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("DisallowSnapshotOp [snapshotRoot="); + builder.append(snapshotRoot); + builder.append("]"); + return builder.toString(); + } + } + static private short readShort(DataInputStream in) throws IOException { return Short.parseShort(FSImageSerialization.readString(in)); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java index 8c218cdf16..e50b0876f0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java @@ -58,7 +58,9 @@ public enum FSEditLogOpCodes { OP_START_LOG_SEGMENT ((byte) 24), OP_UPDATE_BLOCKS ((byte) 25), OP_CREATE_SNAPSHOT ((byte) 26), - OP_DELETE_SNAPSHOT ((byte) 27); + OP_DELETE_SNAPSHOT ((byte) 27), + OP_ALLOW_SNAPSHOT ((byte) 28), + OP_DISALLOW_SNAPSHOT ((byte) 29); private byte opCode;