Broker 1.3.3
============

- Fix unusable subscriber.poll() method in Python bindings.

Broker 1.3.2
============

Change topic strings to not automatically alter slashes

Automatically removing trailing or consecutive slashes in topic strings
prevents uniquely targeting topic names to a node.

For example, publishing to "node-10/" should not match a subscription
for "node-1/", but that's what happens with prefix-based matching if the
trailing slash is automatically removed

Broker 1.3.1
============

Fix a race condition in data store flare operations

The race (as seen via Zeek usage) goes like:

Thread A: enqueue item, get suspended
Thread B: sees mailbox has items
Thread B: dequeue item
Thread B: extinguish flare
Thread A: resume, fire flare

That ordering can leave the flare in an active state without any actual
items remaining in the mailbox.

This patch adds a mutex/lock such that extinguishing of the flare cannot
be interleaved between the enqueue and firing of the flare.

This likely relates to https://github.com/zeek/zeek/issues/838,
https://github.com/zeek/zeek/issues/716, as well as this thread
http://mailman.icsi.berkeley.edu/pipermail/zeek/2020-February/015062.html

Broker 1.3.0
============

- A C++17-capable compiler and CMake 3.0+ are now required to compile Broker

- Broker 1.3.0 depends on CAF 0.17.4.  Broker 1.2.x had depended on CAF 0.16.x,
  whose wire format changed and is now incompatible with CAF 0.17.x.
  Zeek 3.0.x shipped with Broker 1.2.x, which means Broker 1.3.x cannot be
  used to communicate with Zeek 3.0.x, only 3.1.x (and possibly later, check
  for updated release notes for compatibility clarifications).

Broker 1.2.0
============

This release contains breaking API changes (for C++ code, not Python)
in order to increase messaging efficiency via reduction of data
copying.  Specifically:

- ``broker::subscriber::get()`` now returns a different, copy-on-write
  type called ``broker::data_message`` rather than an
  ``std::pair<topic, data>``.  For example this old code::

      auto sub = ep.make_subscriber({"/topic/test"});
      auto msg = sub.get();
      auto& topic = msg.first;
      auto& data = msg.second

  can be changed to::

      auto sub = ep.make_subscriber({"/topic/test"});
      auto msg = sub.get();
      auto& topic = broker::get_topic(msg);
      auto& data = broker::get_data(msg);

- ``broker::endpoint::publish(vector)`` now takes a vector of the new
  ``broker::data_message`` type, not ``std::pair<topic, data>``

- Generally, all type aliases within classes, like
  ``value_type = std::pair<topic, data>``, have been changed to use the
  new ``broker::data_message`` type.

- The semantics of message forwarding have changed slightly: the
  first sender of the message is now the one that applies the initial
  TTL value.  Previously, the first receiver would be the one to
  apply the initial TTL.
