- 浏览: 53542 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mayatama:
jiakon 写道你好,请问yum install glust ...
Glusterfs+Swift 对外提供对像存储 -
jiakon:
你好,请问yum install glusterfs glus ...
Glusterfs+Swift 对外提供对像存储
glusterd中的状态机浅析
- 博客分类:
- glusterfs
当RPC请求到达Glusterd守护进程后, 它会根据rpcsvc_actor_t gd_svc_cli_actors[] 数组来选择相应的处理函数。
一般函数名为glusterd_handle_XXX 。
这类函数一般负责从xdr中提取出请求数据,比如卷名,主机名等等。
然后调用glusterd_op_begin 或者其他函数 向请求队列里面注入事件(inject event)。
glusterd有两个状态机(state machine): friend sm 和 operation sm ,
friend sm负责处理peer之间的事件
operation sm负责处理自身的事件
它们分别通过函数 glusterd_friend_sm ()和 glusterd_op_sm ()启动运行。两个队列 gd_friend_sm_queue和gd_op_sm_queue, 即为两个状态机的消息队列。
下面以glusterd_op_sm为例,介绍下状态机的原理,glusterd_friend_sm与之类似。
//循环直到清空消息队列 while (!list_empty (&gd_op_sm_queue)) { //遍历消息队列 list_for_each_entry_safe (event, tmp, &gd_op_sm_queue, list) { //先从队列中去掉当前要处理的消息 list_del_init (&event->list); event_type = event->event; ... //获得当前状态的事件响应列表 state = glusterd_op_state_table[opinfo.state.state]; //根据事件响应表找到处理函数 handler = state[event_type].handler; //执行处理函数 ret = handler (event, event->ctx); //处理完毕后,进行状态转移 opinfo->state.state = state[event_type].next_state //删除event以及其context glusterd_destroy_op_event_ctx (event); GF_FREE (event); } }
其中,各种状态的事件响应函数表定义在xlators/mgmt/glusterd/src/glusterd-op-sm.c,应该是状态机中比较繁琐的部分,状态如何处理以及转换,都是由这些表定义的。
下面以命令 volume status 为例,介绍状态机执行流程。
当命令请求到达glusterd时候,会触发glusterd_handle_status_volume函数,它将解析请求参数,并将事件GD_OP_EVENT_START_LOCK注入gd_op_sm_queue。
然后,friend sm开始运行。我们假设gd_friend_sm_queue为空,那么这个函数就跳过了。
接着,op sm开始运行, 它会从gd_op_sm_queue取出我们刚注入的事件,根据当前的状态和事件类型选择相应的事件处理函数。
初始状态是Default,发送流程如下:
先发start-lock请求,
待所有peer都回复后,开始发送stage op请求,
待所有peer都回复后,开始brick op请求。
待所有peer都回复后,开始commit op请求。
待所有peer都回复后,开始unlock op请求。
待所有peer都回复后,状态回到default。
Transitioning from 'Lock sent' to 'Lock sent' due to event 'GD_OP_EVENT_RCVD_ACC'
Transitioning from 'Lock sent' to 'Stage op sent' due to event 'GD_OP_EVENT_ALL_ACC'
Transitioning from 'Stage op sent' to 'Stage op sent' due to event 'GD_OP_EVENT_RCVD_ACC'
Transitioning from 'Stage op sent' to 'Brick op sent' due to event 'GD_OP_EVENT_STAGE_ACC'
Transitioning from 'Brick op sent' to 'Commit op sent' due to event 'GD_OP_EVENT_ALL_ACK'
Transitioning from 'Commit op sent' to 'Commit op sent' due to event 'GD_OP_EVENT_RCVD_ACC'
Transitioning from 'Commit op sent' to 'Unlock sent' due to event 'GD_OP_EVENT_COMMIT_ACC'
Transitioning from 'Unlock sent' to 'Unlock sent' due to event 'GD_OP_EVENT_RCVD_ACC'
Transitioning from 'Unlock sent' to 'Default' due to event 'GD_OP_EVENT_ALL_ACC'
发表评论
-
Glusterfs+Swift 对外提供对像存储
2013-11-27 16:14 3020虽然Glusterfs本身对外只提供POSIX兼容的文件存 ... -
poll实现详解
2013-06-04 16:11 0说到select和poll,也就是IO多路转接,在APUE ... -
qemu-kvm使用gluster协议
2013-03-29 10:12 3237为了提高以glusterfs做为存储的 虚拟机的IO性能, ... -
Glusterfs社区开发流程
2013-03-21 14:36 1610Glusterfs开源社区使用 Git + Ger ... -
Glusterfs扩展属性
2013-03-06 12:27 1638英文原文: http://hekafs ... -
图说DHT
2013-02-28 14:22 1261dht-diskusage.c 它包含dh ... -
call_stack 与 call_frame
2013-02-28 10:04 1162call_stack由一个或多个call_frame组成。 ... -
使用glusterfs API
2013-02-21 10:43 3454如果是通过rpm安装的glusterfs 在执行 ... -
Glusterfs吞吐量性能测试
2013-01-10 13:55 3573我在这里 介绍了如何用iozone来测试glusterfs性 ... -
Glusterfs配置文件
2012-12-20 14:58 0Glusterfs会在 /var/lib/glusterfs存 ... -
Gluster术语表
2012-12-19 16:31 1544接触新的东西的时候,缩写/术语啥的最头疼了。下面我总结了一 ... -
iozone测试glusterfs性能
2012-11-27 11:39 2652iozone 是linux下的磁 ... -
syntask@glusterfs
2012-11-26 16:04 0syntask struct sy ... -
inode详解
2012-11-23 16:38 2814inode是glusterfs中重要的数据结构之一, glus ... -
epoll与event_pool
2012-11-07 14:56 1744epoll is a scalable I/O even ... -
CircleBuffer@glusterfs
2012-11-05 17:22 838CircleBuffer 是逻辑上呈环形的缓冲区 。 ... -
如何查看brick上文件扩展属性
2012-10-25 16:25 1230在brick目录(不是volume挂载目录)执行: ... -
xlators 综述
2012-10-11 15:19 0xlator是glusterfs里面比较有意思的东西,下面由简 ... -
关于卷的配置文件(Volume Spec)
2012-10-10 17:07 2311Glusterfs使用了xlator模块化架构,用户可以通过编 ... -
afr代码解析
2012-09-26 14:30 255afr 是一个xlator, 全称是Automatic F ...
相关推荐
verilog有限状态机实验报告(附源代码).pdfverilog有限状态机实验报告(附源代码).pdfverilog有限状态机实验报告(附源代码).pdfverilog有限状态机实验报告(附源代码).pdfverilog有限状态机实验报告(附源代码)....
状态机思路在单片机程序设计中的应用.doc 状态机思路在单片机程序设计中的应用.rar 状态机的两种写法.pdf 状态机的编程.rar 状态机编程 (1).doc 状态机编程.doc 状态机编程.tar.gz 状态机编程二.doc 用状态...
1、资源内容:Java工程示例的SMC - 状态机的基本格式说明及使用示例; 2、应用场景:SMC可以通过一个配置文件,生成有限状态机所需的所有状态类以及状态机类,同时还包括了所有的状态间的转换逻辑。 3、参考链接:...
管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程.doc
说到单片机编程,不得不说到状态机,状态机做为软件编程的主要架构已经在各种语言中应用,当然包括C语言,在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。灵活的应用状态机不仅是程序更高效,而且可读性...
如何在verdi中直接查看状态机的状态名 同样适用于debussy
有限状态机有限状态机有限状态机有限状态机有限状态机有限状态机
前言 背景 内外事件 事件数据 状态转变 状态机模块 电机实例 外部事件 州数 状态函数 状态图 状态机对象 过渡图 新的状态机步骤 状态引擎 生成事件 不使用堆 离心机测试实例 多线程安全
用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计用状态机进行软件设计
在8051单片机内实现列表型的状态机。如果你需要更多的状态转移,你只需要将任务函数加入到列表里面即可。里面还附带了电路图
Python实现,根据状态表生成C代码的【层次状态机】,亦可退化成【平面状态机】。使用C模拟C++的一些特性。 2009.12.3: 里面有readme,在研究之前先读一下。...完整的状态机转换图在watch.sm文件中。
在LabVIEW中进行程序框架设计,似乎只见到过一种框架,那就是状态机,(并行的算不算?)还有“主/从设计模式”、“生产/消费模式”之类的,但好像也是建立在状态机的基础上的。如果真是这样的话,状态机就成了唯一...
有限状态机VHDL模板 FPGA开发实用模板
通过按键状态机方式实现多个按键扫描,具有短按,长按,释放检测功能
利用 VHDL 设计的许多实用逻辑系统中 有许多是可以利用有限状态机的设计方案来 描述和实现的 无论与基于 VHDL 的其它设计方案相比 还是与可完成相似功能的 CPU 相比 状态机都有其难以逾越的优越性 它主要表现在以下...
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所...在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、软件工程,编译器、网络协议、和计算与语言的研究。
省去开发过程中手写状态机的麻烦。并且功能强大,支持大部分状态机,适用性强。且状态机提供了获取当前事件,获取当前状态,以及获取之前的状态,非常的容易去实现自己的逻辑。资源包包括:代码生成器*1, 配置文件*...
现在大家比较统一的观点是,状态机的写法应该是用三段式写法,即第一部分说明初始状态,current_state,第二部分是状态机的状态转化的描述,第三部分是每一步状态的组合逻辑的描述。这样写调理更加清晰,也更加利于...
4x4矩阵键盘线反转法扫描程序 采用状态机思想,10ms中断扫描 无需延时程序,完全释放CPU