Skip to content

Instantly share code, notes, and snippets.

@shnya
Created February 5, 2013 18:02
Show Gist options
  • Save shnya/4716334 to your computer and use it in GitHub Desktop.
Save shnya/4716334 to your computer and use it in GitHub Desktop.
既にブロック情報がない時にデータノードのブロックは削除されるかどうか。
DataNodeの挙動について
DataNode.java
DataNode#main
-> DataNode#secureMain
# BlockPoolManagerの初期化まで
-> DataNode#createDataNode
-> DataNode dn = DataNode#instantiateDataNode
-> DataNode#makeInstance
-> new DataNode
-> DataNode#startDataNode
-> blockPoolManager = new BlockPoolManager
-> blockPoolManager.refreshNameNode
-> dn.runDatanodeDaemon
-> blockPoolManager.startAll
-> BPOfferService#start
-> BPServiceActor#start->run()
-> namenodeと接続
-> BPServiceActor#offerService(無限ループ)
# HeartBeatの送信
-> sendHeartBeat
# IPCコール
-> response = bpNamenode.sendHeartBeat
-> processCommand(response)
-> BPOfferService#processCommandFromActor(cmds)
-> BPOfferService#processCommandFromActive(cmds)
# invalidateコマンドだった場合
# ブロックを物理的に削除する。
-> datanode.getFsdataset().invalidate()
-> File#deleteを最終的に呼び出す。
# blockReportの送信
-> blockReport
# IPCコール
-> bpNamenode.blockReport()
NameNodeの挙動について
NameNode#main
-> createNameNode
-> new NameNode
-> initialize
-> createRPCServer
-> startCommonServices
-> rpcServer.start()
NameNodeRPCService
-> sendHeartBeat
-> return FSNameSystem#handleHeartBeat
-> return getDataNodeManager.handleHeartBeat
Block[] blks = nodeinfo.getInvalidateBlocks(blockInvalidateLimit);
if (blks != null) {
cmds.add(new BlockCommand(DatanodeProtocol.DNA_INVALIDATE,
blockPoolId, blks));
}
#ハートビートのタイミングで削除コマンドをデータノードに返す。
ここでnodeinfoはDataNodeDescripterのインスタンス
# invalidateBlocksに削除対象ブロックを追加
-> blockReport
-> FSNameSystem#getBlockManager().processReport
-> blockManager#reportDiff
-> BlockManager#processReportedBlock
# blockMapに含まれないブロックが含まれていた場合は、invalidatedなブロック
のため、削除対象リストに入れる
-> toInvalidated.add()
-> BlockManager#addToInvalidates
-> InvalidateBlocks#add
#別スレッドがinvalidateBlocksを監視
BlockManager
final Daemon replicationThread = new Daemon(new ReplicationMonitor());
ReplicationMonitor#run
-> computeDatanodeWork
-> computeInvalidateWork
-> invalidateWorkForOneNode
-> invalidateBlocks.invalidateWork
-> NodeDescripter#addBlocksToBeInvalidated(invalidateBlock)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment