儲存空間功能

儲存空間功能 分配個別元件 獨立儲存空間。這可防止元件例項存取屬於其他元件的檔案,包括自己的子項。

不同的儲存空間功能可能由不同的檔案系統提供支援。元件不應假設可在各儲存空間功能中執行不可部分完成的 I/O 作業。

如要瞭解可在元件之間共用的目錄,請參閱目錄功能

標準儲存空間能力名稱

儲存空間功能通常會使用標準名稱。每個標準名稱都暗示儲存空間能力應用於特定用途,並提供特定行為。任何接收儲存空間能力的元件,如果使用其中一個標準名稱,則可假設該元件會提供下列行為。

請注意,儲存空間能力名稱不一定會在全球範圍內識別儲存空間能力。舉例來說,在某些產品中,有幾個不同的儲存空間功能名為 data,位於元件執行個體拓樸中的不同位置。這些儲存空間功能由不同儲存空間磁碟區的不同目錄支援,但對於使用這些功能的元件執行個體而言,它們都具有相同的用途。

並非所有儲存空間功能都會使用這些標準名稱。在這些情況下,您應在定義儲存空間功能的所在位置,以及元件執行個體拓樸中能力重新命名的每個位置,記錄儲存空間功能的行為預期。

請注意,在測試期間,可能會建立不符合這些行為的儲存空間功能。舉例來說,整合測試可能會提供在測試案例之間清除的 data 能力。

data

命名為「data」的儲存空間功能,可用於儲存一般用途的持續性資料。

元件可能會假設系統不會刪除這些儲存功能中的檔案。元件必須謹慎使用 data,因為在有限的磁碟空間用盡時,合約不會讓系統刪除檔案。在多數情況下,建議使用 cache

cache

名為「cache」的儲存空間功能旨在儲存可視需要捨棄或重新產生的資料。例如可重新擷取的已下載相片。

儲存在 cache 中的檔案通常會在同一個元件執行個體的不同執行作業之間保留,但無法保證一定如此。系統隨時可能會刪除檔案,即使元件正在執行時也不例外。

tmp

命名為「tmp」的儲存空間功能用於儲存暫存或中繼資料。

系統可能會在元件執行期間刪除儲存在 tmp 中的檔案。在元件執行期間,系統不會刪除檔案。tmp 在元件啟動時通常會為空白,但不保證一定是這樣。元件不得假設 tmp 在啟動時會是空白,但也不應使用啟動時存在的任何檔案。

備份目錄

每個儲存空間能力都必須由相應的當元件執行個體嘗試透過儲存空間能力存取提供給它的目錄時,架構會在該元件的支援目錄中產生一個不重複的子目錄。

這個架構會根據元件執行個體的每個例項 ID 都是元件 ID 索引檔案中列出的 256 位元全域不重複 ID。

以下是元件 ID 索引檔案中包含穩定執行個體 ID 的項目範例:

{
    instances: [
        {
            instance_id: "47c3bf08f3e560c4dee659c28fa8d863dbdc0b1dbb74065e6cb1f38441ac759c",
            moniker: "/core/my_component",
        },
    ],
}

執行個體 ID 可讓元件的儲存空間在元件路徑名稱變更時持續存在,例如將元件執行個體移至其他領域。在測試或其他不需要持久儲存空間的用途中,使用路徑名稱是個不錯的次要選項。

如要進一步瞭解執行個體 ID,請參閱「元件 ID 索引」。

提供儲存空間功能

如要提供儲存空間能力,元件必須宣告該能力,並從 self 路由該功能。

{
    capabilities: [
        {
            storage: "tmp",
            from: "self",
            backing_dir: "memfs",
            storage_id: "static_instance_id",
        },
    ],
}

您必須使用有效的目錄能力名稱指定 backing_dir

from 欄位會宣告提供備援目錄的元件。如果供應者是其他元件,您可以提供元件參照

轉送儲存空間功能

儲存空間功能無法公開給父項元件。元件應將備份目錄路由至適當的父項元件,以便在該元件中宣告儲存空間,並提供給必要的子項。

如要進一步瞭解架構如何轉送元件功能,請參閱「功能轉送」。

提供

提供儲存空間能力可讓子元件存取該能力:

{
    offer: [
        {
            storage: "data",
            from: "self",
            to: [ "#storage-user" ],
        },
    ],
}

使用儲存空間功能

如要使用儲存空間能力,元件必須要求該能力,並在其

如要要求這項能力,請為其新增 use 宣告:

{
    use: [
        {
            storage: "data",
            path: "/example_dir",
        },
    ],
}

這會在提供的 path 中,以目錄填入元件的命名空間,其中包含獨立儲存空間內容。

使用選用儲存空間功能

請參閱「Connect 元件:使用選用功能」。

儲存空間範例

請參考下列範例,其中元件 A 會向其父項要求隔離儲存空間 tmp

// A.cml
{
    use: [
        {
            storage: "tmp",
            path: "/example_dir",
        },
    ],
}

這會在元件 A 的命名空間中,提供 /example_dir 的獨立儲存目錄。父項元件 B 使用同個領域內 memfs 元件提供的備用目錄,為 A 提供此能力:

// B.cml
{
    capabilities: [
        {
            storage: "tmp",
            from: "#memfs",
            backing_dir: "memfs",
        },
    ],
    offer: [
        {
            storage: "tmp",
            from: "self",
            to: [ "#A" ],
        },
    ],
    children: [
        { name: "A", url: "fuchsia-pkg://...", },
        { name: "memfs", url: "fuchsia-pkg://..." },
    ],
}

如要進一步瞭解如何實作目錄,請參閱目錄功能