Author: suresh
Date: Fri Oct 19 21:15:11 2012
New Revision: 1400298
URL: http://svn.apache.org/viewvc?rev=1400298&view=rev
Log:
HDFS-4086. Add editlog opcodes to allow and disallow snapshots on a directory.
Contributed by Brandon Li.
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt?rev=1400298&r1=1400297&r2=1400298&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-2802.txt
Fri Oct 19 21:15:11 2012
@@ -5,4 +5,7 @@ Branch-2802 Snapshot (Unreleased)
HDFS-4082. Add editlog opcodes for snapshot create and delete operations.
(suresh via szetszwo)
+ HDFS-4086. Add editlog opcodes to allow and disallow snapshots on a
+ directory. (Brandon Li via suresh)
+
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java?rev=1400298&r1=1400297&r2=1400298&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
Fri Oct 19 21:15:11 2012
@@ -44,12 +44,14 @@ import org.apache.hadoop.hdfs.server.com
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 @@ public class FSEditLog implements LogsPu
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.
*/
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java?rev=1400298&r1=1400297&r2=1400298&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
Fri Oct 19 21:15:11 2012
@@ -2281,7 +2281,115 @@ public abstract class FSEditLogOp {
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));
}
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java?rev=1400298&r1=1400297&r2=1400298&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java
Fri Oct 19 21:15:11 2012
@@ -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;