gluster源码浅析

gluster源码浅析gluster的volume是由一系列的translator组成的,translator就像输入输出流的堆栈式结构一样,由一个translator调用另一个translator,每个translator在运行时作为shared-object,根据不同的文件操作调用不同的函数.每个translator一般需要定义xlator_fops、xlator_cbks、init、fini、volume…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定
gluster的volume是由一系列的translator组成的,translator就像输入输出流的堆栈式结构一样,由一个translator调用另一个translator,每个translator在运行时作为shared-object,根据不同的文件操作调用不同的函数.

每个translator一般需要定义xlator_fops、xlator_cbks、init、fini、volume_options这几个结构体.结构体里是不同的函数指针

比较重要的是xlator_fops这个结构体,在这里,一般要定义规定好的文件操作,文件操作在xlator.h中都有严格的明确定义

比如

fop_readv_t readv;

fop_writev_t writev;

应该就是对文件内容写入和读出的操作

translator都是采用异步调用和callback的方式,上一个translator异步调用下一个translator的相应的函数,下一个translator完成后调用上一个translator的callback函数.调用和callback主要利用了两个宏,STACK_WIND和STACK_UNWIND

gluster的translator中,一般都能很容易找到文件操作和相应的回调函数,因为命名都很有规律

拿一个简单的rot 13的translator举例说明下

rot-13.c文件中定义了两个文件操作

struct xlator_fops fops = {
  
  
.readv = rot13_readv,
.writev = rot13_writev
};

Jetbrains全家桶1年46,售后保障稳定

即文件读取和文件写入操作

在上面可以找到

int32_t
rot13_writev_cbk (call_frame_t *frame,
void *cookie,
xlator_t *this,
int32_t op_ret,
int32_t op_errno,
struct iatt *prebuf,
struct iatt *postbuf, dict_t *xdata)
{
STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf,
xdata);
return 0;
}

int32_t
rot13_writev (call_frame_t *frame,
xlator_t *this,
fd_t *fd,
struct iovec *vector,
int32_t count,
off_t offset, uint32_t flags,
struct iobref *iobref, dict_t *xdata)
{
rot_13_private_t *priv = (rot_13_private_t *)this->private;
if (priv->encrypt_write)
rot13_iovec (vector, count);

STACK_WIND (frame,
rot13_writev_cbk,
FIRST_CHILD (this),
FIRST_CHILD (this)->fops->writev,
fd, vector, count, offset, flags,
iobref, xdata);
return 0;
}

rot13_writev是文件内容写入的函数指针,rot13_writev_cbk则是对应的callback

看到在rot13_writev函数中,调用宏STACK_WIND的时候,需要制定callback,当下一个translator同样的文件操作完成以后,callback就能被调用.在rot13_writev_cbk中,调用了STACK_UNWIND_STRICT这个宏来调用上层translator的callback.

在gluster源码中的xlators\cluster中的三个translator应该是我们研究的重点,尤其对于分布式文件系统来说,最重要的就是afr,即automatic file replication,自动文件复制.

通过阅读afr的源码可以看出,gluster的副本机制没有采用主从模型,而是所有节点都是主节点.在一次文件写入时,要调用afr的所有subvolume,而且要等待所有subvolume的回调.

推荐几篇好文章

[url]http://hekafs.org/index.php/2011/11/translator-101-class-1-setting-the-stage/[/url]

[url]http://hekafs.org/index.php/2011/11/translator-101-lesson-2-init-fini-and-private-context/[/url]

[url]http://hekafs.org/index.php/2011/11/translator-101-lesson-3-this-time-for-real/[/url]

[url]http://hekafs.org/index.php/2011/11/translator-101-lesson-4-debugging-a-translator/[/url]

让你更加深入了解gluster代码结构,还能自己构造translator,用GDB运行时debug gluster

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234267.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LDR命令

    LDR命令  LDR指令用于从内存中将一个32位的字读取到指令中的目标寄存器中,如果目标寄存器为PC,则可以实现“长”跳转。主要有一下3种方式使用:ldrr0,_startldrr0,=_startldrpc,_start  逐条分析:一、ldrr0,_start  从内存地址_start的地方,把其对应的命令执行对应的“执行码”读入到r0中。二、ldrr0,=_start  …

    2022年6月28日
    82
  • mysql 错误1062_mysql主从切换步骤

    mysql 错误1062_mysql主从切换步骤周末的时候,突然收到报警的短信,是一台slave服务器sql_thread不为YES,唉,还能不能愉快的过周末啊。上服务器一看是,是主键冲突导致从库中断,也是Last_SQL_Errno:1062错误,我们常用的方法是跳过错误,比如SETGLOBALSQL_SLAVE_SKIP_COUNTER=1或者直接slave-skip-errors=1062,这样确实解决了问题,恢复了复制。但是久而…

    2022年8月30日
    2
  • R语言与统计分析[通俗易懂]

    R语言与统计分析[通俗易懂]R语言与统计分析汤银才主编高等教育出版社二○○八年五月内容介绍本书以数据的常用统计分析方法为基础,在简明扼要地阐述统计学基本概念、基本思想与基本方法的基础上,讲述与之相对应的R函数的实现,并通过具体的例子说明统计问题求解的过程.本书注重思想性、实用性和可操作性.在内容的安排上不仅包含了基础统计分析中的探索性数据分析、参数的估计与假设检验,还包括的非参数统计分

    2022年5月12日
    124
  • ffmpeg opencv_ffmpeg -q:v

    ffmpeg opencv_ffmpeg -q:v最直接的区别就是av_freep()会在av_free()的基础上,把传入的指针再置为NULL。FFmpeg源代码:av_free()voidav_free(void*ptr){#if

    2022年8月6日
    8
  • linux tomcat自动重启(linux关闭服务器命令)

    这里重启的条件是之前已经启动了tomcat服务器的情况下第一步:进入linux下tomcat目录,这里需要看你的tomcat配置在linux的哪个位置下,下面只是我个人的配置目录,不代表全部cd/usr/local/src/tomcat/bin第二步:查看当前启动的tomcat使用的进程,通过查看,我们发现tomcat占用了1630端口ps-ef|greptomc…

    2022年4月11日
    115
  • 使用css控制gridview控件的样式,GridView 样式美化及应用.doc[通俗易懂]

    使用css控制gridview控件的样式,GridView 样式美化及应用.doc[通俗易懂]GridView样式美化及应用GridView样式美化及应用摘要:ASP.NET4.0中GridView控件主要用于显示数据库的查询结果。文中对GridView控件的样式美化进行了研究,探讨了GridView控件在应用过程中的自动排序及动态添加列等功能,并给出了其实现方法。经过系统的应用与实践验证,基本实现了预期的效果。关键词:GridView;class绑定;事件中图分类号:TP311…

    2022年9月25日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号