《Ceph原始碼分析》 第2章,第1節Object

2021-09-23 16:45:56 字數 1044 閱讀 3497

第2章

ceph通用模組2.1 object

物件object是預設為4mb大小的資料塊。乙個物件就對應本地檔案系統中的乙個檔案。在**實現中,有object、sobject、hobject、ghobject等不同的類。

結構object_t對應本地檔案系統的乙個檔案,name就是物件名:

`struct object_t `

sobject_t在object_t之上增加了snapshot資訊,用於標識是否是快照物件。資料成員snap為快照物件的對應的快照序號。如果乙個物件不是快照物件(也就是head物件),那麼snap欄位就被設定為ceph_nosnap值。

`struct sobject_t `

hobject_t是名字應該是hash object的縮寫。

struct hobject_t
其在sobject_t的基礎上增加了一些字段:

int64_t pool:所在的pool的id。

string nspace:nspace一般為空,它用於標識特殊的物件。

string key:物件的特殊標記。

string hash:hash和key不能同時設定,hash值一般設定為就是pg的id值。

ghobject_t在物件hobject_t的基礎上,新增了generation欄位和shard_id欄位,這個用於erasurecode 模式下的pg:

shard_id用於標識物件所在的osd在ec型別的pg中的序號,對應ec來說,每個osd在pg中的序號在資料恢復時非常關鍵。如果是replicate型別的pg,那麼欄位就設定為no_shard(-1),該欄位對於replicate是沒用。

generation用於記錄物件的版本號。當pg為ec時,寫操作需要區分寫前後兩個版本的object,寫操作儲存物件的上乙個版本(generation)的物件,當ec寫失敗時,可以rollback到上乙個版本。

struct ghobject_t

《Ceph原始碼分析》 第2章,第2節Buffer

2.2 buffer buffer就是乙個命名空間,在這個命名空間下定義了buffer相關的資料結構,這些資料結構在ceph的源 中廣泛使用。下面介紹的buffer raw類是基礎類,其子類完成了buffer資料空間的分配,buffer ptr類實現了buffer內部的一段資料,buffer lis...

《JUnit實戰(第2版)》 第1章1 7節小結

1.7 小結 junit實戰 第2版 每位開發者都會執行某種型別的測試,來檢視 是否可以正常工作。使用自動單元測試的開發者能夠根據需要重複執行這些測試,以確保新編寫的 可以正常工作並且不會破壞已有的測試。沒有junit,要建立簡單的單元測試並非難事,但是隨著測試變得越來越多 越來越複雜,編寫和維持測...

第1章 靜態分析

1.1反病毒引擎掃瞄 virustotal virscan 1.2雜湊值 惡意 的指紋 md5計算軟體 md5deep winmd5 1.3查詢字串 編碼 ascll 單位元組 unicode 雙位元組 1.4加殼與混淆惡意 tips 加殼程式至少包含loadlibrary和getprocaddre...