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()を呼ぶ
- initSearver
- 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
- getBootstrapToken(metadata, Map