大多數 NDB
核心區塊的啟動階段都從 STTOR
階段 1 開始,但 NDBFS
和 NDBCNTR
除外,它們從階段 0 開始。可以檢視 ALL_BLOCKS
陣列中每個元素的第一個值(定義於 src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
)來得知。此外,當 STTOR
信號傳送到區塊時,回傳信號 STTORRY
總是包含區塊感興趣的啟動階段列表。只有在這些啟動階段中,區塊才會實際接收到 STTOR
信號。
STTOR
信號會依據核心區塊在 ALL_BLOCKS
陣列中的順序傳送。雖然 NDBCNTR
會經過階段 0 到 255,但其中大多數是空的。
階段 0 的兩個活動都與 NDB
檔案系統的初始化有關。首先,如有必要,NDBFS
會為資料節點建立檔案系統目錄。在初始啟動的情況下,NDBCNTR
會清除資料節點目錄中的任何現有檔案,以確保 DBDIH
區塊後續不會發現任何系統檔案(如果 DBDIH
發現任何系統檔案,它會將啟動錯誤解讀為初始啟動)。
每次 NDBCNTR
完成將一個啟動階段傳送到所有核心區塊時,它會將一個 NODE_STATE_REP
信號傳送到所有區塊,這會有效地更新所有區塊中的 NodeState
。
每次 NDBCNTR
完成一個非空的啟動階段時,它會向管理伺服器報告此事;在大多數情況下,這會記錄在叢集日誌中。
最後,在完成所有啟動階段後,NDBCNTR
會使用 NODE_STATE_REP
信號更新所有區塊中的節點狀態;它也會發送一個事件報告,通知所有啟動階段已完成。此外,所有其他叢集資料節點都會收到此節點已完成所有啟動階段的通知,以確保所有節點都知道彼此的狀態。每個資料節點都會向所有區塊發送一個 NODE_START_REP
;但是,這僅對 DBDIH
有意義,以便它知道何時可以解除 DBDICT
上綱要變更的鎖定。
在下表中,以及本文的全文中,我們有時會將 STTOR
啟動階段簡稱為 「啟動階段」 或 「階段 N
」 (其中 N
是一些數字)。 NDB_STTOR
啟動階段總是會如此限定,因此稱為 「NDB_STTOR
啟動階段」 或 「NDB_STTOR
階段」。
表 5.1 NDB 核心區塊和啟動階段
核心區塊 | 接受啟動階段 |
---|---|
NDBFS |
0 |
DBTC |
1 |
DBDIH |
1 |
DBLQH |
1, 4 |
DBACC |
1 |
DBTUP |
1 |
DBDICT |
1, 3 |
NDBCNTR |
0, 1, 2, 3, 4, 5, 6, 8, 9 |
CMVMI |
1(在 QMGR 之前), 3, 8 |
QMGR |
1, 7 |
TRIX |
1 |
BACKUP |
1, 3, 7 |
DBUTIL |
1, 6 |
SUMA |
1, 3, 5, 7, 100(空), 101 |
DBTUX |
1,3,7 |
TSMAN |
1, 3 (兩者皆忽略) |
LGMAN |
1, 2, 3, 4, 5, 6 (全部忽略) |
PGMAN |
1, 3, 7 (階段 7 目前為空) |
RESTORE |
1,3 (只有在階段 1 中才會執行任何實際工作) |
此表在撰寫本文時為最新,但可能會隨著時間而變更。最新資訊可以在原始碼中找到。