OSD::main()app
|__ObjectStore::create()socket
|__調用FileStore構造函數建立FileStore類對象函數
|__MonClient::build_initial_monmap() 從配置文件中讀取monitor map信息ui
|__OSD::mkfs()線程
|__FileStore::mkfs() server
|__在/var/lib/ceph/osd/ceph-${id}/目錄下生成fsid文件對象
|__在/var/lib/ceph/osd/ceph-${id}/目錄下建立version_stamp文件get
|__在/var/lib/ceph/osd/ceph-${id}/目錄下建立superblock文件同步
|__在/var/lib/ceph/osd/ceph-${id}/目錄下建立current文件夾it
|__在/var/lib/ceph/osd/ceph-${id}/current/目錄下建立commit_op_seq文件且初始化該文件的內容爲1
|__在/var/lib/ceph/osd/ceph-${id}/current/omap/目錄下建立osd_uuid文件(current/omap目錄是OSD omap的工做目錄)
|__FileStore::mkjournal()
|__FileStore::new_journal()
|__FileJournal()構造函數來建立FileJournal實例
|__在/var/lib/ceph/osd/ceph-${id}/目錄下建立type文件且向該文件中寫入filestore
|__FileStore::mount()
|__FileStore::read_fsid()
|__FileStore::version_stamp_is_valid() 檢查version_stmap文件是否有效並讀取該文件中的內容
|__FileStore::read_superblock() 讀取superblock文件中的內容
|__在/var/lib/ceph/osd/ceph-${id}/current/目錄下建立nosnap文件
|__把/var/lib/ceph/osd/ceph-${id}/current/omap目錄做爲omap_store的基準目錄,調用KeyValueDB::create()建立KeyValueDB實例
|__FileStore::new_journal() 建立journal
|__JournalingObjectStore::journal_start() 啓動journal
|__啓動ondisk_finishers和apply_finishers線程池
|__FileStore::read() 從」meta」中讀取superblock對象信息且保存到OSDSuperblock類對象中
|__比較superblock中的cluster_fsid是否有效
|__OSD::write_meta() 將magic/whoami/ceph_fsid/ready信息寫入到/var/lib/ceph/osd/ceph-${id}/目錄下對應的文件中
|__對於須要建立key來講,使用EntityAuth.CryptoKey來建立一個key且將新建的key添加到keyring中,同時也將該keyring寫入到/var/lib/ceph/osd/ceph-${id}/目錄下keyring文件中
|__對於須要建立journal來講,調用FileStore::mkjournal()函數來建立journal
|__OSD::peek_meta() 從/var/lib/ceph/osd/ceph-${id}/目錄下對應的文件中讀取magic/cluster_fsid/osd_fsid/whoami信息
|__pick_addresses() 從配置文件中讀取public_addr和cluster_addr值
|__建立client/cluster/hbclient/hb_back_server/hb_front_server的Messenger類實例。通常狀況下client和hb_front_server用public_addr,cluster/hbclient/hb_back_server用cluster_addr
|__MonClient::build_initial_monmap() 從配置文件中建立MonMap
|__調用OSD類構造函數建立OSD類對象
|__OSD::pre_init()
|__啓動client/cluster/hbclient/hb_back_server/hb_front_server的Messenger類實例
|__OSD::init()
|__tick_timer.init() 初始化心跳定時器
|__OSDService.backill_request_timer.init() 初始化backfill請求定時器
|__ObjectStore::mount() 掛載文件系統
|__OSD::read_superblock() 從集羣中讀取superblock信息且保存到OSDSuperblock類對象中
|__確保snapmapper對象存在於」meta」中
|__建立ClassHandler類實例
|__get_map() 根據superblock中記錄的當前epoch值獲取osdmap,若osdmap沒有在map_cache中則從」meta」的osdmap.epoch中讀取osdmap且同步到map_cache中
|__OSD::load_pgs() 讀取OSD上全部的pg信息
|__FileStore::list_collections() 遍歷/var/lib/ceph/osd/ceph-${id}/current/目錄下全部目錄且只要TYPE_PG
|__coll_t.parse() 解析/var/lib/ceph/osd/ceph-${id}/current/目錄下全部目錄,meta對應TYPE_META,_head對應TYPE_PG,_TEMP對應TYPE_TEMP
|__遍歷全部TYPE_PG
|__調用PG::peek_map_epoch()函數
|__OSD::_open_lock_pg()
|__OSD::_make_pg() 建立ReplicatedPG類實例
|__PG::read_state() 讀取PG的狀態
|__PG::read_info() 從omap中讀取_infover/_info/_biginfo屬性值
|__PGLog::read_log() 讀取PGLog信息,根據PGLog信息獲得missing的信息
|__OSDMap::pg_to_up_acting_osds() 計算出該PG對應的OSDs
|__PG::init_primary_up_acting() 這個PG所對應的OSDs
|__OSDMap::calc_pg_role() 計算出PG的roles
|__PG::set_role()
|__PG::reg_next_scrub() 註冊下一次進行scrub的操做
|__OSD::build_past_intervals_parallel()
|__OSD::create_logger() 建立OSD logger
|__MonClient::init() 初始化MonClient類實例
|__啓動osd_tp/osd_op_tp/recovery_tp/disk_tp/command_tp線程池
|__OSDService::init() 初始化OSDService
|__MonClient::authenticate() 作Monitor認證
|__OSD::update_crush_location() OSD啓動後更新crushmap操做,能夠在配置文件中設置osd_crush_update_on_start = false來禁止OSD啓動後更新crushmap
|__OSDService::final_init()
|__OSD::consume_map()
|__OSD::start_boot()
|__OSD::finial_init()
|__註冊一系列經過socket進行操做的命令