Penciller Manifest and Locking
The penciller had the concept of a manifest_lock - but it wasn't clear what the purpose of it was. The updating of the manifest has now been updated to reduce the code and make the process cleaner and more obvious. Now the committed manifest only covers non-L0 levels. A clerk can work concurrently on a manifest change whilst the Penciller is accepting a new L0 file. On startup the manifets is opened as well as any L0 file. There is a possible race condition with killing process where there may be a L0 file which is merged but undeleted - and this is believed to be inert. There is some outstanding work still. Currently the whole store is paused if a push_mem is received by the Penciller, and the writing of a L0 sft file has not been completed. The creation of a L0 file appears to take about 300ms, so if the ledger_cache fills in this period a pause will occurr (perhaps due to objects with lots of index entries). It would be preferable to pause more elegantly in this situation. Perhaps there should be a harsh timeout on the call to check the SFT complete, and catching it should cause a refused response. The next PUT will then wait, but a any queued GETs can progress.
This commit is contained in:
parent
f16f71ae81
commit
12fe1d01bd
7 changed files with 88 additions and 80 deletions
|
@ -46,8 +46,6 @@
|
|||
{root_path :: string(),
|
||||
cache_size :: integer(),
|
||||
max_journalsize :: integer(),
|
||||
metadata_extractor :: function(),
|
||||
indexspec_converter :: function(),
|
||||
snapshot_bookie :: pid()}).
|
||||
|
||||
-record(iclerk_options,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue