Re: OrderedScheduler and OrderedSafeExecutor
On Sat, Mar 24, 2018 at 8:38 AM, Matteo Merli <mmerli@xxxxxxxxxx> wrote:
> While profiling the allocations of a BookKeeper client (from current
> master) writing entries, I've noticed that there are multiple allocations
> per entry related to the OrderedScheduler.
> I think OrderedScheduler was introduced in 4.6 and now OrderedSafeExecutor
> is just an extension of OrderedScheduler as well.
OrderedSafeExecutor extends OrderedScheduler was for BC. We made common
util classes in bookkeeper-common.
> The main problem is that since OrderedScheduler supports both immediate and
> delayed execution, it uses a ScheduledThreadPoolExecutor per each bucket,
> plus some decorating wrappers.
Sound like this is the solution:
- Keep the OrderedScheduler
- Copy the OrderedScheduler to OrderedExecutor and change it to the
original executor implementation
- Let OrderedSafeScheduler extends OrderedExecutor (bc purpose)
> The ScheduledThreadPoolExecutor, needs a Priority queue and also always
> return future objects.
> From my memory snapshot I have counted 12 objects allocated (per addEntry
> operation) for a total of 472 bytes per each entry, all due the scheduled
> I think the delayed execution is only used in unit tests. In critical paths
> we're only using the immediate task submission.
> I think it might be worth to refactor OrderedScheduler or
> OrderedSafeExecutor to avoid that overhead.
> Matteo Merli