62 .
name =
"corosync_cmap",
67 .
name =
"corosync_cfg",
72 .
name =
"corosync_cpg",
77 .
name =
"corosync_pload",
83 .
name =
"corosync_mon",
90 .
name =
"corosync_wd",
96 .
name =
"corosync_quorum",
115static void (*service_unlink_all_complete) (void) = NULL;
130 service_engine = service->
loader();
139 init_result = service_engine->
exec_init_fn (corosync_api);
141 return (init_result);
154 name_sufix = strrchr (service->
name,
'_');
158 name_sufix = (
char*)service->
name;
174 "Service engine loaded: %s [%d]", service_engine->
name, service_engine->
id);
176 if (init_result != NULL) {
177 return (init_result);
183static int service_priority_max(
void)
185 int lpc = 0,
max = 0;
198corosync_service_unlink_and_exit_priority (
201 int *current_priority,
202 int *current_service_engine)
204 unsigned short service_id;
207 for(; *current_priority >= lowest_priority; *current_priority = *current_priority - 1) {
208 for(*current_service_engine = 0;
210 *current_service_engine = *current_service_engine + 1) {
239 "Service engine unloaded: %s",
256static unsigned int service_unlink_and_exit (
258 const char *service_name,
259 unsigned int service_ver)
261 unsigned short service_id;
264 const char *iter_key_name;
267 unsigned int found_service_ver;
268 char *found_service_name;
271 name_sufix = strrchr (service_name,
'_');
275 name_sufix = (
char*)service_name;
279 found_service_name = NULL;
282 res = sscanf(iter_key_name,
"internal_configuration.service.%hu.%s", &service_id, key_name);
287 snprintf(key_name,
ICMAP_KEYNAME_MAXLEN,
"internal_configuration.service.%hu.name", service_id);
294 free(found_service_name);
298 if (service_ver == found_service_ver && strcmp(found_service_name, service_name) == 0) {
299 free(found_service_name);
303 free(found_service_name);
318 "Service engine unloaded: %s",
325 snprintf(key_name,
ICMAP_KEYNAME_MAXLEN,
"internal_configuration.service.%u.handle", service_id);
345 i <
sizeof (default_services) /
sizeof (
struct default_service); i++) {
347 default_services[i].
loader();
350 &default_services[i]);
353 "Service engine '%s' failed to load for reason '%s'",
354 default_services[i].
name,
363static void service_exit_schedwrk_handler (
void *data) {
365 static int current_priority = 0;
366 static int current_service_engine = 0;
367 static int called = 0;
373 "Unloading all Corosync service engines.");
374 current_priority = service_priority_max ();
378 res = corosync_service_unlink_and_exit_priority (
382 ¤t_service_engine);
384 service_unlink_all_complete();
391 service_exit_schedwrk_handler);
396 void (*unlink_all_complete) (
void))
398 static int called = 0;
403 service_unlink_all_complete = unlink_all_complete;
417 service_exit_schedwrk_handler);
427static void service_unlink_and_exit_schedwrk_handler (
void *data)
433 res = service_unlink_and_exit (
444 service_unlink_and_exit_schedwrk_handler);
452 const char *service_name,
453 unsigned int service_ver)
466 service_unlink_and_exit_schedwrk_handler);
#define SERVICE_HANDLER_MAXIMUM_COUNT
#define SERVICES_COUNT_MAX
struct corosync_service_engine * cfg_get_service_engine_ver0(void)
struct corosync_service_engine * cmap_get_service_engine_ver0(void)
struct corosync_service_engine * cpg_get_service_engine_ver0(void)
#define corosync_exit_error(err)
@ COROSYNC_DONE_SERVICE_ENGINE_INIT
cs_error_t icmap_get_uint32(const char *key_name, uint32_t *u32)
cs_error_t icmap_delete(const char *key_name)
Delete key from map.
cs_error_t icmap_set_uint16(const char *key_name, uint16_t value)
cs_error_t icmap_set_string(const char *key_name, const char *value)
icmap_iter_t icmap_iter_init(const char *prefix)
Initialize iterator with given prefix.
const char * icmap_iter_next(icmap_iter_t iter, size_t *value_len, icmap_value_types_t *type)
Return next item in iterator iter.
qb_map_iter_t * icmap_iter_t
Itterator type.
void icmap_iter_finalize(icmap_iter_t iter)
Finalize iterator.
cs_error_t icmap_set_uint64(const char *key_name, uint64_t value)
#define ICMAP_KEYNAME_MAXLEN
Maximum length of key in icmap.
cs_error_t icmap_set_uint32(const char *key_name, uint32_t value)
cs_error_t icmap_get_string(const char *key_name, char **str)
Shortcut for icmap_get for string type.
int32_t cs_ipcs_service_destroy(int32_t service_id)
const char * cs_ipcs_service_init(struct corosync_service_engine *service)
#define LOGSYS_LEVEL_ERROR
#define log_printf(level, format, args...)
#define LOGSYS_LEVEL_NOTICE
qb_loop_t * cs_poll_handle_get(void)
struct corosync_service_engine * mon_get_service_engine_ver0(void)
struct corosync_service_engine * pload_get_service_engine_ver0(void)
unsigned int corosync_service_unlink_and_exit(struct corosync_api_v1 *api, const char *service_name, unsigned int service_ver)
Unlink and exit a service.
int(* schedwrk_cast)(const void *)
unsigned int corosync_service_defaults_link_and_init(struct corosync_api_v1 *corosync_api)
Load all of the default services.
void corosync_service_unlink_all(struct corosync_api_v1 *api, void(*unlink_all_complete)(void))
Unlink and exit all corosync services.
const char * service_stats_rx[SERVICES_COUNT_MAX][SERVICE_HANDLER_MAXIMUM_COUNT]
struct corosync_service_engine * corosync_service[SERVICES_COUNT_MAX]
LOGSYS_DECLARE_SUBSYS("SERV")
char * corosync_service_link_and_init(struct corosync_api_v1 *corosync_api, struct default_service *service)
Link and initialize a service.
const char * service_stats_tx[SERVICES_COUNT_MAX][SERVICE_HANDLER_MAXIMUM_COUNT]
struct corosync_service_engine * vsf_quorum_get_service_engine_ver0(void)
struct corosync_service_engine * wd_get_service_engine_ver0(void)
The corosync_api_v1 struct.
The corosync_service_engine struct.
int(* config_init_fn)(struct corosync_api_v1 *)
char *(* exec_init_fn)(struct corosync_api_v1 *)
int(* exec_exit_fn)(void)
struct corosync_service_engine *(* loader)(void)
struct corosync_api_v1 * api
struct corosync_api_v1 * api
Totem Single Ring Protocol.