Skip to content

v2.2.0

Compare
Choose a tag to compare
@etremel etremel released this 20 Jul 17:57
· 435 commits to master since this release
v2.2.0
03edaf8

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 or tag_ordered (instead of the previous tag function). The macros P2P_TARGETS and ORDERED_TARGETS can be used within REGISTER_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 be const), 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 the ordered_send has finished persisting. QueryResults::await_local_persistence() blocks until the version has finished persisting locally, and QueryResults::await_global_persistence() blocks until the version has finished persisting on all replicas. These functions have the same semantics as std::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 means derecho::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)