auth pin:
一是保证数据pin在cache中,一是确保这些数据的auth不会被改变--其实就是不会被迁移走。
ceph中,dentry,inode,dir都有authpin计数器。
注意一点:authpin必定是auth的元数据才具有!这个很明显。
freezing:
authpin的另外一个特别用途,就是可以防止子树进入frozen状态!
如果要迁移元数据,必须要先frozen它。
子树的根,初始化标记为freezing,千万注意,freezing的子树不能增加新的authpin!!!只有当子树上所有的authpin都清除掉后,才可以标记为frozen状态。
疑问:1、是先freezing还是先authpin?
2、authpin后可以update吗?
3、freezing后可以update吗?
ceph中有句话是这么说的:frozen后所有的update被禁止,此时可以保证元数据信息被打包发送给新的authmds。
重要一点:一个frozen的子树,除了子树的root dir外,其他所有的dir都会authpin住它的inode!!!
why?--这样做的目的是防止父目录被冲突frozen!导致对bound的一系列影响!!
疑问:对inode加authpin了,能保证inode所在的dir不被frozen吗?
疑问:缓存过期如何处理?
冻结机制如何做?
------------------------------分割线-------------------------------------
Normal Migration:
exporter: importer:
1-做check,看是否满足迁出条件
mds没出故障、子树不是freezing或frozen
必须已经拿到了路径锁(防止rename冲突)
2-把子树根authpin,随后设置子树为freezing
OK!准备就绪!可以迁移了!
---------------discover msg-----------------> discover的目的,是保证要迁移的子树的rootdir,dir->pstInode
都是在缓存中存在的。不存在的话,要让其存在!
对其pin住(?)以防止被trime!
importer就绪了,我可以清除我的authpin了
以让subtree进入frozen态!
此时发送pre消息------------------------------------------> 勾画出子树的整体图(包括所有dirs,inodes,dentries直到bound)
输入区域已经确定。且你要保证这个区域内的对象都有正确auth的。如何
保证?--此时冻结整棵子树,防止新的副本和缓存过期!--what means?
**待续**