2021-05-10

server_start_targets
    lustre_start_simple
        do_lcfg //for LCFG_ATTACH
            class_attach
        do_lcfg //for LCFG_SETUP
            class_setup


class_attach
    class_newdev


class_setup
    obd_setup
        lov_setup
            obd_llog_init
                lov_llog_init
                    llog_setup //LLOG_MDS_OST_ORIG_CTXT, lov_mds_ost_orig_logops
                        lov_llog_origin_connect
                            llog_connect
                                llog_origin_connect //send LLOG_ORIGIN_CONNECT RPC
                                    => llog_handle_connect
                    llog_setup //LLOG_SIZE_REPL_CTXT, lov_size_repl_logops
                    //循环调用
                        obd_llog_init
                            osc_llog_init
                                llog_setup //LLOG_MDS_OST_ORIG_CTXT, osc_mds_ost_orig_logops
                                    llog_obd_origin_setup
                                        llog_create
                                        llog_process  
                                llog_setup //LLOG_SIZE_REPL_CTXT, osc_size_repl_logops




mds_finish_transno
    lustre_msg_get_transno
    fsfilt_add_journal_cb
    fsfilt_write_record
    mds_lov_write_objids
    fsfilt_commit

mdc_unlink
    mdc_reint

## XID
oti->oti_xid = req->rq_xid;
    
ptlrpc_prep_req_pool
    request->rq_xid = ptlrpc_next_xid();


## transaction
oti_init

target_send_reply

## replay
struct obd_import
    struct list_head          imp_replay_list;
    struct list_head          imp_sending_list;
    struct list_head          imp_delayed_list;    


ptlrpc_queue_wait
    after_reply
        lustre_msg_set_transno
        ptlrpc_retain_replayable_request
        lustre_msg_get_last_committed

ptlrpc_import_recovery_state_machine
    ptlrpc_replay_next
        ptlrpc_replay_req


## import req 状态机
enum lustre_imp_state {
        LUSTRE_IMP_CLOSED     = 1,
        LUSTRE_IMP_NEW        = 2,
        LUSTRE_IMP_DISCON     = 3,
        LUSTRE_IMP_CONNECTING = 4,
        LUSTRE_IMP_REPLAY     = 5,
        LUSTRE_IMP_REPLAY_LOCKS = 6,
        LUSTRE_IMP_REPLAY_WAIT  = 7,
        LUSTRE_IMP_RECOVER    = 8,
        LUSTRE_IMP_FULL       = 9,
        LUSTRE_IMP_EVICTED    = 10,
};




lop_add : 产生一个cookie
lov_llog_origin_add
mds_llog_origin_add
llog_obd_origin_add



llog_origin_connect
lov_llog_origin_connect



struct obd_trans_info {
        __u64                    oti_transno;
        __u64                    oti_xid;
        __u64                   *oti_objid;
        /* Only used on the server side for tracking acks. */
        struct oti_req_ack_lock {
                struct lustre_handle lock;
                __u32                mode;
        }                        oti_ack_locks[4];
        void                    *oti_handle;
        struct llog_cookie       oti_onecookie;
        struct llog_cookie      *oti_logcookies;
        int                      oti_numcookies;

        /* initial thread handling transaction */
        int                      oti_thread_id;
        __u32                    oti_conn_cnt;
};    


mds_obd_create





llog_lvfs_destroy


ll_unlink_generic
    mdc_unlink
    ll_objects_destroy
        obd_destroy
            lov_destroy
                lov_prep_destroy_set
                obd_destroy
                    osc_destroy
                        => ost_destroy
                            obd_destroy
                                filter_destroy

mds_reint_unlink
    fsfilt_start_log
    vfs_unlink
    mds_log_op_unlink
        obd_unpackmd //lsm =>lmm
        llog_get_context //LLOG_MDS_OST_ORIG_CTXT
        llog_add
            mds_llog_origin_add
                llog_get_context
                llog_add
                    lov_llog_origin_add
                        llog_get_context
                        llog_add
                            llog_obd_origin_add
                                llog_cat_add_rec
                                    llog_cat_current_log
                                    llog_write_rec
    fsfilt_setattr
    mds_finish_transno
    obd_set_info_async
        lov_set_info_async
            obd_set_info_async
                osc_set_info_async
                    => ost_set_info
                        obd_set_info_async
                            filter_set_info_async
                                llog_get_context //LLOG_MDS_OST_REPL_CTXT
                                llog_receptor_accept


llog_setup
    llog_obd_origin_setup
        llog_create
            llog_client_create
    

llog_setup //LLOG_MDS_OST_ORIG_CTXT, lov_mds_ost_orig_logops
llog_setup //LLOG_MDS_OST_REPL_CTXT, filter_mds_ost_repl_logops

llog_obd_origin_setup



llog_connect

llog_repl_connect
    llog_recovery_generic => filter_recov_log_mds_ost_cb
        => log_process_thread
            llog_cat_process => filter_recov_log_mds_ost_cb
                llog_process => llog_cat_process_cb
                    llog_next_block
                    llog_cat_process_cb
                        llog_cat_id2handle
                        llog_process
                    llog_cancel_rec
                        llog_write_rec
            llog_sync

CATLIST

llog_catalog_list
llog_cat_initialize
llog_catinfo_deletions


llog_cat_initialize
    llog_get_cat_list
        fsfilt_read_record
    obd_llog_init
        obd_llog_init
        o_llog_init
    llog_put_cat_list
        fsfilt_write_record


mds_llog_init
    obd_llog_init

mdc_setup
    obd_llog_init

lov_llog_init
    obd_llog_init
        osc_llog_init
            llog_setup


lctl lov_getconfig
jt_obd_lov_getconfig
    OBD_IOC_LOV_GET_CONFIG


lctl llog_catlist
jt_llog_catlist //ioc_dev_list
    OBD_IOC_CATLOGLIST
        llog_catalog_list            
            llog_get_cat_list

jt_llog_info
    OBD_IOC_LLOG_INFO


obd_destroy
    lov_destroy
        obd_destroy
            osc_destroy


llog_write_rec
    llog_lvfs_write_rec
        llog_lvfs_write_blob
            fsfilt_write_record

llog_obd_origin_add
    llog_cat_add_rec
        llog_cat_current_log
            llog_cat_new_log
                llog_create
                    lop_create
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352