We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CannyLS v0.9.3以前では、プロセスの異常終了後に再起動すると本来読み込めるべきでないデータが読み込めてしまう。
以下のような計算の流れを考える: (完全なコードについてはこのissueのためのリポジトリをご覧ください)
lump_id1
lump_id2
let lump_id1 = LumpId::new(1_111); let lump_data1 = storage.allocate_lump_data_with_bytes(b"hoge").unwrap(); storage.put(&lump_id1, &lump_data1); // lump_id1に"hoge"を書き込む。 storage.journal_sync(); // ジャーナルのディスクへの同期を行う。 storage.delete(&lump_id1); // lump_id1を削除する。 let lump_id2 = LumpId::new(22_222_222); let lump_data2 = storage.allocate_lump_data_with_bytes(b"foo").unwrap(); storage.put(&lump_id2, &lump_data2); // lump_id2に"foo"を書き込む。 // ここでプロセスがcrashする。 let nvm = track!(FileNvm::open(path))?; let mut storage = track!(Storage::open(nvm))?; println!("{:?}", storage.get(&lump_i1).unwrap()); // ===> "foo"
deleteを行う際には毎回syncを行う。
delete
sync
上の回避策では大幅にパフォーマンスが低下するため、以下の何れかの条件のもとでより良いパフォーマンスを満たす対応策を打ち出したい:
The text was updated successfully, but these errors were encountered:
これは問題ですね...。 対応としては「アロケータにメモリ位置を解放した通知を行うタイミングを遅らせる」が良さそうに感じました。 (解放依頼はすぐにアロケータに発行せずにジャーナル領域のキューに積んでおいて、unreleased_headの更新タイミングで、永続化されたことが分かっている分に関しては、キューから出して、アロケータに実際の解放依頼を投げる)
Sorry, something went wrong.
quickな返信ありがとうございます。 タイミングを遅らせる方針で手元でコード変更しているので、近い内にPRに出来るかと思います。 (ロールバック的な挙動を許す方は書きはしたものの、実装案は特にないです……)
👍
yuezato
No branches or pull requests
問題
CannyLS v0.9.3以前では、プロセスの異常終了後に再起動すると本来読み込めるべきでないデータが読み込めてしまう。
状況の詳述
以下のような計算の流れを考える:
(完全なコードについてはこのissueのためのリポジトリをご覧ください)
lump_id1
とlump_id2
を準備する。lump_id1
にデータ"hoge"をputする。lump_id1
を削除する。lump_id2
にデータ"foo"をputする。lump_id1
からデータが読み込める。これだけであればロールバック的な挙動として容認できるが、読み出したデータが"foo"になってしまっている。回避策
delete
を行う際には毎回sync
を行う。より良い対応に向けて
上の回避策では大幅にパフォーマンスが低下するため、以下の何れかの条件のもとでより良いパフォーマンスを満たす対応策を打ち出したい:
The text was updated successfully, but these errors were encountered: