Skip to content

非埋込PUTのジャーナルレコードにデータのchecksumを書くべきかどうか #30

@yuezato

Description

@yuezato

issue #28 のような問題があるので、
(データ領域ではなく)PUTレコード側にデータのchecksumも書くべきかどうか、
ということを議論したい。

データそのものの整合性というより、ジャーナルレコードとそこに紐づくデータの整合性に注目している。

すぐに考えられる実装としては以下の二つがある:

  1. PUTレコードを変更し(従ってストレージフォーマットが変更になる)、データのchecksumのためのフィールドを追加する。
  2. PUTレコードを変更せずに(ストレージフォーマットの変更は不要だがマイグレーションが必要)、
    JournalRecord::Put(ref lump_id, portion) => {
    adler32.update(TAG_PUT);
    adler32.update_buffer(&lump_id_to_u128(lump_id)[..]);
    let mut buf = [0; 7];
    BigEndian::write_u16(&mut buf, portion.len);
    BigEndian::write_uint(&mut buf[2..], portion.start.as_u64(), PORTION_SIZE);
    adler32.update_buffer(&buf);
    }
    の計算においてportionもchecksumに含めてしまう。

すぐに考えられるデメリット:

  1. checksumの計算に追加の時間がかかる
    • 書き込み時と読み込み時で2回の新しい計算が必要
    • データサイズに応じてどの程度かかるものか計測する必要がある

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions