Mutation相关类有哪些

这篇文章给大家分享的是有关Mutation相关类有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在椒江等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站设计 网站设计制作定制网站开发,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,外贸网站建设,椒江网站建设费用合理。

MutationImpl类说明:

struct MutationImpl {
     metareqid_t           reqid;
     __u32                     attempt;
     LogSegment          *ls;                    提交的log片段
     utime_t                   mds_stamp;     mds本地时间戳
     utime_t                   op_stamp;        客户端提供的时间戳
     mds_rank_t            slave_to_mds;     若slave_to_mds>0则说明此Mutation是slave发起的
     set<MDSCacheOjbect *> pins;          mds cache pins
     set<CInode*>         stickydirs;            
     map<MDSCacheObject*, mds_rank_t> remote_auth_pins;     远端的auth pins
     set<MDSCacheObject*> auth_pins;                                         本地的auth pins
     list<CInode*> projected_inodes;
     list<CDir*> projected_fnodes;
     list<ScatterLock*> updated_locks;
     list<CInode*> dirty_cow_inodes;
     list<pair<CDentry*, version_t>> dirty_cow_dentries;
};

MutationImpl类方法:

MutationImpl::get_client()

|__若reqid.name.is_client()不为空

     |__说明请求是从client发出的,返回client信息,即:client_t(reqid.name.num())

|__返回-1

MutationImpl::apply()

|__遍历并清空projected_inodes数组且每个数组成员执行pop_and_dirty_projected_inode(ls)函数

|__遍历并清空projected_fnodes数组且每个数组成员执行pop_and_dirty_projected_fnode(ls)函数

|__遍历dirty_cow_inodes数组

     |__数组中每个成员执行_mark_dirty(ls)

|__遍历dirty_cow_dentries数组

     |__数组中每个成员执行_mark_dirty(ls)

|__遍历updated_locks数组

     |__数组中每个成员执行mark_dirty()

MutationImpl::cleanup()

|__遍历auth_pins数组

     |__数组中每个成员执行auth_unpin()

|__清空auth_pins数组

|__遍历pins数组

     |__数组中每个成员执行put()

|__清空pins数组

MDRequestImpl主要记录来自client的请求、slave的请求以及内部的操作internal_op。

struct MDRequestImpl: public MutationImpl, public TrackedOp {
   Session *session;                    记录session信息
   elist<MDRequestImpl*>::item item_session_request;    请求项
   MClientRequest *client_request;            客户端请求
   vector<CDentry*> dn[2];                保存两套dentry
   CInode *in[2];                    保存两套inode
   CDentry *straydn;                    记录stray的dentry
   snapid_t snapid;                    记录snap ID信息
   indoeno_t alloc_ino, used_prealloc_ino;        分配的inode号
   interval_set<inodeno_t> prealloc_inos;        预分配的inode号
   int snap_caps;                    snap capability
   int getattr_caps;                    执行getattr的权限
   bool did_early_reply;                    
   bool o_trunc;                        请求是一个O_TRUNC事件
   bool has_completed;                    请求已经完成
   bufferlist reply_extra_bl;                在回复中包含的额外的内容
   map<vinodeno_t, ceph_seq_t> cap_releases;        
   MMDSSlaveRequest *slave_request;            slave的请求
   int internal_op;                    内部操作
   Context *internal_op_finish;                内部操作的回调函数
   void *internal_op_private;                内部操作的私有对象
   int retry;                        记录rety的次数
   bool waited_for_osdmap;                是否需要等待更新的osmap
   struct More {
     int slave_error;
     set<mds_rank_t> slaves;                发起slave请求的集合
     set<mds_rank_t> waiting_on_slave;            等待slavereq reply的peer
     set<mds_rank_t> witnessed;    
     CInode *rename_inode;                保存freeze的inode信息
     bool is_freeze_authpin;                保存是否执行了freeze authpin操作
     bool is_remote_frozen_authpin;            保存是否执行了remote frozen authpin操作
     bool is_ambiguous_auth;                保存是否执行了ambiguous auth操作
   }_more;
 };

MDRequestImpl类方法:
MDRequestImpl::~MDRequestImpl()
|__若client_request不为空
  |__执行client_request->put()方法,尝试释放client_request
|__若slave_request不为空
  |__执行slave_request->put()方法,尝试释放slave_request
|__删除_more类对象

MDRequestImpl::freeze_auth_pin(inode)
|__设置_more中的rename_inode为inode
|__设置_more中的is_freeze_authpin为true
|__调用auth_pin(inode)
|__执行inode的freeze_auth_pin()

MDRequestImpl::unfreeze_auth_pin(clear_inode)
|__从_more中的rename_inode得到freeze的inode
|__若inode当前是is_frozen_auth_pin()
  |__执行inode的unfreeze_auth_pin()来解除freeze
|__若inode当前不是is_frozen_auth_pin()
  |__执行inode的unfreeze_inode()
|__设置_more中的is_freeze_autpin为false
|__若clear_inode==true
  |__设置_more中的rename_inode为null

MDRequestImpl::set_remote_frozen_auth_pin(inode)
|__设置_more中的rename_inode为inode
|__设置_more中的is_remote_frozen_authpin为true

MDRequestImpl::set_ambiguous_auth(inode)
|__执行inode的set_ambiguous_auth()函数
|__设置_more中的rename_inode为inode
|__设置_more中的is_ambiguous_auth为true

MDRequestImpl::clear_ambiguous_auth()
|__从_more中的rename_inode得到ambiguous的inode
|__执行inode的clear_ambiguous_auth()函数
|__设置_more中的is_ambiguous_auth为false

MDRequestImpl::can_auth_pin(object)
|__若object能auth pin或者object在auth_pin或remote auth pin中或者_more中的is_freeze_authpin为true或者_more中的rename_inode==object
  |__返回true
|__返回false

MDRequestImpl::drop_local_auth_pins()
|__若_more不为空
  |__调用unfreeze_auth_pin(true)来清除freeze的auth pin
|__调用MutationImpl::drop_local_auth_pins()    来清除本地的auth pins 

MDRequestImpl::set_filepath(fp)
|__设置_more中的filepath2为fp

MDRequestImpl::set_filepath3(fp)
|__设置_more中的filepath3为fp

MDRequestImpl::get_filepath()
|__若client_request不为空
  |__返回client_request->get_filepath()
|__返回_more中的filepath2

MDRequestImpl::get_filepath3()
|__若client_request不为空
  |__返回client_request->get_filepath3()
|__返回_more中的filepath3
 

感谢各位的阅读!关于“Mutation相关类有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

文章名称:Mutation相关类有哪些
本文网址:https://www.cdcxhl.com/article38/iigdpp.html

成都网站建设公司_创新互联,为您提供响应式网站外贸网站建设电子商务全网营销推广网页设计公司自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设