DSRP backend/report.hh/cc


backend/report.hh/cc:

依次处理就绪的client_fd,用recvn先接收4个字节,用ntohl转换为int型,表示后续数据的长度。

接着recvn该长度的数据:

若返回值为0,说明后续没有数据,表示该client断开连接,从clientRecord中把connectd状态设为false

若返回值不为0,则先判断buf[0],对应不同的操作,创建相应的Request对象

最后调用Request.setid(buf) Request.analyze Request.process Request.sendr



backend/request/:

首先包含一个基类(抽象类)Request(base_request.hh)

recovery_request.hh/cc:

analyze(): 对于接收到的数据,第0个字节表示操作(修复、扩容等)

第1个字节表示该操作的子类别(修复的话,只能为1)

第2-5个字节,用ntohl转换为int,表示坏盘数量,设为i

然后从0~i-1 依次读取8个字节:

前4个字节表示坏盘id,存入fail_disk_id[i]

后4个字节表示重建盘id,存储rebuild_disk_id[i]

然后最后还剩4个字节,表示相应的修复算法,存入rebuild_method

process():对于每个坏盘,从NCFS获取_global_new_dev_name  和  _global_fail_dev_name  (都通过disk id获取)

然后设置坏盘属性

最后创建process_recovery_thread线程,并封装this到结构体中作为参数


process_recovery_thread():创建RecoeryModule对象,依次修复坏盘。修复时要选择修复算法(只能修复坏盘数为1或者2的情况)

    最后向client发送操作结果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值