- 浏览: 55408 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
mayatama:
jiakon 写道你好,请问yum install glust ...
Glusterfs+Swift 对外提供对像存储 -
jiakon:
你好,请问yum install glusterfs glus ...
Glusterfs+Swift 对外提供对像存储
当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 3077虽然Glusterfs本身对外只提供POSIX兼容的文件存 ... -
poll实现详解
2013-06-04 16:11 0说到select和poll,也就是IO多路转接,在APUE ... -
qemu-kvm使用gluster协议
2013-03-29 10:12 3325为了提高以glusterfs做为存储的 虚拟机的IO性能, ... -
Glusterfs社区开发流程
2013-03-21 14:36 1681Glusterfs开源社区使用 Git + Ger ... -
Glusterfs扩展属性
2013-03-06 12:27 1728英文原文: http://hekafs ... -
图说DHT
2013-02-28 14:22 1327dht-diskusage.c 它包含dh ... -
call_stack 与 call_frame
2013-02-28 10:04 1218call_stack由一个或多个call_frame组成。 ... -
使用glusterfs API
2013-02-21 10:43 3557如果是通过rpm安装的glusterfs 在执行 ... -
Glusterfs吞吐量性能测试
2013-01-10 13:55 3661我在这里 介绍了如何用iozone来测试glusterfs性 ... -
Glusterfs配置文件
2012-12-20 14:58 0Glusterfs会在 /var/lib/glusterfs存 ... -
Gluster术语表
2012-12-19 16:31 1622接触新的东西的时候,缩写/术语啥的最头疼了。下面我总结了一 ... -
iozone测试glusterfs性能
2012-11-27 11:39 2727iozone 是linux下的磁 ... -
syntask@glusterfs
2012-11-26 16:04 0syntask struct sy ... -
inode详解
2012-11-23 16:38 2885inode是glusterfs中重要的数据结构之一, glus ... -
epoll与event_pool
2012-11-07 14:56 1799epoll is a scalable I/O even ... -
CircleBuffer@glusterfs
2012-11-05 17:22 909CircleBuffer 是逻辑上呈环形的缓冲区 。 ... -
如何查看brick上文件扩展属性
2012-10-25 16:25 1301在brick目录(不是volume挂载目录)执行: ... -
xlators 综述
2012-10-11 15:19 0xlator是glusterfs里面比较有意思的东西,下面由简 ... -
关于卷的配置文件(Volume Spec)
2012-10-10 17:07 2390Glusterfs使用了xlator模块化架构,用户可以通过编 ... -
afr代码解析
2012-09-26 14:30 255afr 是一个xlator, 全称是Automatic F ...
相关推荐
在上面的示例中,我们首先定义了状态和事件,然后创建了一个状态机,配置了状态机的行为。 Stateless 的特点 Stateless 有很多特点,例如: * 支持各种类型作为状态和触发事件 * 支持状态继承 * 支持状态进入/...
在订单状态管理中,状态机能够清晰地定义订单从创建到完成的每一步状态变迁,并且当订单数量增多时,状态机依然能够保持高效率和稳定性,避免因为复杂业务逻辑而导致的状态管理混乱。 现在,让我们来认识COLA State...
在数字逻辑设计中,状态机是一种常用的设计结构,它通过内部状态的转换来实现特定的功能,如控制序列、数据处理等。在Verilog这种硬件描述语言中,我们可以方便地定义和实现状态机。 一、状态机的基本概念 状态机...
省去开发过程中手写状态机的麻烦。并且功能强大,支持大部分状态机,适用性强。且状态机提供了获取当前事件,获取当前状态,以及获取之前的状态,非常的容易去实现自己的逻辑。资源包包括:代码生成器*1, 配置文件*...
状态机在单片机编程中扮演着至关重要的角色,它是一种设计模式,广泛应用于各种编程语言,包括C语言。状态机的核心概念在于通过定义不同状态、条件、动作和次态来组织程序逻辑,使得程序执行更加高效、可读性强且...
这里我们定义了一个枚举`State`用来表示状态机中的不同状态,同时定义了一个结构体`FiniteStateMachine`用来存储状态机的相关信息。 #### 步骤2:实现状态转换函数 接下来,我们需要为每种状态编写一个状态转换...
可通信状态机(CSM)是一个基于JKI状态机(JKISM)的LabVIEW应用框架。它遵循 JKISM 的模式,扩展了关键词以描述模块之间的消息通信,包括同步消息、异步消息、状态订阅/取消订阅等概念! 可通信状态机(CSM)是一个...
### VHDL中的有限状态机设计概述 #### 一、有限状态机(FSM)的重要性与优点 有限状态机(Finite State Machine, FSM)是一种被广泛应用于数字逻辑设计中的模型,尤其在VHDL语言中有着非常重要的地位。在设计复杂的...
在这个项目中,“简单状态机控制步进电机”是利用状态机的设计思想来实现对步进电机的精确控制。状态机是一种用于描述系统行为的模型,它按照预定义的一系列状态进行转换,每个状态对应于特定的操作或行为。 首先,...
在编程领域,状态机是一种非常重要的设计模式,它被广泛应用于各种复杂的逻辑控制流程中。在C#中,我们可以利用面向对象的特性来实现状态机,以管理对象在不同状态之间的转换。本篇将深入探讨如何在C#中实现状态机,...
"当JAVA遇到状态机.wps"可能包含了更深入的Java状态机实现示例,或者对如何在实际项目中应用状态机的讨论。而"状态机图1.png"很可能是这个状态机的图形化表示,它可以帮助我们直观地理解不同状态之间的关系和转换...
本资源“C语言嵌入式状态机架构(含C源码)”提供了一个关于如何在C语言环境中构建和应用状态机的详细指南。 首先,让我们深入理解状态机的概念。状态机是一种抽象的计算模型,它由一系列状态以及在这些状态之间...
通过深入研究这些示例,你不仅能掌握C语言状态机的基本原理,还能了解到如何在实际项目中灵活应用,从而提升你的C语言编程能力。对于后端开发和嵌入式系统的开发人员来说,理解和掌握状态机是十分重要的技能。
5. 用户界面交互:UI设计中,按钮、菜单等组件的状态变化可以通过状态机管理。 五、状态机的实现方式 1. 代码实现:直接在编程语言中编写状态机的逻辑,如switch语句或if-else结构。 2. 表驱动:用数组或哈希表存储...
安全状态机是事后保护方法中的一种,它通过增加特定的逻辑电路来检测和防止非法状态的出现,从而增强状态机的可靠性。 综上所述,在FPGA设计中,确保状态机的安全性对于系统的稳定运行至关重要。通过合理编码和设计...
在类层次结构状态机中,每个状态都作为一个单独的类,继承自一个基础状态类。基础类提供通用行为,而子类覆盖这些行为以实现特定状态的行为。 - **优点**:提供了良好的封装和多态性,每个状态可以拥有自己的数据...
matlab中状态机 stateflow的详细使用方法。matlab中状态机 stateflow的详细使用方法。matlab中状态机 stateflow的详细使用方法
在计算机科学中,有限状态机(Finite State Machine, FSM)是一种模型,用于描述一个系统的行为,它根据当前状态和输入来决定如何转移到下一个状态。分层有限状态机(Hierarchical Finite State Machine, HFSM)是...
前言 背景 内外事件 事件数据 状态转变 状态机模块 电机实例 外部事件 州数 状态函数 状态图 状态机对象 过渡图 新的状态机步骤 状态引擎 生成事件 不使用堆 离心机测试实例 多线程安全
在这个“一个简单好用的labview状态机”中,我们将深入探讨如何利用LabVIEW构建高效、灵活的状态机模型,以及它在各种项目中的应用。 状态机是一种设计模式,用于描述系统或对象在不同时间的行为变化。在LabVIEW中...