HDFS-4086. Add editlog opcodes to allow and disallow snapshots on a directory. Contributed by Brandon Li.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-2802@1400298 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
79e7257bb1
commit
ecffab63af
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -44,12 +44,14 @@ import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.NamenodeRole;
|
|||
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 LogsPurgeable {
|
|||
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.
|
||||
*/
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue