Cassandraのbootstrap

  • org.apache.cassandra.service.StrorageService
    • initSearver
      • Cassandraサーバーの初期化
      • bootstrapの最初に担当範囲分のloadを得るためにgossip serviceをstartする。
      • ここからは、configファイルのautobootstrap項目がtrue/flaseで挙動が変わる
        • trueの場合、BootStrapper.getBootstrapTokenによりTokenをgetして(負荷が大きいendpointを返す)、startBootstrap(token)を実行してbootstrapmodeがfalseになるまで待機
        • falseの場合、Tokenはmetadataから取得する.tokenをgossip。
    • startBootstrap(token)
      • isBootstrapModeをtrueに
      • SystemTable.updateToken(token)を呼んで、SystemTableの更新
      • Gossipでlocalのstateをadd
      • BootStrapper.startBootstrap()を呼ぶ
  • org.apache.cassandra.dht.BootStrapper
    • getBootstrapToken(metadata, Map load)
      • cofigにinitialtokenが設定されていれば、initialtokenからtokenを作って返す
      • 設定されていなければ、getBalancedToken(metadata,load)を呼ぶ
    • getBalancedToken(metadata, load)
      • getBootstrapSourceによってToken用のmaxEndpointのInetAddressを得る
      • maxEndpointからTokenを作り、それをreturn
    • getBootstrapSource(metadata, load)
      • load内の各InetAddressのendpointについてmetadataのメンバのみにフィルタしたものをendpointsとして持つ
      • endpointを負荷が小さい順にsort(具体的なsort順はendpointのプライマリレンジでbootしているノード数が大きい順=>load量が小さい順)して、一番後ろのmaxendpoint(負荷が大きいendpoint)を返す
    • startBootstrap