common/LogClient: assign seq and queue atomically
The _get_mon_log_message() assumes that log_last and log_queue
are in sync, but it was previously possible to increment log_last
setting e.seq in do_log(), and only later queue it. If a racing
thread ran get_mon_log_message() in the meantime it would fail
an assertion.
Fix by assigning the seq and queueing it atomically. If the
cluster log is not enabled, use the get_next_seq() helper so that
graylog or syslog messages still have a seq assigned.
Fixes: http://tracker.ceph.com/issues/18209
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit
1f8f58becf1ec53c729b0befeb1f19c601588c4a)