Mas d34 leveled.i459 partialmerge (#460)
* Add test to replicate issue 459 Nothing actually crashes due to the issue - but looking at the logs there is the polarised stats associated with the issue. When merging into L3, you would normally expect to merge into 4 files - but actually we see FileCounter occasionally spiking. * Add partial merge support There is a `max_mergebelow` size which can be a positive integer, or infinity. It defaults to 32. If a merge from Level N covers less than `max_mergebelow` files in level N + 1 - the merge will proceesd as before. If it has >= `max_mergebelow`, the merge will be curtailed when `max_mergebelow div 2` files have been created at that level. The remainder for Level N will then be written, as well as for Level N + 1 up to the next whole file that has no yet been touched by the merge. The backlog that prompted the merge will still exist - as the files in Level N have not been changed. However, it is likely the next file picked will not be the same one, and will in probability have a lower number of files to merge (as the average is =< 8). This will stop progress from being halted by long merge jobs, as they will exit out in a safe way after partial completion. In the case where the majority of files covered do not require a merge, then those files will be skipped the next time the remainder file is picked up for merge at Level N
This commit is contained in:
parent
c642575caa
commit
69e8b29d1f
8 changed files with 360 additions and 66 deletions
|
@ -33,6 +33,7 @@
|
|||
%%% Non-configurable startup defaults
|
||||
%%%============================================================================
|
||||
-define(MAX_SSTSLOTS, 256).
|
||||
-define(MAX_MERGEBELOW, 24).
|
||||
-define(LOADING_PAUSE, 1000).
|
||||
-define(LOADING_BATCH, 1000).
|
||||
-define(CACHE_SIZE_JITTER, 25).
|
||||
|
@ -109,7 +110,8 @@
|
|||
press_level = ?COMPRESSION_LEVEL :: non_neg_integer(),
|
||||
log_options = leveled_log:get_opts()
|
||||
:: leveled_log:log_options(),
|
||||
max_sstslots = ?MAX_SSTSLOTS :: pos_integer(),
|
||||
max_sstslots = ?MAX_SSTSLOTS :: pos_integer()|infinity,
|
||||
max_mergebelow = ?MAX_MERGEBELOW :: pos_integer()|infinity,
|
||||
pagecache_level = ?SST_PAGECACHELEVEL_NOLOOKUP
|
||||
:: pos_integer(),
|
||||
monitor = {no_monitor, 0}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue