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进行操做的命令