Refs #356 Pre-allocates N segments from timer task. N is "adaptive" in that it is increased (to a max) every time segement acquisition is forced to allocate a new instead of picking from pre-alloc (reserve) list. The idea is that it is easier to adapt how many segments we consume per timer quanta than the timer quanta itself. Also does disk pressure check and flush from timer task now. Note that the check is still only done max once every new segment. Some logging cleanup/betterment also to make behaviour easier to trace. Reserve segments start out at zero length, and are still deleted when finished. This is because otherwise we'd still have to clear the file to be able to properly parse it later (given that is can be a "half" file due to power fail etc). This might need revisiting as well. With this patch, there should be no case (except flush starvation) where "add_mutation" actually waits for a (potentially) blocking op (disk). Note that since the amount of reserve is increased as needed, there will be occasional cases where a new segment is created in the alloc path until the system finds equilebrium. But this should only be during a breif warmup. v2: Fixed timestamp not being reset on reserve acquire
9.5 KiB
9.5 KiB