|
|
@@ -178,6 +178,13 @@ struct rrp_algo {
|
|
|
const struct totem_ip_address *member,
|
|
|
unsigned int iface_no);
|
|
|
|
|
|
+ void (*membership_changed) (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id);
|
|
|
};
|
|
|
|
|
|
#define STATUS_STR_LEN 512
|
|
|
@@ -324,6 +331,15 @@ static int none_member_remove (
|
|
|
struct totemrrp_instance *instance,
|
|
|
const struct totem_ip_address *member,
|
|
|
unsigned int iface_no);
|
|
|
+
|
|
|
+static void none_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id);
|
|
|
+
|
|
|
/*
|
|
|
* Passive Replication Forward Declerations
|
|
|
*/
|
|
|
@@ -400,6 +416,15 @@ static int passive_member_remove (
|
|
|
struct totemrrp_instance *instance,
|
|
|
const struct totem_ip_address *member,
|
|
|
unsigned int iface_no);
|
|
|
+
|
|
|
+static void passive_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id);
|
|
|
+
|
|
|
/*
|
|
|
* Active Replication Forward Definitions
|
|
|
*/
|
|
|
@@ -472,6 +497,14 @@ static int active_member_remove (
|
|
|
const struct totem_ip_address *member,
|
|
|
unsigned int iface_no);
|
|
|
|
|
|
+static void active_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id);
|
|
|
+
|
|
|
static void active_timer_expired_token_start (
|
|
|
struct active_instance *active_instance);
|
|
|
|
|
|
@@ -546,7 +579,8 @@ struct rrp_algo none_algo = {
|
|
|
.ring_reenable = none_ring_reenable,
|
|
|
.mcast_recv_empty = none_mcast_recv_empty,
|
|
|
.member_add = none_member_add,
|
|
|
- .member_remove = none_member_remove
|
|
|
+ .member_remove = none_member_remove,
|
|
|
+ .membership_changed = none_membership_changed
|
|
|
};
|
|
|
|
|
|
struct rrp_algo passive_algo = {
|
|
|
@@ -565,7 +599,8 @@ struct rrp_algo passive_algo = {
|
|
|
.ring_reenable = passive_ring_reenable,
|
|
|
.mcast_recv_empty = passive_mcast_recv_empty,
|
|
|
.member_add = passive_member_add,
|
|
|
- .member_remove = passive_member_remove
|
|
|
+ .member_remove = passive_member_remove,
|
|
|
+ .membership_changed = passive_membership_changed
|
|
|
};
|
|
|
|
|
|
struct rrp_algo active_algo = {
|
|
|
@@ -584,7 +619,8 @@ struct rrp_algo active_algo = {
|
|
|
.ring_reenable = active_ring_reenable,
|
|
|
.mcast_recv_empty = active_mcast_recv_empty,
|
|
|
.member_add = active_member_add,
|
|
|
- .member_remove = active_member_remove
|
|
|
+ .member_remove = active_member_remove,
|
|
|
+ .membership_changed = active_membership_changed
|
|
|
};
|
|
|
|
|
|
struct rrp_algo *rrp_algos[] = {
|
|
|
@@ -778,6 +814,16 @@ static int none_member_remove (
|
|
|
return (res);
|
|
|
}
|
|
|
|
|
|
+static void none_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* Passive Replication Implementation
|
|
|
@@ -1220,6 +1266,16 @@ static int passive_member_remove (
|
|
|
return (res);
|
|
|
}
|
|
|
|
|
|
+static void passive_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
static void passive_ring_reenable (
|
|
|
struct totemrrp_instance *instance,
|
|
|
@@ -1592,6 +1648,17 @@ static int active_member_remove (
|
|
|
return (res);
|
|
|
}
|
|
|
|
|
|
+static void active_membership_changed (
|
|
|
+ struct totemrrp_instance *instance,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
static void active_iface_check (struct totemrrp_instance *instance)
|
|
|
{
|
|
|
struct active_instance *rrp_algo_instance = (struct active_instance *)instance->rrp_algo_instance;
|
|
|
@@ -2157,3 +2224,21 @@ int totemrrp_member_remove (
|
|
|
|
|
|
return (res);
|
|
|
}
|
|
|
+
|
|
|
+void totemrrp_membership_changed (
|
|
|
+ void *rrp_context,
|
|
|
+ enum totem_configuration_type configuration_type,
|
|
|
+ const struct srp_addr *member_list, size_t member_list_entries,
|
|
|
+ const struct srp_addr *left_list, size_t left_list_entries,
|
|
|
+ const struct srp_addr *joined_list, size_t joined_list_entries,
|
|
|
+ const struct memb_ring_id *ring_id)
|
|
|
+{
|
|
|
+ struct totemrrp_instance *instance = (struct totemrrp_instance *)rrp_context;
|
|
|
+
|
|
|
+ instance->rrp_algo->membership_changed (instance,
|
|
|
+ configuration_type,
|
|
|
+ member_list, member_list_entries,
|
|
|
+ left_list, left_list_entries,
|
|
|
+ joined_list, joined_list_entries,
|
|
|
+ ring_id);
|
|
|
+}
|