1、从osd->init()开始,启动osd模块
2、client_messenger->add_dispatcher_head(this); cluster_messenger->add_dispatcher_head(this); hbclient_messenger->add_dispatcher_head(&heartbeat_dispatcher); hb_front_server_messenger->add_dispatcher_head(&heartbeat_dispatcher); hb_back_server_messenger->add_dispatcher_head(&heartbeat_dispatcher); 注册不同的dispatcher 3、在add_dispatcher_head函数中把dispatcher加入到list<Dispatcher*>列表中 4、接着调用simplemessenger类中的ready()正式开始启动和通信相关的部分。 5、在ready()函数中调用dispatch_queue.start()启动分发线程,等待被唤醒,在dispatch_queue.start()中调用msgr->ms_deliver_dispatch(m);分发任务给list<Dispatcher*>中的dispatcher,最后调用(*p)->ms_dispatch(m),调用不同dispatcher的ms_dispatch处理消息。 6、在ready()函数中调用accepter.start();启动accepter线程进入entry()函数,在entry()函数中调用msgr->add_accept_pipe(sd);注册一个pipe,启动读线程,从该sd中读取数据,start_reader();---- reader_thread.create(),create函数会调用Reader线程的entry() 启动pipe类中的reader函数从sd中读数据,调用in_q->enqueue(m, m->get_priority(), conn_id); 把接收到的messenger加入到mqueue中最后调用cond.Signal()唤醒dispatch_queue.start() 启动的dispatchThread,进入entry进行处理
参考:http://bean-li.github.io/ceph-network-message-3/