Example #1
0
static int load_quorum_instance(struct corosync_api_v1 *api)
{
	const char *error_string;
	int res;

	error_string = votequorum_init(api, quorum_fn);
	if (error_string) {
		fprintf(stderr, "Votequorum init failed: %s\n", error_string);
		return -1;
	}

	engine = votequorum_get_service_engine_ver0();
	error_string = engine->exec_init_fn(api);
	if (error_string) {
		fprintf(stderr, "votequorum exec init failed: %s\n", error_string);
		return -1;
	}

	private_data = malloc(engine->private_data_size);
	if (!private_data) {
		perror("Malloc in child failed");
		return -1;
	}

	res = engine->lib_init_fn(fake_conn);

	return res;
}
Example #2
0
static char *quorum_exec_init_fn (struct corosync_api_v1 *api)
{
	char *quorum_module = NULL;
	char *error;

	corosync_api = api;
	list_init (&lib_trackers_list);
	list_init (&internal_trackers_list);

	/*
	 * Tell corosync we have a quorum engine.
	 */
	api->quorum_initialize(&callins);

	/*
	 * Look for a quorum provider
	 */
	if (icmap_get_string("quorum.provider", &quorum_module) == CS_OK) {
		log_printf (LOGSYS_LEVEL_NOTICE,
			    "Using quorum provider %s", quorum_module);

		error = (char *)"Invalid quorum provider";

		if (strcmp (quorum_module, "corosync_votequorum") == 0) {
			error = votequorum_init (api, quorum_api_set_quorum);
			quorum_type = 1;
		}
		if (strcmp (quorum_module, "corosync_ykd") == 0) {
			error = ykd_init (api, quorum_api_set_quorum);
			quorum_type = 1;
		}
		if (error) {
			log_printf (LOGSYS_LEVEL_CRIT, 
				"Quorum provider: %s failed to initialize.",
				 quorum_module);
			free(quorum_module);
			return (error);
		}
	}

	if (quorum_module) {
		free(quorum_module);
		quorum_module = NULL;
	}

	/*
	 * setting quorum_type and primary_designated in the right order is important
	 * always try to lookup/init a quorum module, then revert back to be quorate
	 */

	if (quorum_type == 0) {
		primary_designated = 1;
	}

	return (NULL);
}