nfs-ganesha - Recovery

2019-04-01  本文已影响0人  帆子_8c3a

1. Server端Recovery过程

  1. CREATE_SESSION(即mount)会触发nfs4_add_clid,将clientid存在backend
  2. DESTROY_CLIENTID(即umount)会触发nfs4_rm_clid,将clientid从backend删掉
  3. Server重启后,进入grace period,将backend信息读入内存,形成linklist,item内容是clid_entry。它记录着Server重启前active client list
  4. Client试图恢复lock,然后发送RECLAIM_COMPLETE(参数rca_one_fs为FALSE),全局变量reclaim_completes自增。
  5. Server会定期检查reclaim_completesclid_count是否一致,如果一致表示可以提前结束grace period

2. 相关函数:

3. recovery backend相关函数

4. 全局变量

5. 数据结构

typedef struct clid_entry {
    struct glist_head cl_list; //用于插入到全局链表clid_list中
    struct glist_head cl_rfh_list; //delegation相关
    bool cl_reclaim_complete;  //已经send过reclaim_complete
    char cl_name[PATH_MAX];//clientid名字
} clid_entry_t;

6. 配置参数

7. NFS4.1协议需要注意的地方

7.1 RECLAIM_COMPLETE

7.2 open_claim_type4

enum open_claim_type4 {
    CLAIM_NULL = 0, //文件来自给定文件名
    CLAIM_PREVIOUS = 1, //to re-establish its locking state
    CLAIM_DELEGATE_CUR = 2,
    CLAIM_DELEGATE_PREV = 3,
    CLAIM_FH = 4, //文件来自current_obj
    CLAIM_DELEG_CUR_FH = 5,
    CLAIM_DELEG_PREV_FH = 6,
};

7.3 Reclaim of Open and Byte-Range Locks

上一篇 下一篇

猜你喜欢

热点阅读