mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-07-23 22:34:21 +00:00
quorum: fix votequorum service initialization
the problem is that votequorum was listed as part of default services. At service_link_and_init, votequorum library and exec were being made available, even when votequorum was not in used at all, creating all kind of problems. By changing the service_link_and_init to be clever, we restore the original and wanted behavior to link the service only when required. This also fixed N*votequorum API calls segfaults, init segfaults and a few dozen other small issues... Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com> Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
This commit is contained in:
parent
af7be8d972
commit
74619e9550
@ -58,12 +58,6 @@
|
||||
|
||||
LOGSYS_DECLARE_SUBSYS ("SERV");
|
||||
|
||||
struct default_service {
|
||||
const char *name;
|
||||
int ver;
|
||||
struct corosync_service_engine *(*loader)(void);
|
||||
};
|
||||
|
||||
static struct default_service default_services[] = {
|
||||
{
|
||||
.name = "corosync_evs",
|
||||
@ -99,11 +93,6 @@ static struct default_service default_services[] = {
|
||||
.loader = wd_get_service_engine_ver0
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.name = "corosync_votequorum",
|
||||
.ver = 0,
|
||||
.loader = votequorum_get_service_engine_ver0
|
||||
},
|
||||
{
|
||||
.name = "corosync_quorum",
|
||||
.ver = 0,
|
||||
|
@ -39,7 +39,11 @@
|
||||
|
||||
struct corosync_api_v1;
|
||||
|
||||
struct default_service;
|
||||
struct default_service {
|
||||
const char *name;
|
||||
int ver;
|
||||
struct corosync_service_engine *(*loader)(void);
|
||||
};
|
||||
|
||||
/**
|
||||
* Link and initialize a service
|
||||
|
@ -58,7 +58,6 @@ LOGSYS_DECLARE_SUBSYS ("VOTEQ");
|
||||
*/
|
||||
|
||||
static struct corosync_api_v1 *corosync_api;
|
||||
static int votequorum_configured = 0;
|
||||
|
||||
/*
|
||||
* votequorum global config vars
|
||||
@ -222,6 +221,8 @@ static quorum_set_quorate_fn_t quorum_callback;
|
||||
* votequorum_exec handler and definitions
|
||||
*/
|
||||
|
||||
static int votequorum_exec_init_fn (struct corosync_api_v1 *api);
|
||||
|
||||
static void message_handler_req_exec_votequorum_nodeinfo (
|
||||
const void *message,
|
||||
unsigned int nodeid);
|
||||
@ -328,6 +329,7 @@ static struct corosync_service_engine votequorum_service_engine = {
|
||||
.lib_exit_fn = quorum_lib_exit_fn,
|
||||
.lib_engine = quorum_lib_service,
|
||||
.lib_engine_count = sizeof (quorum_lib_service) / sizeof (struct corosync_lib_handler),
|
||||
.exec_init_fn = votequorum_exec_init_fn,
|
||||
.exec_engine = votequorum_exec_engine,
|
||||
.exec_engine_count = sizeof (votequorum_exec_engine) / sizeof (struct corosync_exec_handler),
|
||||
.confchg_fn = votequorum_confchg_fn,
|
||||
@ -339,6 +341,14 @@ struct corosync_service_engine *votequorum_get_service_engine_ver0 (void)
|
||||
return (&votequorum_service_engine);
|
||||
}
|
||||
|
||||
static struct default_service votequorum_service[] = {
|
||||
{
|
||||
.name = "corosync_votequorum",
|
||||
.ver = 0,
|
||||
.loader = votequorum_get_service_engine_ver0
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* common/utility macros/functions
|
||||
*/
|
||||
@ -1131,11 +1141,6 @@ static void votequorum_confchg_fn (
|
||||
|
||||
ENTER();
|
||||
|
||||
if (votequorum_configured == 0) {
|
||||
LEAVE();
|
||||
return;
|
||||
}
|
||||
|
||||
if (member_list_entries > 1) {
|
||||
first_trans = 0;
|
||||
}
|
||||
@ -1205,12 +1210,8 @@ cs_error_t votequorum_init(struct corosync_api_v1 *api,
|
||||
|
||||
votequorum_readconfig_static();
|
||||
|
||||
if (votequorum_exec_init_fn(api) != 0) {
|
||||
LEAVE();
|
||||
return CS_ERR_NO_MEMORY;
|
||||
}
|
||||
|
||||
votequorum_configured = 1;
|
||||
corosync_service_link_and_init(corosync_api,
|
||||
&votequorum_service[0]);
|
||||
|
||||
LEAVE();
|
||||
|
||||
|
@ -146,8 +146,6 @@ hdb_handle_t schedwrk_state_send_callback_handle;
|
||||
|
||||
static struct corosync_api_v1 *api;
|
||||
|
||||
static int ykd_configured = 0;
|
||||
|
||||
static void (*ykd_primary_callback_fn) (
|
||||
const unsigned int *view_list,
|
||||
size_t view_list_entries,
|
||||
@ -465,10 +463,6 @@ static void ykd_confchg_fn (
|
||||
{
|
||||
int i;
|
||||
|
||||
if (ykd_configured == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (configuration_type != TOTEM_CONFIGURATION_REGULAR) {
|
||||
return;
|
||||
}
|
||||
@ -525,8 +519,6 @@ cs_error_t ykd_init (
|
||||
return CS_ERR_INVALID_PARAM;
|
||||
}
|
||||
|
||||
ykd_configured = 1;
|
||||
|
||||
api->tpg_init (
|
||||
&ykd_group_handle,
|
||||
ykd_deliver_fn,
|
||||
|
Loading…
Reference in New Issue
Block a user