Namenode热备份机制(3)

loadFSEdits通过对日志文件进行逐条读取,根据每条文件的操作(一个大switch)对文件树进行相应的操作,如:如果是文件删除操作,读出要删除的文件路径和‘先前执行此操作时’(指在NN中执行)的时间戳timestamp(为了更新文件父目录的最近修改时间),然后将SNN内存中的文件树的相应文件删除:

case OP_DELETE: {
          numOpDelete++;
          int length = in.readInt();
          if (length != 2) {
            throw new IOException("Incorrect data format. "
                                  + "delete operation.");
          }
          path = FSImage.readString(in);
          timestamp = readLong(in);
          fsDir.unprotectedDelete(path, timestamp);
          break;
        }

其他操作和从edits读出的内容如下所示:

logOpenFile(OP_ADD):申请lease

OP_ADD
length=5                  接下来要读的writeable数(用于序列化中)
path=/user/root/2.txt   
replication=3 
mtime=1363416261479 
atime=1363416261479 
blockSize=67108864 
numBlocks=0
username=root
groupname=supergroup
u=6 g=4o=4
clientName=DFSClient_-1177280126
clientMachine=127.0.0.1

path(路徂)/replication(副本数,文本形式)/modificationTime(修改时间,文本形式)/accessTime(访问时间,文本

形式)/preferredBlockSize(块大小,文本形式)/BlockInfo[](增强的数据块信息,数组)/permissionStatus(访问控刢

信息)/clientName(客户名)/clientMachine(客户机器名)

logCloseFile(OP_CLOSE):归还lease

OP_CLOSE
length=5
path=/user/root/2.txt
replication=3
mtime=1363416261479
atime=1363416261479
blockSize=67108864
numBlocks=1
blockId=-8541918383982462246
numBytes=33
username=
groupname=
u=0 g=0o=0
clientName=
clientMachine=

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a17639e9466aa376e9151b31b774c0a8.html