大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍MDSTable相关内容有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联公司拥有10年成都网站建设工作经验,为各大企业提供成都网站设计、网站制作、外贸营销网站建设服务,对于网页设计、PC网站建设(电脑版网站建设)、重庆App定制开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、空间域名等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
对MDSTable的操作主要是对version和state保存到集群以及从集群中读取的操作。具体操作处理函数说明如下:
MDSTable::save()
|__对version和state进行encode操作
|__设置committing_version = version 设置committing_version
|__设置waitfor_save[version].push_back(onfinish)
|__get_object_name() 得到对象名称mds_${table_name}
|__得到object_locator_t类实例,即:将数据存放到metadata pool中
|__mds->object_write_full() 将version和state的encode数据写入到metadata pool中的mds_${table_name}对象中
MDSTable::save_2()
|__committed_version = v 设置committed_version
|__遍历waitfor_save数组
|__对于waitfor_save[i]->first <=v的,从waitfor_save数组中删除
MDSTable::reset()
|__reset_state()
|__state = STATE_ACTIVE 设置state当前值
MDSTable::load()
|__state = STATE_OPENING 设置state当前值
|__get_object_name() 得到对象名称mds_${table_name}
|__得到object_locator_t类实例,即:将数据存放到metadata pool中
|__mds->objecter->read_full() 从集群中获取MDSTable信息
MDSTable::load_2()
|__state = STATE_ACTIVE
|__若r == -EBLACKLISTED,则调用mds->respawn()
|__若r < 0,则调用mds->damaged()
|__从集群的得到version值且设置projected_version=committed_version=version
|__从集群中得到state信息
MDSTableServer类继承MDSTable类
class MDSTableServer : public MDSTable {
int table;
map
};
MDSTableServer::handle_request() 总路由调度函数,负责将请求分派给不同的handle_*()来处理
|__TABLESERVER_OP_QUERY
|__handle_query()
|__TABLESERVER_OP_PREPARE
|__handle_prepare()
|__TABLESERVER_OP_COMMIT
|__handle_commit()
|__TABLESERVER_OP_ROLLBACK
|__handle_rollback()
MDSTableServer::handle_prepare()
|___prepare() 调用子类的_prepare()函数从request消息中得到具体的信息
|___note_prepare() 填充pending_for_mds数组
|__创建ETableServer类对象
|__mds->mdlog->submit_entry() 写log
|__mds->mdlog->flush()
MDSTableServer::_prepare_logged() 该函数是handle_prepare()执行完写log后的回调函数
|__创建MMDSTableRequest类消息(TABLESERVER_OP_AGREE)
|__mds->send_message_mds() 将类消息发送回给调用handle_prepare()的对端
MDSTableServer::handle_commit()
|__检查pending_for_mds数组中是否包含对应的项
|___commit() 执行子类的commit操作
|___note_commit() 删除pending_for_mds数组中对应的项
|__mds->mdlog->start_submit_entry() 写log
MDSTableServer::_commit_logged() 该函数是handle_commit()执行完写log后的回调函数
|__创建MMDSTableRequest类消息(TABLESERVER_OP_ACK)
|__mds->send_message_mds() 将类消息发送回给调用handle_prepare()的对端
MDSTableServer::handle_rollback()
|___rollback() 执行子类的rollback操作
|___note_rollback() 删除pending_for_mds数组中对应的项
|___mds->mdlog->start_submit_entry() 写log
MDSTableServer::do_server_update()
|__创建ETableServer类实例
|__mds->mdlog->start_entry()
|__mds->mdlog->submit_entry() 写log
MDSTableServer::finish_recovery()
|__遍历参数中的mds_rank_t集合
|__handle_mds_recovery()
MDSTableServer::handle_mds_recovery()
|__遍历pending_for_mds数组
|__创建MMDSTableRequest类消息(TABLESERVER_OP_AGREE)
|__mds->send_message_mds() 发送mds消息
|__创建MMDSTableRequest类消息(TABLESERVER_OP_SERVER_READY)
|__mds->send_message_mds() 发送mds消息
SnapServer类继承于MDSTableServer,用来记录需要进行Snap操作的相关信息
class SnapServer: public MDSTableServer {
MonClient *mon_client; 与monitor交互的client端
snapid_t last_snap;
map
map
map
map
set
version_t last_checked_osdmap;
};
SnapServer::reset_state() 清空snaps和need_to_purge这两个数组,之后获取last_snap值
|__设置last_snap=1
|__清除snaps和need_to_purge数组
|__遍历mds使用的osdmap
|__遍历mdsmap使用的所有data pools
|__从osdmap中得到data pool对应的pg_pool_t结构
|__对于pg_pool_t结构中removed_snaps数组不为空,则取removed_snaps.range_end()最大值
|__设置last_snap = removed_snaps.range_end()的最大值
SnapServer::_prepare()
|__TABLE_OP_CREATE
|__更新version值(version++)
|__从参数bufferlist中得到SnapInfo信息(ino/name/stamp)
|__设置SnapInfo的snapid = ++last_snap/long_name=“create"
|__更新pending_update[version] = info
|__TABLE_OP_DESTROY
|__从参数bufferlist中得到inodeno_t和snapid_t的值
|__更新version值和last_snap值(version++/++last_snap)
|__更新pending_destroy[version]数组
|__TABLE_OP_UPDATE
|__从参数bufferlist中得到SnapInfo信息(ino/snapid/name/stamp)
|__更新version值和last_snap值(version++/++last_snap)
|__更新pending_update[version] = info
SnapServer::_is_prepared()
|__判断pending_update或pending_destroy数组中是否包含参数指定的tid
SnapServer::_commit()
|__待commit的tid在pending_update数组中
|__从pending_update数组中得到指定tid的SnapInfo值
|__更新snaps[info.snapid] = info
|__删除pending_update[tid]
|__待commit的tid在pending_destroy数组中
|__从pending_destroy数组中得到指定tid对应的snapid和last_snapid
|__从snaps数组中删除snapid对应的值
|__遍历mdsmap所有的data pools
|__更新need_to_purge数组(need_to_purge[*p].insert(snapid)/need_to_purge[*p].insert(last_snapid)
|__删除pending_destroy[tid]
|__更新version (version++)
SnapServer::_rollback()
|__在pending_update/pending_destroy数组中删除掉指定tid的值
SnapServer::_server_update()
|__从参数bufferlist中得到map
|__遍历purge
|__删除need_to_purge中指定的内容
|__更新version
SnapServer::check_osd_map()
|__遍历mds对应的所有osdmap
|__遍历need_to_purge数组
|__从osdmap中得到pg_pool_t数据结构的值
|__若pg_pool_t为空,则设置all_purged[id] = need_to_purge[id].all
|__遍历need_to_purge数组的第二个参数
|__若pg_pool_t->is_removed_snap(i),则设置all_purged[id].push_back(i),否则设置all_purge[id].push_back(i)
|__对于all_purged数组不为空
|__将all_purged数组序列化
|__MDSTableServer::do_server_update()
|__SnapServer::_server_update()
|__创建ETableServer类对象
|__mds->mdlog->start_entry()
|__mds->mdlog->submit_entry() 写log
|__对于all_purge数组不为空
|__创建MRemoveSnaps类消息
|__mon_client->send_mon_message() 将消息发送给monitor来删除对应的snaps
MDSTable/MDSTableServer/SnapServer之间的关系如下图所示:
以上是“MDSTable相关内容有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!