欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

ceph中Dispatcher模塊的示例分析

這篇文章主要介紹了ceph中Dispatcher模塊的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

我們擁有十載網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、手機網(wǎng)站開發(fā)、成都h5網(wǎng)站建設(shè)、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。

Dipatcher類是消息分發(fā)的接口,OSD、MON、等類都繼承該類,并實現(xiàn)了Dipatcher的消息分發(fā)接口

     1079 class OSD : public Dispatcher,
-    1080         public md_config_obs_t {
|    1081   /** OSD **/
      128 class Monitor : public Dispatcher,
-     129                 public md_config_obs_t {
|     130 public:
|     131   // me
|     132   string name;

在OSD::init()函數(shù)中把不同類型的Dipatcher加入到SimpleMessenger實例中

|    2146   // i'm ready!
|    2147   client_messenger->add_dispatcher_head(this);
|    2148   cluster_messenger->add_dispatcher_head(this);
|    2149 
|    2150   hbclient_messenger->add_dispatcher_head(&heartbeat_dispatcher);
|    2151   hb_front_server_messenger->add_dispatcher_head(&heartbeat_dispatcher);
|    2152   hb_back_server_messenger->add_dispatcher_head(&heartbeat_dispatcher);
|    2153 
|    2154   objecter_messenger->add_dispatcher_head(service.objecter);

在Messenger::add_dispatcher_head(Dispatcher *d)中加入Messenger::list<Dispatcher*> dispatchers中,并調(diào)用ready(),SimpleMessenger::ready()重寫了基類的ready,

|-   358   void add_dispatcher_head(Dispatcher *d) {
||   359     bool first = dispatchers.empty();
||   360     dispatchers.push_front(d);
||   361     if (d->ms_can_fast_dispatch_any())
||   362       fast_dispatchers.push_front(d);
||   363     if (first)
||   364       ready();
||   365   }

在ready函數(shù)中調(diào)用DispatchQueue::start, start()函數(shù)啟動DispatchQueue::DispatchThread和DispatchQueue::LocalDeliveryThread線程類,最終調(diào)用DispatchQueue::entry()和DispatchQueue::run_local_delivery。

     216 void DispatchQueue::start() 
-    217 {   
|    218   assert(!stop);
|    219   assert(!dispatch_thread.is_started());
|    220   dispatch_thread.create("ms_dispatch");    //調(diào)用Thread::create->Thread::try_create->Thread::_entry_func->Thread::entry_wrapper->DispatchThread::entry
|    221   local_delivery_thread.create("ms_local");
|    222 }
|-    98   class DispatchThread : public Thread {
||    99     DispatchQueue *dq;
||   100   public:
||   101     explicit DispatchThread(DispatchQueue *dq) : dq(dq) {}
||-  102     void *entry() {
|||  103       dq->entry();
|||  104       return 0;
|||  105     }  
||   106   } dispatch_thread;

在DispatchQueue::entry()中調(diào)用根據(jù)不同的命令碼調(diào)用不同的Messenger類中的處理函數(shù)

void DispatchQueue::entry()
{
    .
    .
 
	switch (qitem.get_code()) {
	case D_BAD_REMOTE_RESET:
	  msgr->ms_deliver_handle_remote_reset(qitem.get_connection());
	  break;
	case D_CONNECT:
	  msgr->ms_deliver_handle_connect(qitem.get_connection());
	  break;
	case D_ACCEPT:
	  msgr->ms_deliver_handle_accept(qitem.get_connection());
	  break;
	case D_BAD_RESET:
	  msgr->ms_deliver_handle_reset(qitem.get_connection());
	  break;
	default:
	  assert(0);
	}
      } else {
	Message *m = qitem.get_message();
	if (stop) {
	  ldout(cct,10) << " stop flag set, discarding " << m << " " << *m << dendl;
	  m->put();
	} else {
	  uint64_t msize = pre_dispatch(m);
	  msgr->ms_deliver_dispatch(m);
	  post_dispatch(m, msize);
	}
      }
      .
      .

}

在Messenger::ms_deliver_dispatch中最終調(diào)用不同的Dipatcher繼承類的ms_dispatch進行處理

|-   579   void ms_deliver_dispatch(Message *m) {
||   580     m->set_dispatch_stamp(ceph_clock_now(cct));
||   581     for (list<Dispatcher*>::iterator p = dispatchers.begin();                                                                                                            
||   582      p != dispatchers.end();
||-  583      ++p) {
|||  584       if ((*p)->ms_dispatch(m))     //在Dispatcher繼承類中進行處理
|||  585     return;
|||  586     }
||   587     lsubdout(cct, ms, 0) << "ms_deliver_dispatch: unhandled message " << m << " " << *m << " from "
||   588              << m->get_source_inst() << dendl;
||   589     assert(!cct->_conf->ms_die_on_unhandled_msg);
||   590     m->put();
||   591   }

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ceph中Dispatcher模塊的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

本文題目:ceph中Dispatcher模塊的示例分析
瀏覽地址:http://aaarwkj.com/article24/jjjoje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航網(wǎng)站維護、、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
91亚洲欧美日韩在线观看| 国产美女无遮挡免费网站| 亚洲国产精品一区二区三区| 九九视频免费观看5| 成人午夜三级在线观看| 97人妻人人澡人人爽| 国产一级三级视频在线| 国产三级精品三线在线观看| 九九热视频这里是精品| 一区二区高清免费日本| 日韩欧美一区二区免费| 青青草成人免费在线公开视频| 清纯唯美校园春色亚洲激情| 99精品久久久中文字幕日本| 青青草成人一区二区三区| 传媒视频在线观看网站| av手机天堂网免费观看| 欧美一区二区日韩国产| 麻豆视频传媒入口在线播放| 亚洲三区久久婷婷激情| 91老熟女露脸嗷嗷叫| 久久婷婷国产综合色啪| 亚洲免费观看视频一区二区三区| 麻豆片免费观看在线看| 久久精品国产亚洲av高清综合| 精品人妻一区二区三区蜜桃电| 蜜臀av网站在线播放| 久久亚洲精品中文字幕一| 亚洲av优选在线观看精品| 免费观看日本成人午夜大片| 久久人热视频这里只有精品| 亚洲偷拍自拍在线观看| 清纯唯美亚洲自拍第一页| 成人精品淫片一级免费| 一区二区中文字幕精品| 香蕉欧美在线视频播放| 日韩不卡永久免费视频观看| 午夜av一区二区三区| 亚洲成人高清av在线| 欧美日韩亚洲视频一区久久| 亚洲午夜天堂精品福利天堂|