v2.2.0
This version adds some new features needed by Cascade, and fixes several bugs discovered since our last release.
New Features
- RPC functions on Replicated Objects must now be labeled as either P2P-callable or ordered-callable using
tag_p2p
ortag_ordered
(instead of the previoustag
function). The macrosP2P_TARGETS
andORDERED_TARGETS
can be used withinREGISTER_RPC_FUNCTIONS
to tag functions appropriately when writing a Replicated Object class. A P2P-callable function should not modify any replicated object state (and must beconst
), while an ordered-callable function can modify the object's state but cannot be called with a p2p_send. See #178 and #186. - QueryResults objects returned from
ordered_send
calls can now be used to determine whether the new version (object state) created by theordered_send
has finished persisting.QueryResults::await_local_persistence()
blocks until the version has finished persisting locally, andQueryResults::await_global_persistence()
blocks until the version has finished persisting on all replicas. These functions have the same semantics asstd::future<void>::get()
, so they can only be called once. See #167 and #194. - The DefaultSubgroupAllocator can be configured by reading a JSON string specified in derecho.cfg instead of by constructing SubgroupAllocationPolicy objects. In addition, it now has the ability to "reserve" certain node IDs for certain shards, instead of always assigning them in a round-robin fashion. More details are documented in README.md; also see #206.
- If a node catches an exception (derived from
std::exception
) while processing an incoming RPC function call, it now returns the exception's description to the caller. This meansderecho::remote_exception_occurred
will produce a more useful error message when it is thrown on the caller's side, instead of simply stating that some kind of exception occurred while invoking an RPC function. This was added while fixing #198.
Bugs Fixed
- A potential deadlock between the predicate-handling thread and the P2P-message thread when a new external client joins the group. Details in #195 (and #197)
- Sending an RPC reply that exceeds max_reply_payload_size would cause the recipient of the reply to segfault. This now causes an exception on the sender of the reply, which is sent back to the receiver in a
remote_exception_occurred
message. See #198 - A few test programs needed to be updated with bug fixes discovered and applied in other test programs: #183, #189, #191
Dependencies
- Moved to
libfabric v1.12.1
(see #199) - Added a dependency on
nlohmann_json 3.9.0
(for the new JSON layout feature)