/** * Construct the reader * @param in The stream to read from. * @param logVersion The version of the data coming from the stream. */ public Reader(DataInputStream in, StreamLimiter limiter, int logVersion) { this.logVersion = logVersion; if (NameNodeLayoutVersion.supports( LayoutVersion.Feature.EDITS_CHESKUM, logVersion)) { this.checksum = DataChecksum.newCrc32(); } else { this.checksum = null; } // It is possible that the logVersion is actually a future layoutversion // during the rolling upgrade (e.g., the NN gets upgraded first). We // assume future layout will also support length of editlog op. this.supportEditLogLength = NameNodeLayoutVersion.supports( NameNodeLayoutVersion.Feature.EDITLOG_LENGTH, logVersion) || logVersion < NameNodeLayoutVersion.CURRENT_LAYOUT_VERSION; if (this.checksum != null) { this.in = new DataInputStream( new CheckedInputStream(in, this.checksum)); } else { this.in = in; } this.limiter = limiter; this.cache = new OpInstanceCache(); this.maxOpSize = DFSConfigKeys.DFS_NAMENODE_MAX_OP_SIZE_DEFAULT; }
public void logUpdateBlocks(String path, INodeFile file, boolean toLogRpcIds) { Preconditions.checkArgument(file.isUnderConstruction()); UpdateBlocksOp op = UpdateBlocksOp.getInstance(cache.get()) .setPath(path) .setBlocks(file.getBlocks()); logRpcIds(op, toLogRpcIds); logEdit(op); }
@SuppressWarnings("unchecked") public <T extends FSEditLogOp> T get(FSEditLogOpCodes opCode) { return useCache ? (T)CACHE.get().get(opCode) : (T)newInstance(opCode); }
static void runEditLogTest(EditLogTestSetup elts) throws IOException { final File TEST_LOG_NAME = new File(TEST_DIR, "test_edit_log"); final OpInstanceCache cache = new OpInstanceCache();
/** * Construct the reader * @param in The stream to read from. * @param logVersion The version of the data coming from the stream. */ public Reader(DataInputStream in, StreamLimiter limiter, int logVersion) { this.logVersion = logVersion; if (NameNodeLayoutVersion.supports( LayoutVersion.Feature.EDITS_CHESKUM, logVersion)) { this.checksum = DataChecksum.newCrc32(); } else { this.checksum = null; } // It is possible that the logVersion is actually a future layoutversion // during the rolling upgrade (e.g., the NN gets upgraded first). We // assume future layout will also support length of editlog op. this.supportEditLogLength = NameNodeLayoutVersion.supports( NameNodeLayoutVersion.Feature.EDITLOG_LENGTH, logVersion) || logVersion < NameNodeLayoutVersion.CURRENT_LAYOUT_VERSION; if (this.checksum != null) { this.in = new DataInputStream( new CheckedInputStream(in, this.checksum)); } else { this.in = in; } this.limiter = limiter; this.cache = new OpInstanceCache(); this.maxOpSize = DFSConfigKeys.DFS_NAMENODE_MAX_OP_SIZE_DEFAULT; }
@Override protected OpInstanceCache initialValue() { return new OpInstanceCache(); } };
@Override protected OpInstanceCache initialValue() { return new OpInstanceCache(); } };
public static FSEditLogOp createMkdirOp(String path) { MkdirOp op = MkdirOp.getInstance(new FSEditLogOp.OpInstanceCache()) .setPath(path) .setTimestamp(0) .setPermissionStatus(new PermissionStatus( "testuser", "testgroup", FsPermission.getDefault())); return op; }
static RemoveCacheDirectiveInfoOp getInstance(OpInstanceCache cache) { return (RemoveCacheDirectiveInfoOp) cache.get(OP_REMOVE_CACHE_DIRECTIVE); }
static ModifyCacheDirectiveInfoOp getInstance(OpInstanceCache cache) { return (ModifyCacheDirectiveInfoOp) cache.get(OP_MODIFY_CACHE_DIRECTIVE); }
static AddCacheDirectiveInfoOp getInstance(OpInstanceCache cache) { return (AddCacheDirectiveInfoOp) cache.get(OP_ADD_CACHE_DIRECTIVE); }
static AllowSnapshotOp getInstance(OpInstanceCache cache) { return (AllowSnapshotOp) cache.get(OP_ALLOW_SNAPSHOT); }
static CreateSnapshotOp getInstance(OpInstanceCache cache) { return (CreateSnapshotOp)cache.get(OP_CREATE_SNAPSHOT); }
static SetNSQuotaOp getInstance(OpInstanceCache cache) { return (SetNSQuotaOp)cache.get(OP_SET_NS_QUOTA); }
static DeleteOp getInstance(OpInstanceCache cache) { return (DeleteOp)cache.get(OP_DELETE); }
/** * Add close lease record to edit log. */ public void logCloseFile(String path, INodeFile newNode) { CloseOp op = CloseOp.getInstance(cache.get()) .setPath(path) .setReplication(newNode.getFileReplication()) .setModificationTime(newNode.getModificationTime()) .setAccessTime(newNode.getAccessTime()) .setBlockSize(newNode.getPreferredBlockSize()) .setBlocks(newNode.getBlocks()) .setPermissionStatus(newNode.getPermissionStatus()); logEdit(op); }
static SetAclOp getInstance(OpInstanceCache cache) { return (SetAclOp) cache.get(OP_SET_ACL); }
static SetXAttrOp getInstance(OpInstanceCache cache) { return (SetXAttrOp) cache.get(OP_SET_XATTR); }
static DeleteSnapshotOp getInstance(OpInstanceCache cache) { return (DeleteSnapshotOp)cache.get(OP_DELETE_SNAPSHOT); }
static InvalidOp getInstance(OpInstanceCache cache) { return (InvalidOp)cache.get(OP_INVALID); }