Ozone SCM的Container狀態轉化分析

2021-10-02 15:54:48 字數 1543 閱讀 3329

因為ozone scm提供儲存資料的單位是container,因此中心服務scm和其下管理的datanode節點是基於container report進行心跳匯報的。

這其中涉及的處理過程如下所示:

1)datanode獲取本地最新container狀態報告,心跳方式傳送給scm服務。

2)scm服務接受到datanode的container報告後,對比自身記憶體維護的container資訊,進行相關container狀態的更新,同時處理副本數不足以及miss掉的container副本。

3)scm內部replicationmanager服務同時會定期檢查container副本狀態資訊,進行container副本的處理,例如副本多餘,不足的情況以及container狀態不一致的情況,需要觸發close container命令的操作。

4)scm的stale/deadhandler處理dead節點,inactive pipeline時,也會觸發針對dead節點內的container close命令,inactive pipeline內包含的container close操作。

上述過程的圖示過程如下所示:

在上述scm和datanode之間的container處理過程中,會涉及到container狀態的多次切換。

不過在這裡,container擁有比pipeline更複雜的狀態切換過程,它總共包含有以下6種狀態,不同轉態間轉化有相應的event事件定義。

上面這裡重點區分下quasi_closed和closed的狀態。quasi_closed是container closed狀態的前乙個臨時轉態,表示的意思是container處於即將關閉的狀態。因為在實際container close操作過程中,會出現raft一致性協議通訊由於網路或者節點失敗導致一致性無法達成的情況,但此時我們又不能讓container一直處於open可用的狀態,於是我們需要有一種手段可以讓其變為可closed的狀態。container在變為closed狀態後,就可以進行replication操作,而且不會進行此container資料的新寫入操作了。

鑑於這種情況,社群對此引入quasi_closed狀態,先將container狀態從closing狀態變為quasi_closed。如果匯報上來超過半數以上副本是quasi_closed,然後scm這邊可以強制將container再變為closed。datanode上container狀態的更新,在下一次的datanode心跳中,將會及時上報到scm這邊。

container各個狀態間的切換過程圖如下所示:

函式週期表丨資訊丨值丨IN和CONTAINSROW

in運算子和containsrow函式 in和containsrow函式隸屬於 資訊 類函式,二者除了語法上的區別,其效果是等同的。用途 適用於多列條件判定。相對於contains函式而言,二者的寫法和運算更為優化。注 二者執行完全相等的比較,空值不能等同於0。語法語法1 dax1 比較值 in 被...

container of 的的的原理

另外一篇,同樣精彩,揭開linux核心中container of的神秘面紗 華清遠見嵌入式學院講師。在linux 核心中有乙個大名鼎鼎的巨集container of 這個巨集是用來幹嘛的呢?我們先來看看它在核心中是怎樣定義的。呵呵,乍一看不知道是什麼東東。我們先來分析一下container of p...

存在的就是合理的,發生的即是必然的。

筆者有時候會想,什麼是對,什麼是錯?對於追求某一件事情之前首先會考慮,為什麼我要做這件事情。所以經過自我分析和生活周邊環境的總結。我認為,對於乙個人來,這是在站在個體的角度上說。什麼是對的?就是你自己覺得是對的,它就是對的。不過這個只是你自己的想法。主觀上的正確,不代表客觀上也受到了別人的認可。就拿...