Fix: rotation of a stopped session hangs indifinitely
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 9 Aug 2019 15:11:28 +0000 (11:11 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 5 Sep 2019 20:39:14 +0000 (16:39 -0400)
commit63b2fe4881ad4b1c8f6e5f8f3e69d9aafda0ad97
treed96e5c680233c5412b6f577ceaed51128c948c45
parent2c42aa5ccc7d4f6c1b57788146da2202b95a5f31
Fix: rotation of a stopped session hangs indifinitely

The relay daemon control protocol expects a rotation position as "the
sequence number of the first packet _after_ the current trace chunk.

At the moment when the positions of the buffers are sampled, the
production position does not necessarily sit at a packet boundary. The
'active' flush operation above will push the production position to
the next packet boundary _if_ it is not already sitting at such a
boundary.

Assuming a current production position that is not on the bound of a
packet, the 'target' sequence number is
  (consumed_pos / subbuffer_size) + 1

Note the '+ 1' to ensure the current packet is part of the current
trace chunk.

However, if the production position is already at a packet boundary,
the '+ 1' is not necessary as the last packet of the current chunk is
already 'complete'.

In the case of a stopped session, performing the '+ 1'
indiscriminately results in a position that will not be reached until
another (not 'active') flush occurs.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/consumer/consumer.c
This page took 0.025953 seconds and 4 git commands to generate.