Skip to content

Commit

Permalink
#1899: envelope: fix bug with lack of epoch propagation on put messages
Browse files Browse the repository at this point in the history
This is a long-standing bug that started showing up with the changes
in #1899, making the runnable more
efficient. TestGroup.test_group_range_construct_2 was consistently
breaking on the gcc-8 build with address sanitizer. With extensive
debugging, I tracked this bug down to the lack of propagation of an
epoch on the remote group construction message when a rooted group is
constructed where the constructing node is not included. Additionally,
the group must be specified by a list (not a range). When these
conditions occur, the group manager sends the information about the
group to a remote node using a packed put, which uses the
`PayloadMessage`: namely, ` struct GroupListMsg :
GroupInfoMsg<GroupMsg<::vt::PayloadMessage>>`. The `PayloadMessage`,
using a default template parameter, uses a basic envelope which is not
large enough to store the epoch. Thus, it gets dropped. Therefore, the
test sometimes breaks because the group construction and following
broadcast escape the `runInEpochCollective` and the test condition
will fail sometimes as it races with the delivery of the group message
being broadcast to the group spanning tree.
  • Loading branch information
lifflander authored and cz4rs committed Sep 28, 2022
1 parent 660355e commit ff8f337
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/vt/messaging/envelope/payload_envelope.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ namespace vt {
using PutPtrType = void*;
using PutPtrConstType = void const*;
using PutEnvSizeType = size_t;
using PutUnderEnvelopeT = Envelope;
using PutUnderEnvelopeT = EpochTagEnvelope;

/**
* \struct PutEnvelope
Expand All @@ -75,8 +75,7 @@ struct PutEnvelope {
TagType put_data_tag_; /**< The put tag */
};

//using PutBasicEnvelope = PutEnvelope<EpochTagEnvelope, size_t>;
using PutShortEnvelope = PutEnvelope<Envelope, size_t>;
using PutShortEnvelope = PutEnvelope<EpochTagEnvelope, size_t>;
using eEnvType = messaging::eEnvelopeType;

/**
Expand Down

0 comments on commit ff8f337

Please sign in to comment.