概述
分三块来看MOOsefs,mfsmount/metaserver然后就是chunkServer.
mfs_statfs、mfs_lookup…mfs_write、mfs_access是由mfsmount去实现的函数,一共23种文件操作,mfsmount全部要自己去实现一遍。当在fuse注册的挂载点上(默认对应/mnt/mfs)进行文件操作时,fuse就会使用mfsmount的实现去实现这些操作。 例如,我们在/mnt/mfs创建一个text.txt文件,fuse就会调用mfs_create去进行操作(当然需要传递文件名等必要的参数)
23个文件操作:
目录结构的数据被存在了masterserver上,客户端是没有这些数据的。根目录(/mnt/mfs)的ino被定为0。
- void mfs_rmdir(fuse_req_t req, fuse_ino_t parent, const char *name) {
- uint32_t nleng;
- int status;
- const struct fuse_ctx *ctx;
- /*...........*/
- ctx = fuse_req_ctx(req);
- status = fs_rmdir(parent,nleng,(const uint8_t*)name,ctx->uid,ctx->gid);
- status = mfs_errorconv(status);
- if (status!=0) {
- fuse_reply_err(req, status);
- } else {
- fuse_reply_err(req, 0);
- }
- }
在客户端,进行mfsmount的OS上,mfsMount一旦启动,相关的thread全部待命/也可能是call-back,先通过儿童组
mfsmount的工作过程
▲mfsmount启动后,首先会读取命令行的参数和配置。
▲然后使用fuse定义好挂载点,并对应上mfsmount实现的文件操作函数。
▲设置好到masterserver的连接参数。
▲启动线程fs_nop_thread(keep alive)用于保持与masterserver的连接状态。fs_receive_thread,连接到masterserver并进行通讯,在masterserver上注册,并做一些初始化工作。(挂接客户端,就直接开始尝试连接masterserver)
▲开始响应客户端的输入(由fuse中转)。
重点解释下响应用户输入的过程,输入就是我们所做的创建、修改文件的操作,这些操作会被移交到在fuse_lowlevel_ops中定义好的各个具体的函数,在这些具体的函数中去和masterserver进行通信。
每次用户所做一个文件操作,就会生成一个threc类型的数据:threc// 这个数据类型确实太重要了///===fs_createpacket(rec,CUTOMA_FUSE_READ_CHUNK,8); 一般由这个fs_createpacket来创建
===这种架构中,得master-server的压力还是不小的,尤其大量的目录浏览操作来自不同的很多的终端。。
除了read和write外,其它操作都只需要从masterserver获取数据。而read和write操作则需要先和masterserver通信,取得数据所在的chunkserver的地址和端口后,再从chunkserver读写数据。read和write和masterserver通讯的时候仍然使用threc结构//
mfsmount然后更具这些信息与chunkserver通信去获取数据,数据读取到后控制权交还给fuse::::整个fuse的操作过程可以比较长,交给mfsmount可以执行几个调用后,再回掉--回fuse//
读源代码,分析mfsfuse如何实现了23个接口,会有多次调用的,应该在read/write。 而且对应的meta-Server的方法如何实现并返回的很重要。
最后
以上就是傲娇小松鼠为你收集整理的moosefs简单学习--mfsmount的全部内容,希望文章能够帮你解决moosefs简单学习--mfsmount所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复