Skip to content
Snippets Groups Projects
Commit afbc8504 authored by Vladislav Shpilevoy's avatar Vladislav Shpilevoy Committed by Konstantin Osipov
Browse files

swim: encapsulate member bin info into a 'passport'

Each member stored in components dissemination and anti-entropy
should carry a unique identifier, a status, and an address. Those
attributes are UUID, IP, Port, enum swim_member_status,
incarnation.

Now they are sent only in scope of anti-entropy, but forthcoming
dissemination component also would like to use these attributes
for each event.

This commit makes the vital attributes and their code more
reusable by encapsulation of them into a binary passport
structure.

Part of #3234
parent 7b56f1fe
No related branches found
No related tags found
No related merge requests found
......@@ -314,32 +314,48 @@ swim_anti_entropy_header_bin_create(struct swim_anti_entropy_header_bin *header,
header->v_anti_entropy = mp_bswap_u16(batch_size);
}
static inline void
swim_passport_bin_create(struct swim_passport_bin *passport)
{
passport->k_status = SWIM_MEMBER_STATUS;
passport->k_addr = SWIM_MEMBER_ADDRESS;
passport->m_addr = 0xce;
passport->k_port = SWIM_MEMBER_PORT;
passport->m_port = 0xcd;
passport->k_uuid = SWIM_MEMBER_UUID;
passport->m_uuid = 0xc4;
passport->m_uuid_len = UUID_LEN;
passport->k_incarnation = SWIM_MEMBER_INCARNATION;
passport->m_incarnation = 0xcf;
}
static inline void
swim_passport_bin_fill(struct swim_passport_bin *passport,
const struct sockaddr_in *addr,
const struct tt_uuid *uuid,
enum swim_member_status status, uint64_t incarnation)
{
passport->v_status = status;
passport->v_addr = mp_bswap_u32(ntohl(addr->sin_addr.s_addr));
passport->v_port = mp_bswap_u16(ntohs(addr->sin_port));
memcpy(passport->v_uuid, uuid, UUID_LEN);
passport->v_incarnation = mp_bswap_u64(incarnation);
}
void
swim_member_bin_fill(struct swim_member_bin *header,
const struct sockaddr_in *addr, const struct tt_uuid *uuid,
enum swim_member_status status, uint64_t incarnation)
{
header->v_status = status;
header->v_addr = mp_bswap_u32(ntohl(addr->sin_addr.s_addr));
header->v_port = mp_bswap_u16(ntohs(addr->sin_port));
memcpy(header->v_uuid, uuid, UUID_LEN);
header->v_incarnation = mp_bswap_u64(incarnation);
swim_passport_bin_fill(&header->passport, addr, uuid, status,
incarnation);
}
void
swim_member_bin_create(struct swim_member_bin *header)
{
header->m_header = 0x85;
header->k_status = SWIM_MEMBER_STATUS;
header->k_addr = SWIM_MEMBER_ADDRESS;
header->m_addr = 0xce;
header->k_port = SWIM_MEMBER_PORT;
header->m_port = 0xcd;
header->k_uuid = SWIM_MEMBER_UUID;
header->m_uuid = 0xc4;
header->m_uuid_len = UUID_LEN;
header->k_incarnation = SWIM_MEMBER_INCARNATION;
header->m_incarnation = 0xcf;
swim_passport_bin_create(&header->passport);
}
void
......
......@@ -239,13 +239,16 @@ swim_anti_entropy_header_bin_create(struct swim_anti_entropy_header_bin *header,
uint16_t batch_size);
/**
* SWIM member MessagePack template. Represents one record in
* anti-entropy section.
* The structure represents a passport of a member. It consists of
* some vital necessary member attributes, allowing to detect its
* state, exact address. The whole passport is necessary for each
* info related to a member: for anti-entropy records, for
* dissemination events. The components can inherit that structure
* and add more attributes. For example, anti-entropy can add a
* mandatory payload; dissemination adds optional old UUID and
* payload.
*/
struct PACKED swim_member_bin {
/** mp_encode_map(5) */
uint8_t m_header;
struct PACKED swim_passport_bin {
/** mp_encode_uint(SWIM_MEMBER_STATUS) */
uint8_t k_status;
/** mp_encode_uint(enum member_status) */
......@@ -277,6 +280,17 @@ struct PACKED swim_member_bin {
uint64_t v_incarnation;
};
/**
* SWIM member MessagePack template. Represents one record in
* anti-entropy section.
*/
struct PACKED swim_member_bin {
/** mp_encode_map(5) */
uint8_t m_header;
/** Basic member info like status, address. */
struct swim_passport_bin passport;
};
/** Initialize antri-entropy record. */
void
swim_member_bin_create(struct swim_member_bin *header);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment