元数据服务创建文件(mknod)流程
2017-03-20 10:07:32 0 举报
元数据服务创建文件(mknod)流程是一种用于在Linux系统中创建特殊文件的系统调用。它通过指定文件类型、设备号和文件名来创建一个具有特定属性的文件。首先,用户需要确定文件类型,如字符设备、块设备或符号链接等。然后,用户需要为该文件分配一个唯一的设备号。接下来,用户需要提供文件名以标识新创建的文件。最后,系统会根据用户提供的信息创建相应的特殊文件,并将其与指定的设备号关联起来。这个过程对于管理Linux系统中的设备和文件非常重要,因为它允许用户直接操作硬件设备并控制其行为。总之,元数据服务创建文件(mknod)流程是一种简单而强大的工具,可以帮助用户更好地管理和控制系统中的资源。
作者其他创作
大纲/内容
不是
根据父目录 inode id 所在的unit 文件ID以及父目录inode id 在名字空间中的页索引得到该页的数据
开始创建 inode属性,首先从元数据缓存中读取属性页数据,然后通过 inode属性页对象创建 inode属性,创建成功之后设置文件的ACL访问控制列表
NameNode 收到 AttrNode 回复的消息之后,首先解析消息包得到最新的属性信息
进入 Create_SubCtx 状态机,将操作上下文的操作状态修改为 OpCtxState::MK_getdentry,进入 Create状态机,构造一个操作码为get dentry 的操作上下文,将这个操作上下文分发给 FileSystem 对象处理
给属性页加锁
消息类型为 YfsMessage::YM_astons_getattr
AttrNode 请求已经执行完成,首先将操作上下文中的操作状态设置为 OpCtx::S_commiting,然后将所有微事务提交,提交完成后,将操作上下文的操作状态设置为 OpCtx::S_sending_response,然后通过网络层向NameNode 发送回应
根据父目录的 inode id 选择一个工作线程来处理这个操作上下文
根据请求中包含的操作上下文信息,mAttrnodeMgr首先为这个 Mknod 请求选择一个AttrNode来分配inodeid,在AttrNode集合中选择一个负载最轻的AttrNode 来分配inode id
根据父目录的 inode id 得到该inode id 所在unit 文件的ID
根据父目录的unit ID 和页索引得到父目录的名字空间索引页数据
锁住父目录 inodeid 所在的名字空间
首先构造一个操作码为 OpCtx::NS_createdentry的操作上下文,然后根据父目录的 inode id 选择一个工作线程来处理这个操作上下文
根据 inode 的属性记录索引在属性页中设置该 inode 的属性
根据inode id 在inode 属性页中得到该inode的属性信息
不正常
再次进入 Create_SubCtx 状态机,将操作上下文的操作状态修改为 OpCtxState::MK_done后,进入Create状态机,通过网络给AP回复mknod完成消息,消息类型为 YfsMessage::YM_mstocl_mknod
根据inode id 得到该 inode的属性页索引
根据 inodeid 得到该 inode 属性页索引,以及属性记录索引
在名字空间中检索父目录的信息
消息类型为 YfsMessage::YM_nstoas_setattr
消息类型为 YM_nstoas_getattr
ClientOPCoordinator对象在收到操作上下文OpCtx之后,根据操作上下文中操作码mOpCode做相应的处理,这里Mknod进入Create状态机
NameNode 在网络层收到 AP 发出的创建文件消息,消息类型为 YfsMessage::YM_cltoms_mknod,将该消息转交给 NClient类 成员mClient来处理
给AP回复Mknod结果消息,释放操作上下文对象,并返回
首先创建一个操作上下文OpCtx,解析消息包,并给操作上下文赋值。然后解析操作上下文中内容,判断该操作是否合法
将操作上下文的操作状态修改为OpCtxState::MK_done,然后再次进入Create状态机,给AP回复 mknod 操作完成消息
mAttrnodeMgr是一个线程类,依次处理请求队列中的请求,根据请求类型对各请求做不同处理。此时当检查到请求类型为IRequest::NRT_AN_FSReq时,开始处理这个获取父目录属性的请求
将操作上下文的操作状态修改为OpCtxState::MK_getpattr,然后再次进入Create状态机,构造一个获取父目录属性请求的操作上下文,将该操作上下文信息存入一个IRequest类型请求, 将请求放入mAttrnodeMgr的队列中
NameNodeParserDispatcher对象收到操作上下文后,将操作交给FileSystem对象来处理,首先检查该父目录inodeid 所在的unit 文件是否处于 changing 状态
返回错误码 YFS_EAGAIN
提交所有的微事务,通过网络给 NameNode 回复set attr操作完成消息,消息类型为 YfsMessage::YM_astons_setattr
开始
检查该父目录inodeid 所在的unit 文件是否可用
AttrNode 收到这个 mknod 消息之后,构造一个操作上下文,操作码为 FSO_mknod,并把这个操作上下文发布到某个工作线程处理
消息类型为 YfsMessage::YM_astons_mknod
正常
根据父目录 inode id 得到父目录页的索引
检查父目录属性单元是否能正常访问
根据inode id 得到该inode id所属的unit 文件ID
mClient收到消息后,判断消息类型为 YfsMessage::YM_cltoms_mknod,进入Mknod流程
NameNode收到AttrNode回复的get attr消息后,首先从消息包里解析出父目录属性信息,并保存到操作上下文中,将操作上下文转交 ClientOPCoordinator处理
AttrNode 的网络层收到向NameNode发送回应的请求后,将请求内容转换为网络消息包,发往对应的NameNode,消息类型为 YfsMessage::YM_astons_mknod
由于操作码为OpCtx::FSO_getattr,不需要分派到固定的工作线程处理,根据优先级选择一个工作线程来处理这个get attr 请求,将操作上下文对象放入这个工作线程(FileSystemWorker)的任务队列
不可用
AttrNode 收到这个消息后,将消息转换为一个操作上下文,选择一个工作线程来处理这个操作上下文
构造一个操作码为 OpCtx::FSO_mkinode的操作上下文,然后选择一个负载最轻的AttrNode,并给这个AttrNode 发送 mknod 消息,消息类型为 YfsMessage::YM_nstoas_mknod
记录操作开始时间,将操作上下文OpCtx分发给ClientOPCoordinator 对象处理
可用
消息类型为 YfsMessage::YM_nstoas_mknod
不合法
提交所有的微事务,进入 Create_SubCtx 状态机,将操作上下文的操作状态修改为 OpCtxState::MK_mkinode,进入 Create状态机
初始化 inode 分配页和属性页
合法
根据 inode 属性记录索引在属性页中找到该 inde 的属性信息
提交所有的微事务,通过网络给NameNode发送 get attr操作的回应消息,消息类型为 YfsMessage::YM_astons_getattr
构造一个操作码为 OpCtx::FSO_setattr 的操作上下文,将这个操作上下文转换为网络消息发往 AttrNode,消息类型为 YfsMessage::YM_nstoas_setattr
提交所有的微事务,再次进入 Create_SubCtx 状态机,将操作上下文的操作状态修改为 OpCtxState::MK_setattr,进入 Create 状态机
在名字空间中添加父目录的相关信息
是
选中的AttrNode收到NameNode发过来的消息包后,判断消息类型为YfsMessage::YM_nstoas_getattr,进入GetAttr分支,将消息包中的内容解析后存入一个操作上下文对象,然后将操作上下文交给NameNodeParserDispatcher对象处理
结束
根据 inode id 得到该inode id 所在 unit 文件的ID
工作线程收到这个操作上下文之后,首先给这个mknod 操作分配一个inode id,然后为inode id的分配创建一个微事务
NameNode 收到这个回应消息之后,再次进入 Create_SubCtx 状态机,将操作上下文的操作状态修改为 OpCtxState::MK_createdentry,进入 Create 状态机
选中 AttrNode 之后,NameNode将操作上下文信息封装到网络消息包中,通过网络层将消息发送到选中的AttrNode,消息类型为 YfsMessage::YM_nstoas_getattr
消息类型为 YfsMessage::YM_astons_setattr
根据父目录的inode id 得到父目录inode id 在名字空间中的页索引
0 条评论
下一页