Skip to content

Commit a77d40f

Browse files
committed
Extend membership service to also provide node flags.
1 parent 65608d3 commit a77d40f

File tree

1 file changed

+82
-1
lines changed

1 file changed

+82
-1
lines changed

wsrep_membership_service.h

+82-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020 Codership Oy <[email protected]>
2+
* Copyright (C) 2020-2025 Codership Oy <[email protected]>
33
*
44
* This file is part of wsrep-API.
55
*
@@ -88,6 +88,54 @@ struct wsrep_membership
8888
struct wsrep_member_info_ext members[1];
8989
};
9090

91+
/**
92+
* Member info structure extended to contain member state and flags
93+
*/
94+
struct wsrep_member_info_ext_v2
95+
{
96+
struct wsrep_member_info base;
97+
wsrep_seqno_t last_committed;
98+
enum wsrep_member_status status;
99+
uint8_t flags;
100+
};
101+
102+
/* Member flags */
103+
#define WSREP_MEMBER_FLAGS_REP 0x01 // group representative
104+
#define WSREP_MEMBER_FLAGS_CLA 0x02 // count last applied (for JOINED node)
105+
#define WSREP_MEMBER_FLAGS_BOOTSTRAP 0x04 // part of prim bootstrap process
106+
#define WSREP_MEMBER_FLAGS_STATELESS 0x08 // arbitrator or otherwise stateless node
107+
108+
/**
109+
* Extended membership structure v2
110+
*/
111+
struct wsrep_membership_v2
112+
{
113+
/**
114+
* Epoch of the membership data (last time it was updated)
115+
*/
116+
wsrep_uuid_t group_uuid;
117+
/**
118+
* Sequence number of the last received (not processed) action
119+
*/
120+
wsrep_seqno_t last_received;
121+
/**
122+
* When the members' data was last updated
123+
*/
124+
wsrep_seqno_t updated;
125+
/**
126+
* Current group state
127+
*/
128+
enum wsrep_view_status state;
129+
/**
130+
* Number of members in the array
131+
*/
132+
size_t num;
133+
/**
134+
* Membership array
135+
*/
136+
struct wsrep_member_info_ext_v2 members[1];
137+
};
138+
91139
/**
92140
* Memory allocation callback for wsrep_get_mmebership_fn() below
93141
*
@@ -111,6 +159,21 @@ typedef wsrep_status_t (*wsrep_get_membership_fn) (
111159
wsrep_allocator_cb allocator,
112160
struct wsrep_membership** membership);
113161

162+
/**
163+
* Query membership v2
164+
*
165+
* @param wsrep provider handle
166+
* @param allocator to use for wsrep_membership struct allocation
167+
* @param membership pointer to pointer to the memebrship structure.
168+
* The structure is allocated by provider and must be freed
169+
* by the caller.
170+
* @return error code of the call
171+
*/
172+
typedef wsrep_status_t (*wsrep_get_membership_v2_fn) (
173+
wsrep_t* wsrep,
174+
wsrep_allocator_cb allocator,
175+
struct wsrep_membership_v2** membership);
176+
114177
/**
115178
* Membership service struct.
116179
* Returned by WSREP_MEMBERSHIP_SERVICE_INIT_FUNC_V1
@@ -120,6 +183,15 @@ struct wsrep_membership_service_v1
120183
wsrep_get_membership_fn get_membership;
121184
};
122185

186+
/**
187+
* Membership service struct.
188+
* Returned by WSREP_MEMBERSHIP_SERVICE_INIT_FUNC_V2
189+
*/
190+
struct wsrep_membership_service_v2
191+
{
192+
wsrep_get_membership_v2_fn get_membership;
193+
};
194+
123195
#ifdef __cplusplus
124196
}
125197
#endif /* __cplusplus */
@@ -131,8 +203,17 @@ typedef
131203
void
132204
(*wsrep_membership_service_v1_deinit_fn)(void);
133205

206+
typedef
207+
wsrep_status_t
208+
(*wsrep_membership_service_v2_init_fn) (struct wsrep_membership_service_v2*);
209+
typedef
210+
void
211+
(*wsrep_membership_service_v2_deinit_fn)(void);
212+
134213
/** must be exported by the provider */
135214
#define WSREP_MEMBERSHIP_SERVICE_V1_INIT_FN "wsrep_init_membership_service_v1"
136215
#define WSREP_MEMBERSHIP_SERVICE_V1_DEINIT_FN "wsrep_deinit_membership_service_v1"
216+
#define WSREP_MEMBERSHIP_SERVICE_V2_INIT_FN "wsrep_init_membership_service_v2"
217+
#define WSREP_MEMBERSHIP_SERVICE_V2_DEINIT_FN "wsrep_deinit_membership_service_v2"
137218

138219
#endif /* WSREP_MEMBERSHIP_SERVICE_H */

0 commit comments

Comments
 (0)