fair-queue: Keep request queues self-consistent
fair-queue: Keep request queues self-consistent

When queuing the request the fair_queue::queue does three
things:

- pushes the prio class into queue
- pushes the request to class queue
- bumps up the counters

The dispatch_requests() then looks into counters to check
if it can dispatch from queues and asserts on queues being
empty.  Respectively, if the counter is bumped, but the
request is not queued, the dispatch_requests will assert
on non-empty checks sooner or later, as it will try to find
the missing requests. This can happen if queueing throws
while allocating memory.

The fix is in incrementing the counters last.

A note on this -- it's OK if we push the priority class,
but throw queueing the request, dispatch_requests() already
handles queued but empty prio classes.

Signed-off-by: Pavel Emelyanov <c9a32589e048e044184536f7ac71ef92fe82df3e@scylladb.com>
Message-Id: <20200618085935.3823-3-c9a32589e048e044184536f7ac71ef92fe82df3e@scylladb.com>

cloudius-systems/seastar,avikivity/seastar,dreamsxin/seastar,scylladb/seastar,dreamsxin/seastar,syuu1228/seastar,syuu1228/seastar,scylladb/seastar,avikivity/seastar,scylladb/seastar,dreamsxin/seastar,syuu1228/seastar,cloudius-systems/seastar,cloudius-systems/seastar,avikivity/seastar