Author: szetszwo
Date: Fri Oct 19 19:38:48 2012
New Revision: 1400247
URL: http://svn.apache.org/viewvc?rev=1400247&view=rev
Log:
HDFS-4082. Add editlog opcodes for snapshot create and delete operations.
Contributed by suresh
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java
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.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1400247&r1=1400246&r2=1400247&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
Fri Oct 19 19:38:48 2012
@@ -6,6 +6,9 @@ Branch-2802 Snapshot (Unreleased)
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
Modified:
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java?rev=1400247&r1=1400246&r2=1400247&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java
(original)
+++
hadoop/common/branches/HDFS-2802/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java
Fri Oct 19 19:38:48 2012
@@ -94,7 +94,8 @@ public class LayoutVersion {
"Use LongWritable and ShortWritable directly instead of ArrayWritable
of UTF8"),
OPTIMIZE_PERSIST_BLOCKS(-40,
"Serialize block lists with delta-encoded variable length ints, " +
- "add OP_UPDATE_BLOCKS");
+ "add OP_UPDATE_BLOCKS"),
+ SNAPSHOT(-41, "Support for snapshot feature");
final int lv;
final int ancestorLV;
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=1400247&r1=1400246&r2=1400247&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 19:38:48 2012
@@ -47,7 +47,9 @@ import org.apache.hadoop.hdfs.server.nam
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.GetDelegationTokenOp;
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.LogSegmentOp;
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.MkdirOp;
@@ -863,6 +865,18 @@ public class FSEditLog implements LogsPu
logEdit(op);
}
+ void logCreateSnapshot(String snapName, String snapRoot) {
+ CreateSnapshotOp op = CreateSnapshotOp.getInstance(cache.get())
+ .setSnapshotName(snapName).setSnapshotRoot(snapRoot);
+ logEdit(op);
+ }
+
+ void logDeleteSnapshot(String snapName, String snapRoot) {
+ DeleteSnapshotOp op = DeleteSnapshotOp.getInstance(cache.get())
+ .setSnapshotName(snapName).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=1400247&r1=1400246&r2=1400247&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 19:38:48 2012
@@ -2160,6 +2160,128 @@ public abstract class FSEditLogOp {
}
}
+ /**
+ * Operation corresponding to creating a snapshot
+ */
+ static class CreateSnapshotOp extends FSEditLogOp {
+ String snapshotName;
+ String snapshotRoot;
+
+ public CreateSnapshotOp() {
+ super(OP_CREATE_SNAPSHOT);
+ }
+
+ static CreateSnapshotOp getInstance(OpInstanceCache cache) {
+ return (CreateSnapshotOp)cache.get(OP_CREATE_SNAPSHOT);
+ }
+
+ CreateSnapshotOp setSnapshotName(String snapName) {
+ this.snapshotName = snapName;
+ return this;
+ }
+
+ public CreateSnapshotOp setSnapshotRoot(String snapRoot) {
+ snapshotRoot = snapRoot;
+ return this;
+ }
+
+ @Override
+ void readFields(DataInputStream in, int logVersion) throws IOException {
+ snapshotName = FSImageSerialization.readString(in);
+ snapshotRoot = FSImageSerialization.readString(in);
+ }
+
+ @Override
+ public void writeFields(DataOutputStream out) throws IOException {
+ FSImageSerialization.writeString(snapshotName, out);
+ FSImageSerialization.writeString(snapshotRoot, out);
+ }
+
+ @Override
+ protected void toXml(ContentHandler contentHandler) throws SAXException {
+ XMLUtils.addSaxString(contentHandler, "SNAPSHOTNAME", snapshotName);
+ XMLUtils.addSaxString(contentHandler, "SNAPSHOTROOT", snapshotRoot);
+ }
+
+ @Override
+ void fromXml(Stanza st) throws InvalidXmlException {
+ snapshotName = st.getValue("SNAPSHOTNAME");
+ snapshotRoot = st.getValue("SNAPSHOTROOT");
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("CreateSnapshotOp [snapshotName=");
+ builder.append(snapshotName);
+ builder.append(", snapshotRoot=");
+ builder.append(snapshotRoot);
+ builder.append("]");
+ return builder.toString();
+ }
+ }
+
+ /**
+ * Operation corresponding to delete a snapshot
+ */
+ static class DeleteSnapshotOp extends FSEditLogOp {
+ String snapshotName;
+ String snapshotRoot;
+
+ DeleteSnapshotOp() {
+ super(OP_DELETE_SNAPSHOT);
+ }
+
+ static DeleteSnapshotOp getInstance(OpInstanceCache cache) {
+ return (DeleteSnapshotOp)cache.get(OP_DELETE_SNAPSHOT);
+ }
+
+ DeleteSnapshotOp setSnapshotName(String snapName) {
+ this.snapshotName = snapName;
+ return this;
+ }
+
+ DeleteSnapshotOp setSnapshotRoot(String snapRoot) {
+ snapshotRoot = snapRoot;
+ return this;
+ }
+
+ @Override
+ void readFields(DataInputStream in, int logVersion) throws IOException {
+ snapshotName = FSImageSerialization.readString(in);
+ snapshotRoot = FSImageSerialization.readString(in);
+ }
+
+ @Override
+ public void writeFields(DataOutputStream out) throws IOException {
+ FSImageSerialization.writeString(snapshotName, out);
+ FSImageSerialization.writeString(snapshotRoot, out);
+ }
+
+ @Override
+ protected void toXml(ContentHandler contentHandler) throws SAXException {
+ XMLUtils.addSaxString(contentHandler, "SNAPSHOTNAME", snapshotName);
+ XMLUtils.addSaxString(contentHandler, "SNAPSHOTROOT", snapshotRoot);
+ }
+
+ @Override
+ void fromXml(Stanza st) throws InvalidXmlException {
+ snapshotName = st.getValue("SNAPSHOTNAME");
+ snapshotRoot = st.getValue("SNAPSHOTROOT");
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("DeleteSnapshotOp [snapshotName=");
+ builder.append(snapshotName);
+ builder.append(", 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=1400247&r1=1400246&r2=1400247&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 19:38:48 2012
@@ -56,7 +56,9 @@ public enum FSEditLogOpCodes {
OP_REASSIGN_LEASE ((byte) 22),
OP_END_LOG_SEGMENT ((byte) 23),
OP_START_LOG_SEGMENT ((byte) 24),
- OP_UPDATE_BLOCKS ((byte) 25);
+ OP_UPDATE_BLOCKS ((byte) 25),
+ OP_CREATE_SNAPSHOT ((byte) 26),
+ OP_DELETE_SNAPSHOT ((byte) 27);
private byte opCode;