Dispatcher類

Balancer.runOneIteration()--》Dispatcher.dispatchAndCheckContinue()
Dispatcher.dispatchAndCheckContinue()--》dispatchBlockMoves()

1. dispatchBlockMoves()

?對每個source進(jìn)行block移動的處理卓囚,相應(yīng)的線程會選擇要移動的block,向proxy source發(fā)送請求來進(jìn)行block移動的初始化操作驱敲。這個過程是流式控制的鹿霸。如果有太多un-confirmed block要移動泵喘,block選擇的操作會被鎖住。

final long bytesLastMoved = getBytesMoved();
    //java.util.concurrent.Future可以獲取任務(wù)的執(zhí)行結(jié)果
    final Future<?>[] futures = new Future<?>[sources.size()];

    //sources是HashSet<Source>集合類對象
    final Iterator<Source> i = sources.iterator();
    for (int j = 0; j < futures.length; j++) {
      final Source s = i.next();
      //dispatchExecutor是一個ExecutorService對象般妙,ExecutorService.submit()會返回一個對象
      futures[j] = dispatchExecutor.submit(new Runnable() {
        @Override
        public void run() {
          s.dispatchBlocks();
        }
      });
    }
2. dispatchBlocks()

?這個方法會迭代地進(jìn)行以下步驟:首先選取要移動的block纪铺,然后向proxy source發(fā)送請求

      //Time.monotonicNow()會調(diào)用System.nanoTime(),以毫微秒為單位
      final long startTime = Time.monotonicNow();
      this.blocksToReceive = 2 * getScheduledSize();
      boolean isTimeUp = false;
      int noPendingMoveIteration = 0;
      while (!isTimeUp && getScheduledSize() > 0
          && (!srcBlocks.isEmpty() || blocksToReceive > 0)) {
        final PendingMove p = chooseNextMove();
        if (p != null) {
          // Reset no pending move counter
          noPendingMoveIteration=0;
          executePendingMove(p);
          continue;
        }
3. chooseNextMove()
      for (Iterator<Task> i = tasks.iterator(); i.hasNext();) {
        final Task task = i.next();
        final DDatanode target = task.target.getDDatanode();
        final PendingMove pendingBlock = new PendingMove(this, task.target);
        if (target.addPendingBlock(pendingBlock)) {
          // target is not busy, so do a tentative block allocation
          if (pendingBlock.chooseBlockAndProxy()) {
            long blockSize = pendingBlock.block.getNumBytes();
            incScheduledSize(-blockSize);
            task.size -= blockSize;
            if (task.size == 0) {
              i.remove();
            }
            return pendingBlock;
          } else {
            // cancel the tentative move
            target.removePendingBlock(pendingBlock);
          }
        }
      }
      return null;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碟渺,一起剝皮案震驚了整個濱河市鲜锚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苫拍,老刑警劉巖芜繁,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怯疤,居然都是意外死亡浆洗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門集峦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伏社,“玉大人,你說我怎么就攤上這事塔淤≌” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵高蜂,是天一觀的道長聪黎。 經(jīng)常有香客問我,道長备恤,這世上最難降的妖魔是什么稿饰? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮露泊,結(jié)果婚禮上喉镰,老公的妹妹穿的比我還像新娘。我一直安慰自己惭笑,他們只是感情好侣姆,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沉噩,像睡著了一般捺宗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上川蒙,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天蚜厉,我揣著相機(jī)與錄音,去河邊找鬼畜眨。 笑死弯囊,一個胖子當(dāng)著我的面吹牛痰哨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匾嘱,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼斤斧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了霎烙?” 一聲冷哼從身側(cè)響起撬讽,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悬垃,沒想到半個月后游昼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡尝蠕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年烘豌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片看彼。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡廊佩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出靖榕,到底是詐尸還是另有隱情标锄,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布茁计,位于F島的核電站料皇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏星压。R本人自食惡果不足惜践剂,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娜膘。 院中可真熱鬧舷手,春花似錦、人聲如沸劲绪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贾富。三九已至,卻和暖如春牺六,著一層夾襖步出監(jiān)牢的瞬間颤枪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工淑际, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留畏纲,地道東北人扇住。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像盗胀,于是被迫代替她去往敵國和親艘蹋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理票灰,服務(wù)發(fā)現(xiàn)女阀,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,990評論 6 13
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,938評論 2 89
  • 對不起屑迂,對你也是對我浸策。 你今天告訴我不出來了,想去跆拳道惹盼。最后又告訴我練完陪我玩庸汗。結(jié)果就是我傻了吧唧的跑到地方等了...
    想做夢的大黑狗閱讀 244評論 0 0
  • 本應(yīng)該是一片漆黑的夜空宛若白晝,照亮了白晉的臉手报,莫名的心悸讓他加快步伐往家跑去蚯舱。 轟隆一聲炸響,讓他忍不住縮了一下...
    酒生公子閱讀 210評論 0 1