5.3 STTOR 階段 0

大多數 NDB 核心區塊的啟動階段都從 STTOR 階段 1 開始,但 NDBFSNDBCNTR 除外,它們從階段 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 中才會執行任何實際工作)

注意

此表在撰寫本文時為最新,但可能會隨著時間而變更。最新資訊可以在原始碼中找到。