diff --git a/AUTHORS b/AUTHORS index fb540f24..7ce2b461 100644 --- a/AUTHORS +++ b/AUTHORS @@ -2,7 +2,7 @@ Last Updated Dec 2009 Main Developers --------------- -Steven Dake Maintainer, totem implementation, evs, cfg, +Steven Dake Maintainer, totem implementation, cfg, logsys, service engine architecture, ipc system poll, timers, objdb, hdb, sync, coroapi Christine Caulfield cpg, cfg, quorum, confdb, totem ipv6 support, totem NSS diff --git a/conf/corosync.conf.example b/conf/corosync.conf.example index 46be2ebf..f8569028 100644 --- a/conf/corosync.conf.example +++ b/conf/corosync.conf.example @@ -67,7 +67,7 @@ logging { # timestamps can be annoying). timestamp: on logger_subsys { - subsys: EVS + subsys: QUORUM debug: off } } diff --git a/conf/corosync.conf.example.udpu b/conf/corosync.conf.example.udpu index 37308135..72613a1b 100644 --- a/conf/corosync.conf.example.udpu +++ b/conf/corosync.conf.example.udpu @@ -68,7 +68,7 @@ logging { debug: off timestamp: on logger_subsys { - subsys: EVS + subsys: QUORUM debug: off } } diff --git a/conf/corosync.xml.example b/conf/corosync.xml.example index c7e5a29b..58d28ed0 100644 --- a/conf/corosync.xml.example +++ b/conf/corosync.xml.example @@ -103,7 +103,7 @@ subsys if needed. --> - + diff --git a/configure.ac b/configure.ac index 65ab764e..fbaabacf 100644 --- a/configure.ac +++ b/configure.ac @@ -216,7 +216,6 @@ SONAME="${SOMAJOR}.${SOMINOR}.${SOMICRO}" # specific libraries SONAME LIB_SONAME_IMPORT([cfg]) LIB_SONAME_IMPORT([cpg]) -LIB_SONAME_IMPORT([evs]) LIB_SONAME_IMPORT([quorum]) LIB_SONAME_IMPORT([sam]) LIB_SONAME_IMPORT([votequorum]) diff --git a/corosync.spec.in b/corosync.spec.in index 51fb7ad2..f73e39ee 100644 --- a/corosync.spec.in +++ b/corosync.spec.in @@ -235,7 +235,6 @@ This package contains corosync libraries. %{_libdir}/libcfg.so.* %{_libdir}/libcpg.so.* %{_libdir}/libcmap.so.* -%{_libdir}/libevs.so.* %{_libdir}/libtotem_pg.so.* %{_libdir}/libquorum.so.* %{_libdir}/libvotequorum.so.* @@ -267,7 +266,6 @@ The Corosync Cluster Engine APIs. %{_includedir}/corosync/cmap.h %{_includedir}/corosync/corotypes.h %{_includedir}/corosync/cpg.h -%{_includedir}/corosync/evs.h %{_includedir}/corosync/hdb.h %{_includedir}/corosync/sam.h %{_includedir}/corosync/quorum.h @@ -279,7 +277,6 @@ The Corosync Cluster Engine APIs. %{_libdir}/libcfg.so %{_libdir}/libcpg.so %{_libdir}/libcmap.so -%{_libdir}/libevs.so %{_libdir}/libtotem_pg.so %{_libdir}/libquorum.so %{_libdir}/libvotequorum.so @@ -287,12 +284,10 @@ The Corosync Cluster Engine APIs. %{_libdir}/libcorosync_common.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/cpg_*3* -%{_mandir}/man3/evs_*3* %{_mandir}/man3/quorum_*3* %{_mandir}/man3/votequorum_*3* %{_mandir}/man3/sam_*3* %{_mandir}/man8/cpg_overview.8* -%{_mandir}/man8/evs_overview.8* %{_mandir}/man8/votequorum_overview.8* %{_mandir}/man8/sam_overview.8* %{_mandir}/man3/cmap_*3* diff --git a/exec/Makefile.am b/exec/Makefile.am index b7c6b067..78f3a3ee 100644 --- a/exec/Makefile.am +++ b/exec/Makefile.am @@ -48,7 +48,7 @@ sbin_PROGRAMS = corosync libtotem_pg_a_SOURCES = $(TOTEM_SRC) corosync_SOURCES = vsf_ykd.c coroparse.c vsf_quorum.c sync.c \ - logsys.c cfg.c cmap.c cpg.c evs.c mon.c pload.c \ + logsys.c cfg.c cmap.c cpg.c mon.c pload.c \ votequorum.c wd.c util.c schedwrk.c main.c \ apidef.c quorum.c icmap.c timer.c \ ipc_glue.c service.c mainconfig.c totemconfig.c diff --git a/exec/evs.c b/exec/evs.c deleted file mode 100644 index 6667341e..00000000 --- a/exec/evs.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright (c) 2004-2006 MontaVista Software, Inc. - * Copyright (c) 2006-2012 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "service.h" - -LOGSYS_DECLARE_SUBSYS ("EVS"); - -enum evs_exec_message_req_types { - MESSAGE_REQ_EXEC_EVS_MCAST = 0 -}; - -/* - * Service Interfaces required by service_message_handler struct - */ -static char *evs_exec_init_fn ( - struct corosync_api_v1 *corosync_api); - -static void evs_confchg_fn ( - enum totem_configuration_type configuration_type, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct memb_ring_id *ring_id); - -static void message_handler_req_exec_mcast (const void *msg, unsigned int nodeid); - -static void req_exec_mcast_endian_convert (void *msg); - -static void message_handler_req_evs_join (void *conn, const void *msg); -static void message_handler_req_evs_leave (void *conn, const void *msg); -static void message_handler_req_evs_mcast_joined (void *conn, const void *msg); -static void message_handler_req_evs_mcast_groups (void *conn, const void *msg); -static void message_handler_req_evs_membership_get (void *conn, const void *msg); - -static int evs_lib_init_fn (void *conn); -static int evs_lib_exit_fn (void *conn); - -struct evs_pd { - struct evs_group *groups; - int group_entries; - struct list_head list; - void *conn; -}; - -static struct corosync_api_v1 *api; - -static struct corosync_lib_handler evs_lib_engine[] = -{ - { /* 0 */ - .lib_handler_fn = message_handler_req_evs_join, - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED - }, - { /* 1 */ - .lib_handler_fn = message_handler_req_evs_leave, - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED - }, - { /* 2 */ - .lib_handler_fn = message_handler_req_evs_mcast_joined, - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED - }, - { /* 3 */ - .lib_handler_fn = message_handler_req_evs_mcast_groups, - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED - }, - { /* 4 */ - .lib_handler_fn = message_handler_req_evs_membership_get, - .flow_control = CS_LIB_FLOW_CONTROL_NOT_REQUIRED - } -}; - -static struct corosync_exec_handler evs_exec_engine[] = -{ - { - .exec_handler_fn = message_handler_req_exec_mcast, - .exec_endian_convert_fn = req_exec_mcast_endian_convert - } -}; - -struct corosync_service_engine evs_service_engine = { - .name = "corosync extended virtual synchrony service", - .id = EVS_SERVICE, - .priority = 1, - .private_data_size = sizeof (struct evs_pd), - .flow_control = CS_LIB_FLOW_CONTROL_REQUIRED, - .lib_init_fn = evs_lib_init_fn, - .lib_exit_fn = evs_lib_exit_fn, - .lib_engine = evs_lib_engine, - .lib_engine_count = sizeof (evs_lib_engine) / sizeof (struct corosync_lib_handler), - .exec_engine = evs_exec_engine, - .exec_engine_count = sizeof (evs_exec_engine) / sizeof (struct corosync_exec_handler), - .confchg_fn = evs_confchg_fn, - .exec_init_fn = evs_exec_init_fn, - .exec_dump_fn = NULL -}; - -static DECLARE_LIST_INIT (confchg_notify); - -struct corosync_service_engine *evs_get_service_engine_ver0 (void) -{ - return (&evs_service_engine); -} - -static char *evs_exec_init_fn ( - struct corosync_api_v1 *corosync_api) -{ -#ifdef COROSYNC_SOLARIS - logsys_subsys_init(); -#endif - - api = corosync_api; - - return NULL; -} - -struct res_evs_confchg_callback res_evs_confchg_callback; - -static void evs_confchg_fn ( - enum totem_configuration_type configuration_type, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct memb_ring_id *ring_id) -{ - struct list_head *list; - struct evs_pd *evs_pd; - - /* - * Build configuration change message - */ - res_evs_confchg_callback.header.size = sizeof (struct res_evs_confchg_callback); - res_evs_confchg_callback.header.id = MESSAGE_RES_EVS_CONFCHG_CALLBACK; - res_evs_confchg_callback.header.error = CS_OK; - - memcpy (res_evs_confchg_callback.member_list, - member_list, member_list_entries * sizeof(*member_list)); - res_evs_confchg_callback.member_list_entries = member_list_entries; - - memcpy (res_evs_confchg_callback.left_list, - left_list, left_list_entries * sizeof(*left_list)); - res_evs_confchg_callback.left_list_entries = left_list_entries; - - memcpy (res_evs_confchg_callback.joined_list, - joined_list, joined_list_entries * sizeof(*joined_list)); - res_evs_confchg_callback.joined_list_entries = joined_list_entries; - - /* - * Send configuration change message to every EVS library user - */ - for (list = confchg_notify.next; list != &confchg_notify; list = list->next) { - evs_pd = list_entry (list, struct evs_pd, list); - api->ipc_dispatch_send (evs_pd->conn, - &res_evs_confchg_callback, - sizeof (res_evs_confchg_callback)); - } -} - -static int evs_lib_init_fn (void *conn) -{ - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); - - log_printf (LOGSYS_LEVEL_DEBUG, "Got request to initalize evs service."); - - evs_pd->groups = NULL; - evs_pd->group_entries = 0; - evs_pd->conn = conn; - list_init (&evs_pd->list); - list_add (&evs_pd->list, &confchg_notify); - - api->ipc_dispatch_send (conn, &res_evs_confchg_callback, - sizeof (res_evs_confchg_callback)); - - return (0); -} - -static int evs_lib_exit_fn (void *conn) -{ - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); - - list_del (&evs_pd->list); - return (0); -} - -static void message_handler_req_evs_join (void *conn, const void *msg) -{ - cs_error_t error = CS_OK; - const struct req_lib_evs_join *req_lib_evs_join = msg; - struct res_lib_evs_join res_lib_evs_join; - void *addr; - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); - - if (req_lib_evs_join->group_entries > 50) { - error = CS_ERR_TOO_MANY_GROUPS; - goto exit_error; - } - - addr = realloc (evs_pd->groups, sizeof (struct evs_group) * - (evs_pd->group_entries + req_lib_evs_join->group_entries)); - if (addr == NULL) { - error = CS_ERR_NO_MEMORY; - goto exit_error; - } - evs_pd->groups = addr; - - memcpy (&evs_pd->groups[evs_pd->group_entries], - req_lib_evs_join->groups, - sizeof (struct evs_group) * req_lib_evs_join->group_entries); - - evs_pd->group_entries += req_lib_evs_join->group_entries; - -exit_error: - res_lib_evs_join.header.size = sizeof (struct res_lib_evs_join); - res_lib_evs_join.header.id = MESSAGE_RES_EVS_JOIN; - res_lib_evs_join.header.error = error; - - api->ipc_response_send (conn, &res_lib_evs_join, - sizeof (struct res_lib_evs_join)); -} - -static void message_handler_req_evs_leave (void *conn, const void *msg) -{ - const struct req_lib_evs_leave *req_lib_evs_leave = msg; - struct res_lib_evs_leave res_lib_evs_leave; - cs_error_t error = CS_OK; - int i, j; - int found; - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); - - for (i = 0; i < req_lib_evs_leave->group_entries; i++) { - found = 0; - for (j = 0; j < evs_pd->group_entries;) { - - if (memcmp (&req_lib_evs_leave->groups[i], - &evs_pd->groups[j], sizeof (struct evs_group)) == 0) { - - /* - * Delete entry - */ - memmove (&evs_pd->groups[j], &evs_pd->groups[j + 1], - (evs_pd->group_entries - j - 1) * sizeof (struct evs_group)); - - evs_pd->group_entries -= 1; - - found = 1; - break; - } else { - j++; - } - } - if (found == 0) { - error = CS_ERR_NOT_EXIST; - break; - } - } - - res_lib_evs_leave.header.size = sizeof (struct res_lib_evs_leave); - res_lib_evs_leave.header.id = MESSAGE_RES_EVS_LEAVE; - res_lib_evs_leave.header.error = error; - - api->ipc_response_send (conn, &res_lib_evs_leave, - sizeof (struct res_lib_evs_leave)); -} - -static void message_handler_req_evs_mcast_joined (void *conn, const void *msg) -{ - cs_error_t error = CS_ERR_TRY_AGAIN; - const struct req_lib_evs_mcast_joined *req_lib_evs_mcast_joined = msg; - struct res_lib_evs_mcast_joined res_lib_evs_mcast_joined; - struct iovec req_exec_evs_mcast_iovec[3]; - struct req_exec_evs_mcast req_exec_evs_mcast; - int res; - struct evs_pd *evs_pd = (struct evs_pd *)api->ipc_private_data_get (conn); - - req_exec_evs_mcast.header.size = sizeof (struct req_exec_evs_mcast) + - evs_pd->group_entries * sizeof (struct evs_group) + - req_lib_evs_mcast_joined->msg_len; - - req_exec_evs_mcast.header.id = - SERVICE_ID_MAKE (EVS_SERVICE, MESSAGE_REQ_EXEC_EVS_MCAST); - req_exec_evs_mcast.msg_len = req_lib_evs_mcast_joined->msg_len; - req_exec_evs_mcast.group_entries = evs_pd->group_entries; - - req_exec_evs_mcast_iovec[0].iov_base = (char *)&req_exec_evs_mcast; - req_exec_evs_mcast_iovec[0].iov_len = sizeof (req_exec_evs_mcast); - req_exec_evs_mcast_iovec[1].iov_base = (char *)evs_pd->groups; - req_exec_evs_mcast_iovec[1].iov_len = evs_pd->group_entries * sizeof (struct evs_group); - req_exec_evs_mcast_iovec[2].iov_base = (char *)&req_lib_evs_mcast_joined->msg; - req_exec_evs_mcast_iovec[2].iov_len = req_lib_evs_mcast_joined->msg_len; - - res = api->totem_mcast (req_exec_evs_mcast_iovec, 3, TOTEM_AGREED); - // TODO - if (res == 0) { - error = CS_OK; - } - - res_lib_evs_mcast_joined.header.size = sizeof (struct res_lib_evs_mcast_joined); - res_lib_evs_mcast_joined.header.id = MESSAGE_RES_EVS_MCAST_JOINED; - res_lib_evs_mcast_joined.header.error = error; - - api->ipc_response_send (conn, &res_lib_evs_mcast_joined, - sizeof (struct res_lib_evs_mcast_joined)); -} - -static void message_handler_req_evs_mcast_groups (void *conn, const void *msg) -{ - cs_error_t error = CS_ERR_TRY_AGAIN; - const struct req_lib_evs_mcast_groups *req_lib_evs_mcast_groups = msg; - struct res_lib_evs_mcast_groups res_lib_evs_mcast_groups; - struct iovec req_exec_evs_mcast_iovec[3]; - struct req_exec_evs_mcast req_exec_evs_mcast; - const char *msg_addr; - int res; - - req_exec_evs_mcast.header.size = sizeof (struct req_exec_evs_mcast) + - sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries + - req_lib_evs_mcast_groups->msg_len; - - req_exec_evs_mcast.header.id = - SERVICE_ID_MAKE (EVS_SERVICE, MESSAGE_REQ_EXEC_EVS_MCAST); - req_exec_evs_mcast.msg_len = req_lib_evs_mcast_groups->msg_len; - req_exec_evs_mcast.group_entries = req_lib_evs_mcast_groups->group_entries; - - msg_addr = (const char *)req_lib_evs_mcast_groups + - sizeof (struct req_lib_evs_mcast_groups) + - (sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries); - - req_exec_evs_mcast_iovec[0].iov_base = (char *)&req_exec_evs_mcast; - req_exec_evs_mcast_iovec[0].iov_len = sizeof (req_exec_evs_mcast); - req_exec_evs_mcast_iovec[1].iov_base = (char *)&req_lib_evs_mcast_groups->groups; - req_exec_evs_mcast_iovec[1].iov_len = sizeof (struct evs_group) * req_lib_evs_mcast_groups->group_entries; - req_exec_evs_mcast_iovec[2].iov_base = (void *) msg_addr; /* discard const */ - req_exec_evs_mcast_iovec[2].iov_len = req_lib_evs_mcast_groups->msg_len; - - res = api->totem_mcast (req_exec_evs_mcast_iovec, 3, TOTEM_AGREED); - if (res == 0) { - error = CS_OK; - } - - res_lib_evs_mcast_groups.header.size = sizeof (struct res_lib_evs_mcast_groups); - res_lib_evs_mcast_groups.header.id = MESSAGE_RES_EVS_MCAST_GROUPS; - res_lib_evs_mcast_groups.header.error = error; - - api->ipc_response_send (conn, &res_lib_evs_mcast_groups, - sizeof (struct res_lib_evs_mcast_groups)); -} - -static void message_handler_req_evs_membership_get (void *conn, const void *msg) -{ - struct res_lib_evs_membership_get res_lib_evs_membership_get; - - res_lib_evs_membership_get.header.size = sizeof (struct res_lib_evs_membership_get); - res_lib_evs_membership_get.header.id = MESSAGE_RES_EVS_MEMBERSHIP_GET; - res_lib_evs_membership_get.header.error = CS_OK; - res_lib_evs_membership_get.local_nodeid = api->totem_nodeid_get (); - memcpy (&res_lib_evs_membership_get.member_list, - &res_evs_confchg_callback.member_list, - sizeof (res_lib_evs_membership_get.member_list)); - - res_lib_evs_membership_get.member_list_entries = - res_evs_confchg_callback.member_list_entries; - - api->ipc_response_send (conn, &res_lib_evs_membership_get, - sizeof (struct res_lib_evs_membership_get)); -} - -static void req_exec_mcast_endian_convert (void *msg) -{ - struct req_exec_evs_mcast *req_exec_evs_mcast = - (struct req_exec_evs_mcast *)msg; - req_exec_evs_mcast->group_entries = - swab32 (req_exec_evs_mcast->group_entries); - req_exec_evs_mcast->msg_len = swab32 (req_exec_evs_mcast->msg_len); -} - -static void message_handler_req_exec_mcast ( - const void *msg, - unsigned int nodeid) -{ - const struct req_exec_evs_mcast *req_exec_evs_mcast = msg; - struct res_evs_deliver_callback res_evs_deliver_callback; - const char *msg_addr; - struct list_head *list; - int found = 0; - int i, j; - struct evs_pd *evs_pd; - struct iovec iov[2]; - - res_evs_deliver_callback.header.size = sizeof (struct res_evs_deliver_callback) + - req_exec_evs_mcast->msg_len; - res_evs_deliver_callback.header.id = MESSAGE_RES_EVS_DELIVER_CALLBACK; - res_evs_deliver_callback.header.error = CS_OK; - res_evs_deliver_callback.msglen = req_exec_evs_mcast->msg_len; - - msg_addr = (const char *)req_exec_evs_mcast + sizeof (struct req_exec_evs_mcast) + - (sizeof (struct evs_group) * req_exec_evs_mcast->group_entries); - - for (list = confchg_notify.next; list != &confchg_notify; list = list->next) { - found = 0; - evs_pd = list_entry (list, struct evs_pd, list); - - for (i = 0; i < evs_pd->group_entries; i++) { - for (j = 0; j < req_exec_evs_mcast->group_entries; j++) { - - if (memcmp (&evs_pd->groups[i], &req_exec_evs_mcast->groups[j], - sizeof (struct evs_group)) == 0) { - - found = 1; - break; - } - } - if (found) { - break; - } - } - - if (found) { - res_evs_deliver_callback.local_nodeid = nodeid; - iov[0].iov_base = (void *)&res_evs_deliver_callback; - iov[0].iov_len = sizeof (struct res_evs_deliver_callback); - iov[1].iov_base = (void *) msg_addr; /* discard const */ - iov[1].iov_len = req_exec_evs_mcast->msg_len; - - api->ipc_dispatch_iov_send ( - evs_pd->conn, - iov, - 2); - } - } -} diff --git a/exec/ipc_glue.c b/exec/ipc_glue.c index 9d00d7b5..2aca9886 100644 --- a/exec/ipc_glue.c +++ b/exec/ipc_glue.c @@ -118,9 +118,6 @@ static const char* cs_ipcs_serv_short_name(int32_t service_id) { const char *name; switch (service_id) { - case EVS_SERVICE: - name = "evs"; - break; case CFG_SERVICE: name = "cfg"; break; diff --git a/exec/service.c b/exec/service.c index fed75c3c..c8adae73 100644 --- a/exec/service.c +++ b/exec/service.c @@ -60,9 +60,9 @@ LOGSYS_DECLARE_SUBSYS ("SERV"); static struct default_service default_services[] = { { - .name = "corosync_evs", + .name = "corosync_cmap", .ver = 0, - .loader = evs_get_service_engine_ver0 + .loader = cmap_get_service_engine_ver0 }, { .name = "corosync_cfg", @@ -98,11 +98,6 @@ static struct default_service default_services[] = { .ver = 0, .loader = vsf_quorum_get_service_engine_ver0 }, - { - .name = "corosync_cmap", - .ver = 0, - .loader = cmap_get_service_engine_ver0 - }, }; /* diff --git a/exec/service.h b/exec/service.h index 1d255f32..647d0e02 100644 --- a/exec/service.h +++ b/exec/service.h @@ -85,7 +85,6 @@ struct corosync_service_engine *vsf_quorum_get_service_engine_ver0 (void); struct corosync_service_engine *quorum_get_service_handler_ver0 (void); struct corosync_service_engine *pload_get_service_engine_ver0 (void); struct corosync_service_engine *cfg_get_service_engine_ver0 (void); -struct corosync_service_engine *evs_get_service_engine_ver0 (void); struct corosync_service_engine *cpg_get_service_engine_ver0 (void); struct corosync_service_engine *mon_get_service_engine_ver0 (void); struct corosync_service_engine *wd_get_service_engine_ver0 (void); diff --git a/exec/util.c b/exec/util.c index c0d5c8bb..343759d3 100644 --- a/exec/util.c +++ b/exec/util.c @@ -58,7 +58,6 @@ struct service_names { static struct service_names servicenames[] = { - { "EVS", EVS_SERVICE }, { "CFG", CFG_SERVICE }, { "CPG", CPG_SERVICE }, { "QUORUM", QUORUM_SERVICE }, diff --git a/include/Makefile.am b/include/Makefile.am index 4f01e325..c0566744 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -31,10 +31,10 @@ MAINTAINERCLEANFILES = Makefile.in corosync/config.h.in -CS_H = hdb.h cpg.h cfg.h evs.h corodefs.h \ +CS_H = hdb.h cpg.h cfg.h corodefs.h \ corotypes.h quorum.h votequorum.h sam.h cmap.h -CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_evs.h ipc_quorum.h \ +CS_INTERNAL_H = ipc_cfg.h ipc_cpg.h ipc_quorum.h \ quorum.h sq.h ipc_votequorum.h ipc_cmap.h \ logsys.h coroapi.h icmap.h mar_gen.h list.h swab.h diff --git a/include/corosync/corodefs.h b/include/corosync/corodefs.h index c391c57f..93904f59 100644 --- a/include/corosync/corodefs.h +++ b/include/corosync/corodefs.h @@ -38,7 +38,7 @@ #include enum corosync_service_types { - EVS_SERVICE = 0, + CMAP_SERVICE = 0, CFG_SERVICE = 1, CPG_SERVICE = 2, QUORUM_SERVICE = 3, @@ -46,7 +46,6 @@ enum corosync_service_types { VOTEQUORUM_SERVICE = 5, MON_SERVICE = 6, WD_SERVICE = 7, - CMAP_SERVICE = 8, }; #ifdef HAVE_SMALL_MEMORY_FOOTPRINT diff --git a/include/corosync/evs.h b/include/corosync/evs.h deleted file mode 100644 index 881414c9..00000000 --- a/include/corosync/evs.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2004 MontaVista Software, Inc. - * Copyright (c) 2006-2011 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef COROSYNC_EVS_H_DEFINED -#define COROSYNC_EVS_H_DEFINED - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup corosync Other API services provided by corosync - */ -/** - * @addtogroup evs_corosync - * - * @{ - */ - -typedef uint64_t evs_handle_t; - -typedef enum { - EVS_TYPE_UNORDERED, /* not implemented */ - EVS_TYPE_FIFO, /* same as agreed */ - EVS_TYPE_AGREED, - EVS_TYPE_SAFE /* not implemented */ -} evs_guarantee_t; - -#define TOTEMIP_ADDRLEN (sizeof(struct in6_addr)) - -/** These are the things that get passed around */ -struct evs_group { - char key[32]; -}; - -struct evs_ring_id { - unsigned int nodeid; - unsigned long long seq; -}; - -typedef void (*evs_deliver_fn_t) ( - hdb_handle_t handle, - unsigned int nodeid, - const void *msg, - size_t msg_len); - -typedef void (*evs_confchg_fn_t) ( - hdb_handle_t handle, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct evs_ring_id *ring_id); - -typedef struct { - evs_deliver_fn_t evs_deliver_fn; - evs_confchg_fn_t evs_confchg_fn; -} evs_callbacks_t; - -/** @} */ - -/** - * Create a new evs connection - */ -cs_error_t evs_initialize ( - evs_handle_t *handle, - evs_callbacks_t *callbacks); - -/** - * Close the evs handle - */ -cs_error_t evs_finalize ( - evs_handle_t handle); - -/** - * Get a file descriptor on which to poll. - * - * evs_handle_t is NOT a file descriptor and may not be used directly. - */ -cs_error_t evs_fd_get ( - evs_handle_t handle, - int *fd); - -/** - * Get contexts for a EVS handle - */ -cs_error_t evs_context_get ( - evs_handle_t handle, - void **context); - -/** - * Set contexts for a EVS handle - */ -cs_error_t evs_context_set ( - evs_handle_t handle, - void *context); - -/** - * Dispatch messages and configuration changes - */ -cs_error_t evs_dispatch ( - evs_handle_t handle, - cs_dispatch_flags_t dispatch_types); - -/** - * Join one or more groups. - * - * messages multicasted with evs_mcast_joined will be sent to every - * group that has been joined on handle handle. Any message multicasted - * to a group that has been previously joined will be delivered in evs_dispatch - */ -cs_error_t evs_join ( - evs_handle_t handle, - const struct evs_group *groups, - size_t group_cnt); - -/** - * Leave one or more groups - */ -cs_error_t evs_leave ( - evs_handle_t handle, - const struct evs_group *groups, - size_t group_cnt); - -/** - * Multicast to groups joined with evs_join. - * - * @param handle - * @param guarantee - * @param iovec This iovec will be multicasted to all groups joined with - * the evs_join interface for handle. - * @param iov_len - */ -cs_error_t evs_mcast_joined ( - evs_handle_t handle, - evs_guarantee_t guarantee, - const struct iovec *iovec, - unsigned int iov_len); - -/** - * Multicast to specified groups. - * - * Messages will be multicast to groups specified in the api call and not those - * that have been joined (unless they are in the groups parameter). - */ -cs_error_t evs_mcast_groups ( - evs_handle_t handle, - evs_guarantee_t guarantee, - const struct evs_group *groups, - size_t group_cnt, - const struct iovec *iovec, - unsigned int iov_len); - -/** - * Get membership information from evs - */ -cs_error_t evs_membership_get ( - evs_handle_t handle, - unsigned int *local_nodeid, - unsigned int *member_list, - size_t *member_list_entries); - -#ifdef __cplusplus -} -#endif - -#endif /* COROSYNC_EVS_H_DEFINED */ diff --git a/include/corosync/ipc_evs.h b/include/corosync/ipc_evs.h deleted file mode 100644 index 9df5e5be..00000000 --- a/include/corosync/ipc_evs.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2002-2004 MontaVista Software, Inc. - * Copyright (c) 2006-2012 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef IPC_EVS_H_DEFINED -#define IPC_EVS_H_DEFINED - -#include -#include -#include -#include - -enum req_lib_evs_types { - MESSAGE_REQ_EVS_JOIN = 0, - MESSAGE_REQ_EVS_LEAVE = 1, - MESSAGE_REQ_EVS_MCAST_JOINED = 2, - MESSAGE_REQ_EVS_MCAST_GROUPS = 3, - MESSAGE_REQ_EVS_MEMBERSHIP_GET = 4 -}; - -enum res_lib_evs_types { - MESSAGE_RES_EVS_DELIVER_CALLBACK = 0, - MESSAGE_RES_EVS_CONFCHG_CALLBACK = 1, - MESSAGE_RES_EVS_JOIN = 2, - MESSAGE_RES_EVS_LEAVE = 3, - MESSAGE_RES_EVS_MCAST_JOINED = 4, - MESSAGE_RES_EVS_MCAST_GROUPS = 5, - MESSAGE_RES_EVS_MEMBERSHIP_GET = 6 -}; - -struct res_evs_deliver_callback { - struct qb_ipc_response_header header; - unsigned int local_nodeid; - size_t msglen; - char msg[0]; -}; - -struct res_evs_confchg_callback { - struct qb_ipc_response_header header; - size_t member_list_entries; - size_t left_list_entries; - size_t joined_list_entries; - unsigned int member_list[PROCESSOR_COUNT_MAX]; - unsigned int left_list[PROCESSOR_COUNT_MAX]; - unsigned int joined_list[PROCESSOR_COUNT_MAX]; -}; - -struct req_lib_evs_join { - struct qb_ipc_response_header header; - size_t group_entries; - struct evs_group groups[0]; -}; - -struct res_lib_evs_join { - struct qb_ipc_response_header header; -}; - -struct req_lib_evs_leave { - struct qb_ipc_response_header header; - size_t group_entries; - struct evs_group groups[0]; -}; - -struct res_lib_evs_leave { - struct qb_ipc_response_header header; -}; - -struct req_lib_evs_mcast_joined { - struct qb_ipc_response_header header; - evs_guarantee_t guarantee; - size_t msg_len; - char msg[0]; -}; - -struct res_lib_evs_mcast_joined { - struct qb_ipc_response_header header; -}; - -struct req_lib_evs_mcast_groups { - struct qb_ipc_response_header header; - evs_guarantee_t guarantee; - size_t msg_len; - size_t group_entries; - struct evs_group groups[0]; -}; - -struct res_lib_evs_mcast_groups { - struct qb_ipc_response_header header; -}; - - -struct req_exec_evs_mcast { - struct qb_ipc_request_header header; - size_t group_entries; - size_t msg_len; - struct evs_group groups[0]; - /* data goes here */ -}; - -struct req_lib_evs_membership_get { - struct qb_ipc_request_header header; -}; - -struct res_lib_evs_membership_get { - struct qb_ipc_response_header header; - unsigned int local_nodeid; - unsigned int member_list[PROCESSOR_COUNT_MAX]; - size_t member_list_entries; -}; -#endif /* IPC_EVS_H_DEFINED */ diff --git a/lib/Makefile.am b/lib/Makefile.am index 58c7b788..5883fe66 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -46,13 +46,12 @@ AM_LDFLAGS = -lpthread -L../common_lib -lcorosync_common INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -lib_LIBRARIES = libcpg.a libquorum.a libevs.a libcfg.a \ +lib_LIBRARIES = libcpg.a libquorum.a libcfg.a \ libvotequorum.a libsam.a libcmap.a SHARED_LIBS_SO = $(lib_LIBRARIES:%.a=%.so) libcpg_a_SOURCES = cpg.c libcfg_a_SOURCES = cfg.c -libevs_a_SOURCES = evs.c libquorum_a_SOURCES = quorum.c libvotequorum_a_SOURCES = votequorum.c libcmap_a_SOURCES = cmap.c @@ -62,7 +61,6 @@ libsam_a_SOURCES = sam.c noinst_HEADERS = util.h \ libcfg.versions \ libcpg.versions \ - libevs.versions \ libquorum.versions libvotequorum.versions \ libsam.versions libcmap.versions diff --git a/lib/evs.c b/lib/evs.c deleted file mode 100644 index a5d0b3a8..00000000 --- a/lib/evs.c +++ /dev/null @@ -1,569 +0,0 @@ -/* - * vi: set autoindent tabstop=4 shiftwidth=4 : - - * Copyright (c) 2004-2005 MontaVista Software, Inc. - * Copyright (c) 2006-2012 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ -/* - * Provides an extended virtual synchrony API using the corosync executive - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "util.h" - -struct evs_inst { - qb_ipcc_connection_t *c; - int finalize; - evs_callbacks_t callbacks; - void *context; -}; - -DECLARE_HDB_DATABASE (evs_handle_t_db,NULL); - -/* - * Clean up function for an evt instance (saEvtInitialize) handle - */ - - -/** - * @defgroup evs_coroipcc The extended virtual synchrony passthrough API - * @ingroup coroipcc - * - * @{ - */ -/** - * test - * @param handle The handle of evs initialize - * @param callbacks The callbacks for evs_initialize - * @returns CS_OK - */ -cs_error_t evs_initialize ( - evs_handle_t *handle, - evs_callbacks_t *callbacks) -{ - cs_error_t error; - struct evs_inst *evs_inst; - - error = hdb_error_to_cs(hdb_handle_create (&evs_handle_t_db, sizeof (struct evs_inst), handle)); - if (error != CS_OK) { - goto error_no_destroy; - } - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, *handle, (void *)&evs_inst)); - if (error != CS_OK) { - goto error_destroy; - } - - evs_inst->c = qb_ipcc_connect ("evs", IPC_REQUEST_SIZE); - if (evs_inst->c == NULL) { - error = qb_to_cs_error(-errno); - goto error_put_destroy; - } - - if (callbacks) { - memcpy (&evs_inst->callbacks, callbacks, sizeof (evs_callbacks_t)); - } - - hdb_handle_put (&evs_handle_t_db, *handle); - - return (CS_OK); - -error_put_destroy: - hdb_handle_put (&evs_handle_t_db, *handle); -error_destroy: - hdb_handle_destroy (&evs_handle_t_db, *handle); -error_no_destroy: - return (error); -} - -cs_error_t evs_finalize ( - evs_handle_t handle) -{ - struct evs_inst *evs_inst; - cs_error_t error; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - /* - * Another thread has already started finalizing - */ - if (evs_inst->finalize) { - hdb_handle_put (&evs_handle_t_db, handle); - return (CS_ERR_BAD_HANDLE); - } - - evs_inst->finalize = 1; - - qb_ipcc_disconnect (evs_inst->c); - - hdb_handle_destroy (&evs_handle_t_db, handle); - - hdb_handle_put (&evs_handle_t_db, handle); - - return (CS_OK); -} - -cs_error_t evs_fd_get ( - evs_handle_t handle, - int *fd) -{ - cs_error_t error; - struct evs_inst *evs_inst; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - qb_ipcc_fd_get (evs_inst->c, fd); - - hdb_handle_put (&evs_handle_t_db, handle); - - return (CS_OK); -} - -cs_error_t evs_context_get ( - evs_handle_t handle, - void **context) -{ - cs_error_t error; - struct evs_inst *evs_inst; - - error = hdb_error_to_cs (hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - *context = evs_inst->context; - - hdb_handle_put (&evs_handle_t_db, handle); - - return (CS_OK); -} - -cs_error_t evs_context_set ( - evs_handle_t handle, - void *context) -{ - cs_error_t error; - struct evs_inst *evs_inst; - - error = hdb_error_to_cs (hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - evs_inst->context = context; - - hdb_handle_put (&evs_handle_t_db, handle); - - return (CS_OK); -} - -cs_error_t evs_dispatch ( - evs_handle_t handle, - cs_dispatch_flags_t dispatch_types) -{ - int timeout = -1; - cs_error_t error; - int cont = 1; /* always continue do loop except when set to 0 */ - struct evs_inst *evs_inst; - struct res_evs_confchg_callback *res_evs_confchg_callback; - struct res_evs_deliver_callback *res_evs_deliver_callback; - evs_callbacks_t callbacks; - struct qb_ipc_response_header *dispatch_data; - char dispatch_buf[IPC_DISPATCH_SIZE]; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - /* - * Timeout instantly for CS_DISPATCH_ONE_NONBLOCKING or CS_DISPATCH_ALL and - * wait indefinately for CS_DISPATCH_ONE or CS_DISPATCH_BLOCKING - */ - if (dispatch_types == CS_DISPATCH_ALL || dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { - timeout = 0; - } - - dispatch_data = (struct qb_ipc_response_header *)dispatch_buf; - do { - error = qb_to_cs_error(qb_ipcc_event_recv ( - evs_inst->c, - dispatch_buf, - IPC_DISPATCH_SIZE, - timeout)); - if (error == CS_ERR_BAD_HANDLE) { - error = CS_OK; - goto error_put; - } - if (error == CS_ERR_TRY_AGAIN) { - if (dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { - /* - * Don't mask error - */ - goto error_put; - } - error = CS_OK; - if (dispatch_types == CS_DISPATCH_ALL) { - break; /* exit do while cont is 1 loop */ - } else { - continue; /* next poll */ - } - } - if (error != CS_OK) { - goto error_put; - } - - /* - * Make copy of callbacks, message data, unlock instance, and call callback - * A risk of this dispatch method is that the callback routines may - * operate at the same time that evsFinalize has been called. - */ - memcpy (&callbacks, &evs_inst->callbacks, sizeof (evs_callbacks_t)); - - /* - * Dispatch incoming message - */ - switch (dispatch_data->id) { - case MESSAGE_RES_EVS_DELIVER_CALLBACK: - if (callbacks.evs_deliver_fn == NULL) { - break; - } - - res_evs_deliver_callback = (struct res_evs_deliver_callback *)dispatch_data; - callbacks.evs_deliver_fn ( - handle, - res_evs_deliver_callback->local_nodeid, - &res_evs_deliver_callback->msg, - res_evs_deliver_callback->msglen); - break; - - case MESSAGE_RES_EVS_CONFCHG_CALLBACK: - if (callbacks.evs_confchg_fn == NULL) { - break; - } - - res_evs_confchg_callback = (struct res_evs_confchg_callback *)dispatch_data; - callbacks.evs_confchg_fn ( - handle, - res_evs_confchg_callback->member_list, - res_evs_confchg_callback->member_list_entries, - res_evs_confchg_callback->left_list, - res_evs_confchg_callback->left_list_entries, - res_evs_confchg_callback->joined_list, - res_evs_confchg_callback->joined_list_entries, - NULL); - break; - - default: - error = CS_ERR_LIBRARY; - goto error_put; - break; - } - - /* - * Determine if more messages should be processed - */ - if (dispatch_types == CS_DISPATCH_ONE || dispatch_types == CS_DISPATCH_ONE_NONBLOCKING) { - cont = 0; - } - } while (cont); - -error_put: - hdb_handle_put (&evs_handle_t_db, handle); - return (error); -} - -cs_error_t evs_join ( - evs_handle_t handle, - const struct evs_group *groups, - size_t group_entries) -{ - cs_error_t error; - struct evs_inst *evs_inst; - struct iovec iov[2]; - struct req_lib_evs_join req_lib_evs_join; - struct res_lib_evs_join res_lib_evs_join; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - req_lib_evs_join.header.size = sizeof (struct req_lib_evs_join) + - (group_entries * sizeof (struct evs_group)); - req_lib_evs_join.header.id = MESSAGE_REQ_EVS_JOIN; - req_lib_evs_join.group_entries = group_entries; - - iov[0].iov_base = (void *)&req_lib_evs_join; - iov[0].iov_len = sizeof (struct req_lib_evs_join); - iov[1].iov_base = (void*) groups; /* cast away const */ - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); - - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, 2, - &res_lib_evs_join, sizeof (struct res_lib_evs_join), CS_IPC_TIMEOUT_MS)); - - if (error != CS_OK) { - goto error_exit; - } - - error = res_lib_evs_join.header.error; - -error_exit: - hdb_handle_put (&evs_handle_t_db, handle); - - return (error); -} - -cs_error_t evs_leave ( - evs_handle_t handle, - const struct evs_group *groups, - size_t group_entries) -{ - cs_error_t error; - struct evs_inst *evs_inst; - struct iovec iov[2]; - struct req_lib_evs_leave req_lib_evs_leave; - struct res_lib_evs_leave res_lib_evs_leave; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - req_lib_evs_leave.header.size = sizeof (struct req_lib_evs_leave) + - (group_entries * sizeof (struct evs_group)); - req_lib_evs_leave.header.id = MESSAGE_REQ_EVS_LEAVE; - req_lib_evs_leave.group_entries = group_entries; - - iov[0].iov_base = (void *)&req_lib_evs_leave; - iov[0].iov_len = sizeof (struct req_lib_evs_leave); - iov[1].iov_base = (void *) groups; /* cast away const */ - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); - - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, 2, - &res_lib_evs_leave, sizeof (struct res_lib_evs_leave), CS_IPC_TIMEOUT_MS)); - - if (error != CS_OK) { - goto error_exit; - } - - error = res_lib_evs_leave.header.error; - -error_exit: - hdb_handle_put (&evs_handle_t_db, handle); - - return (error); -} - -cs_error_t evs_mcast_joined ( - evs_handle_t handle, - evs_guarantee_t guarantee, - const struct iovec *iovec, - unsigned int iov_len) -{ - int i; - cs_error_t error; - struct evs_inst *evs_inst; - struct iovec iov[64]; - struct req_lib_evs_mcast_joined req_lib_evs_mcast_joined; - struct res_lib_evs_mcast_joined res_lib_evs_mcast_joined; - size_t msg_len = 0; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - for (i = 0; i < iov_len; i++ ) { - msg_len += iovec[i].iov_len; - } - - req_lib_evs_mcast_joined.header.size = sizeof (struct req_lib_evs_mcast_joined) + - msg_len; - - req_lib_evs_mcast_joined.header.id = MESSAGE_REQ_EVS_MCAST_JOINED; - req_lib_evs_mcast_joined.guarantee = guarantee; - req_lib_evs_mcast_joined.msg_len = msg_len; - - iov[0].iov_base = (void *)&req_lib_evs_mcast_joined; - iov[0].iov_len = sizeof (struct req_lib_evs_mcast_joined); - memcpy (&iov[1], iovec, iov_len * sizeof (struct iovec)); - - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, - iov_len + 1, - &res_lib_evs_mcast_joined, - sizeof (struct res_lib_evs_mcast_joined), CS_IPC_TIMEOUT_MS)); - - if (error != CS_OK) { - goto error_exit; - } - - error = res_lib_evs_mcast_joined.header.error; - -error_exit: - hdb_handle_put (&evs_handle_t_db, handle); - - return (error); -} - -cs_error_t evs_mcast_groups ( - evs_handle_t handle, - evs_guarantee_t guarantee, - const struct evs_group *groups, - size_t group_entries, - const struct iovec *iovec, - unsigned int iov_len) -{ - int i; - cs_error_t error; - struct evs_inst *evs_inst; - struct iovec iov[64]; /* FIXME: what if iov_len > 62 ? use malloc */ - struct req_lib_evs_mcast_groups req_lib_evs_mcast_groups; - struct res_lib_evs_mcast_groups res_lib_evs_mcast_groups; - size_t msg_len = 0; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - for (i = 0; i < iov_len; i++) { - msg_len += iovec[i].iov_len; - } - req_lib_evs_mcast_groups.header.size = sizeof (struct req_lib_evs_mcast_groups) + - (group_entries * sizeof (struct evs_group)) + msg_len; - req_lib_evs_mcast_groups.header.id = MESSAGE_REQ_EVS_MCAST_GROUPS; - req_lib_evs_mcast_groups.guarantee = guarantee; - req_lib_evs_mcast_groups.msg_len = msg_len; - req_lib_evs_mcast_groups.group_entries = group_entries; - - iov[0].iov_base = (void *)&req_lib_evs_mcast_groups; - iov[0].iov_len = sizeof (struct req_lib_evs_mcast_groups); - iov[1].iov_base = (void *) groups; /* cast away const */ - iov[1].iov_len = (group_entries * sizeof (struct evs_group)); - memcpy (&iov[2], iovec, iov_len * sizeof (struct iovec)); - - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, iov, - iov_len + 2, - &res_lib_evs_mcast_groups, - sizeof (struct res_lib_evs_mcast_groups), CS_IPC_TIMEOUT_MS)); - - if (error != CS_OK) { - goto error_exit; - } - - error = res_lib_evs_mcast_groups.header.error; - -error_exit: - hdb_handle_put (&evs_handle_t_db, handle); - - return (error); -} - -cs_error_t evs_membership_get ( - evs_handle_t handle, - unsigned int *local_nodeid, - unsigned int *member_list, - size_t *member_list_entries) -{ - cs_error_t error; - struct evs_inst *evs_inst; - struct iovec iov; - struct req_lib_evs_membership_get req_lib_evs_membership_get; - struct res_lib_evs_membership_get res_lib_evs_membership_get; - - error = hdb_error_to_cs(hdb_handle_get (&evs_handle_t_db, handle, (void *)&evs_inst)); - if (error != CS_OK) { - return (error); - } - - req_lib_evs_membership_get.header.size = sizeof (struct req_lib_evs_membership_get); - req_lib_evs_membership_get.header.id = MESSAGE_REQ_EVS_MEMBERSHIP_GET; - - iov.iov_base = (void *)&req_lib_evs_membership_get; - iov.iov_len = sizeof (struct req_lib_evs_membership_get); - - error = qb_to_cs_error(qb_ipcc_sendv_recv (evs_inst->c, - &iov, - 1, - &res_lib_evs_membership_get, - sizeof (struct res_lib_evs_membership_get), CS_IPC_TIMEOUT_MS)); - - if (error != CS_OK) { - goto error_exit; - } - - error = res_lib_evs_membership_get.header.error; - - /* - * Copy results to caller - */ - if (local_nodeid) { - *local_nodeid = res_lib_evs_membership_get.local_nodeid; - } - *member_list_entries = QB_MIN (*member_list_entries, - res_lib_evs_membership_get.member_list_entries); - if (member_list) { - memcpy (member_list, &res_lib_evs_membership_get.member_list, - *member_list_entries * sizeof (struct in_addr)); - } - -error_exit: - hdb_handle_put (&evs_handle_t_db, handle); - - return (error); -} - -/** @} */ diff --git a/lib/libevs.versions b/lib/libevs.versions deleted file mode 100644 index abcaf50b..00000000 --- a/lib/libevs.versions +++ /dev/null @@ -1,14 +0,0 @@ -# Version and symbol export for libSaClm.so - -COROSYNC_EVS_2.0 { - global: - evs_initialize; - evs_finalize; - evs_fd_get; - evs_dispatch; - evs_join; - evs_leave; - evs_mcast_joined; - evs_mcast_groups; - evs_membership_get; -}; diff --git a/lib/libevs.verso b/lib/libevs.verso deleted file mode 100644 index fcdb2e10..00000000 --- a/lib/libevs.verso +++ /dev/null @@ -1 +0,0 @@ -4.0.0 diff --git a/man/Makefile.am b/man/Makefile.am index 54b1e198..b4be1c6a 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -57,17 +57,6 @@ autogen_man = cpg_context_get.3 \ cpg_iteration_finalize.3 \ cpg_iteration_initialize.3 \ cpg_iteration_next.3 \ - evs_dispatch.3 \ - evs_fd_get.3 \ - evs_finalize.3 \ - evs_initialize.3 \ - evs_join.3 \ - evs_leave.3 \ - evs_mcast_groups.3 \ - evs_mcast_joined.3 \ - evs_membership_get.3 \ - evs_context_get.3 \ - evs_context_set.3 \ quorum_initialize.3 \ quorum_finalize.3 \ quorum_fd_get.3 \ @@ -139,7 +128,6 @@ dist_man_MANS = corosync.conf.5 \ corosync-quorumtool.8 \ corosync_overview.8 \ cpg_overview.8 \ - evs_overview.8 \ quorum_overview.8 \ votequorum_overview.8 \ sam_overview.8 \ diff --git a/man/corosync.conf.5 b/man/corosync.conf.5 index 3fe4da57..7cd1824f 100644 --- a/man/corosync.conf.5 +++ b/man/corosync.conf.5 @@ -214,10 +214,6 @@ of 8982 seems to work for the few large frame devices that have been tested. Some manufacturers claim large frame support when in fact they support frame sizes of 4500 bytes. -Increasing the MTU from 1500 to 8982 doubles throughput performance from 30MB/sec -to 60MB/sec as measured with evsbench with 175000 byte messages with the secauth -directive set to off. - When sending multicast traffic, if the network frequently reconfigures, chances are that some device in the network doesn't support large frames. diff --git a/man/corosync_overview.8 b/man/corosync_overview.8 index fb3766fc..999ced9b 100644 --- a/man/corosync_overview.8 +++ b/man/corosync_overview.8 @@ -56,9 +56,9 @@ Corosync. Corosync is designed for applications to replicate their state to up to 16 processors. The processors all contain a replica of the application state. -The corosync project provides two group message APIs called CPG and EVS. +The corosync project provides a group message API called CPG. The project developers recommend CPG be used for most applications. The CPG -service implmeents a closed group messaging model presenting extended virtual +service implements a closed group messaging model presenting extended virtual synchrony guarantees. To manage conditions where the process executing the CPG application exchange @@ -168,8 +168,7 @@ The default is /etc/corosync/authkey. The corosync executive optionally encrypts all messages sent over the network using the SOBER-128 stream cipher. The corosync executive uses HMAC and SHA1 to authenticate all messages. The corosync executive library uses SOBER-128 -as a pseudo random number generator. The EVS library feeds the PRNG using -the /dev/random Linux device. +as a pseudo random number generator. If membership messages can be captured by intruders, it is possible to execute a denial of service attack on the cluster. In this scenario, the cluster is @@ -191,7 +190,6 @@ None that are known. .SH "SEE ALSO" .BR corosync.conf (5), .BR corosync-keygen (8), -.BR evs_overview (8), .BR cpg_overview (8), .BR sam_overview (8) .PP diff --git a/man/evs_context_get.3.in b/man/evs_context_get.3.in deleted file mode 100644 index 9ef4d3aa..00000000 --- a/man/evs_context_get.3.in +++ /dev/null @@ -1,64 +0,0 @@ -.\"/* -.\" * Copyright (c) 2007 Red Hat, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Patrick Caulfield -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_CONTEXT_GET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_context_get \- Gets the context variable for a EVS instance -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_context_get(evs_handle_t " handle ", void **" context "); -.SH DESCRIPTION -The -.B evs_context_get -function is used to retrieve the context variable previously stored using -.B evs_context_set(3) -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_context_set.3.in b/man/evs_context_set.3.in deleted file mode 100644 index 19d279f1..00000000 --- a/man/evs_context_set.3.in +++ /dev/null @@ -1,66 +0,0 @@ -.\"/* -.\" * Copyright (c) 2007 Red Hat, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Patrick Caulfield -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_CONTEXT_SET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_context_set \- Sets the context variable for a EVS instance -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_context_set(evs_handle_t " handle ", void *" context "); -.SH DESCRIPTION -The -.B evs_context_set -function is used to set the context variable for a evs instance. It has no -meaning insire libevs itself and will not be touched by the library. It can -be retrieved using -.B evs_context_get(3) -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_dispatch.3.in b/man/evs_dispatch.3.in deleted file mode 100644 index 2624a423..00000000 --- a/man/evs_dispatch.3.in +++ /dev/null @@ -1,107 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_DISPATCH 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_dispatch \- Dispatches callbacks from the EVS service -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_dispatch(evs_handle_t " handle ", evs_dispatch_t *" dispatch_types "); -.SH DESCRIPTION -The -.B evs_dispatch -function is used to dispatch configuration changes or messages from the -extended virtual synchrony API. -.PP -Each application may have several connections to the EVS API. Each application -uses the -.I handle -argument to uniquely identify the connection. -.PP -The -.I dispatch_types -argument is used to identify the type of dispatch to execute. The possible types are -defined by the structure: - -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef enum { - CS_DISPATCH_ONE, - CS_DISPATCH_ALL, - CS_DISPATCH_BLOCKING -} cs_dispatch_flags_t; -.ta -.fi -.RE -.IP -.PP -.PP -The dispatch values have the following meanings: -.TP -.B CS_DISPATCH_ONE -Dispatch atleast one callback, blocking until the callback is dispatched. -.TP -.B CS_DISPATCH_ALL -Dispatch all waiting callbacks without blocking to wait for any callbacks. -.TP -.B CS_DISPATCH_BLOCKING -Dispatch all callbacks blocking indefinately. This is used in a threaded -program where a thread is created, and then evs_dispatch() is called immediately -from the created thread to execute callbacks. -.TP -.B CS_DISPATCH_ONE_NONBLOCKING -Dispatch at most one callback. If there is no pending callback, -CS_ERR_TRY_AGAIN is returned. - -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_fd_get.3.in b/man/evs_fd_get.3.in deleted file mode 100644 index ece9036b..00000000 --- a/man/evs_fd_get.3.in +++ /dev/null @@ -1,70 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_FD_GET 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_fd_get \- Dispatches callbacks from the EVS service -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_fd_get(evs_handle_t " handle ", int *" fd "); -.SH DESCRIPTION -The -.B evs_fd_get -function is used to retrieve the file descriptor that may be used with the poll -system call to determine when -.B evs_dispatch(3) -won't block. The -.I handle -argument may not be used directly with -.B poll -because it is not the file descriptor, but instead an internal identifier used -by the EVS library. -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_finalize.3.in b/man/evs_finalize.3.in deleted file mode 100644 index cc2c697f..00000000 --- a/man/evs_finalize.3.in +++ /dev/null @@ -1,66 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_FINALIZE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_finalize \- Terminate a connection to the EVS service -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_finalize(evs_handle_t " handle "); -.SH DESCRIPTION -The -.B evs_finalize -function is used to close a connection to the extended virtual synchrony API. -Once the connection is finalized, the handle may not be used again by applications. -No more callbacks will be dispatched from the -.B evs_dispatch function. -.PP -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_initialize.3.in b/man/evs_initialize.3.in deleted file mode 100644 index c5bd4dd7..00000000 --- a/man/evs_initialize.3.in +++ /dev/null @@ -1,121 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_INITIALIZE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_initialize \- Create a new connection to the EVS service -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_initialize(evs_handle_t *" handle ", evs_callbacks_t *" callbacks "); -.SH DESCRIPTION -The -.B evs_initialize -function is used to initialize a connection to the extended virtual synchrony API. -.PP -Each application may have several connections to the EVS API. Each application -uses the -.I handle -argument to uniquely identify the connection. The -.I handle -argument is then used in other function calls to identify the connection to be used -for communication with the EVS service. -.PP -Every time an EVS event occurs, one of the callbacks specified by the argument -.I callbacks -is called. The callback functions are described by the following type definitions: -.PP -.IP -.RS -.ne 18 -.nf -.ta 4n 20n 32n -typedef void (*evs_deliver_fn_t) ( - unsigned int nodeid, - const void *msg, - size_t msg_len); - -typedef void (*evs_confchg_fn_t) ( - unsigned int *member_list, size_t member_list_entries, - unsigned int *left_list, size_t left_list_entries, - unsigned int *joined_list, size_t joined_list_entries); -.ta -.fi -.RE -.IP -.PP -.PP -The -.I callbacks -argument is of the type: -.IP -.RS -.ne 18 -.nf -.PP -typedef struct { - evs_deliver_fn_t evs_deliver_fn; - evs_confchg_fn_t evs_confchg_fn; -} evs_callbacks_t; -.ta -.fi -.RE -.IP -.PP -When a configuration change occurs or a message is to be delivered one of the callbacks -is called from the -.B evs_dispatch() -function. If a configuration change occurs, -.I evs_confchg_fn -is called. If a delivery of a message occurs, -.I evs_deliver_fn -is called. - -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_join.3.in b/man/evs_join.3.in deleted file mode 100644 index e6338d4c..00000000 --- a/man/evs_join.3.in +++ /dev/null @@ -1,105 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_JOIN 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_join \- Joins one or more groups in the EVS library -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_join(evs_handle_t " handle ", evs_group_t *" groups ", int " group_entries "); -.SH DESCRIPTION -The -.B evs_join -function is used to join one or more groups. When a group is joined, using the -.B evs_mcast_joined(3) -function will multicast to the groups joined in the argument -.I handle. -Messages that are sent to any of the groups joined to the parameter -.I handle -will be delivered by -.B evs_dispatch(3). -.PP -This call may be used more then once on a handle, in which case the joined groups will -be all of the groups passed to the -.B evs_join(3) -function during the lifecycle of the parameter -.I handle. -.PP - -The argument -.I groups -is used to specify the groups to join. A group is a 32 byte key. The key is -not a string, hence, the entire key is used when joining the channel. For that reason -the entire group should be initialized. -.PP -The argument -.I group_entries -specifies how many entries are located in the groups argument. - -The -.I groups -argument is of the type evs_group_t which is defined by the structure: - -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef struct { - char key[32]; -} evs_groups_t; -.ta -.fi -.RE -.IP -.PP -.PP -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_leave.3.in b/man/evs_leave.3.in deleted file mode 100644 index 09ffe8e6..00000000 --- a/man/evs_leave.3.in +++ /dev/null @@ -1,100 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_LEAVE 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_leave \- Leave one or more groups in the EVS library -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_leave(evs_handle_t " handle ", evs_group_t *" groups ", int group_entries); -.SH DESCRIPTION -The -.B evs_leave -function is used to leave one or more groups. The joined groups are used with -.B evs_mcast_joined(3) -function to multicast to the groups joined in the argument -.I handle. -Messages that are sent to any of the joined groups to the parameter -.I handle -will be delivered by -.B evs_dispatch(3). -.PP -This call may be used more then once on a handle. -.PP - -The argument -.I groups -is used to specify the groups to leave. A group is a 32 byte key. The key is -not a string, hence, the entire key is used when leaveing the channel. For that reason -the entire group should be initialized. -.PP -The argument -.I group_entries -specifies how many entries are located in the groups argument. - -The -.I groups -argument is of the type evs_group_t which is defined by the structure: - -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef struct { - char key[32]; -} evs_groups_t; -.ta -.fi -.RE -.IP -.PP -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_mcast_groups.3.in b/man/evs_mcast_groups.3.in deleted file mode 100644 index 4bb5c00f..00000000 --- a/man/evs_mcast_groups.3.in +++ /dev/null @@ -1,164 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_MCAST_GROUPS 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_join \- Multicast a message to selected groups -.SH SYNOPSIS -.B #include -.B #include -.sp -.BI "int evs_mcast_groups(evs_handle_t " handle ", evs_guraantee_t " guarantee ", evs_group_t *" groups ", int group_entries, struct iovec *" iovec ", int " iov_len "); -.SH DESCRIPTION -The -.B evs_mcast_groups(3) -function multicasts a message to all the groups specified in the arguemnt -.I groups. -Messages are delivered to all processors in the system that are described by the current -configuration. -.PP -The argument -.I handle -describes a handle created with -.B evs_initialize(3). -.PP -The argument -.I guarantee -requests a delivery guarantee for the message to be sent. The evs_guarantee_t type is -defined by: -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef enum { - EVS_TYPE_UNORDERED, /* not implemented */ - EVS_TYPE_FIFO, /* same as agreed */ - EVS_TYPE_AGREED, /* implemented */ - EVS_TYPE_SAFE /* not implemented */ -} evs_guarantee_t; -.ta -.fi -.RE -.IP -.PP -.PP -The meanings of the evs_guarantee_t typedef are: -.TP -.B EVS_GUARANTEE_UNORDERED -Messages are guaranteed to be delivered, but with no particular order. This -mode is unimplemented in the EVS library. -.TP -.B EVS_GUARANTEE_FIFO -Messages are guaranteed to be delivered in first sent first delivery order -from one one. In fact, this guarantee is actually the AGREED guarantee. -.TP -.B EVS_GUARANTEE_AGREED -All processors must agree on the order of delivery. If a message is sent -from two or more processors at about the same time, the delivery will occur -in the same order to all processors. -.TP -.B EVS_GUARANTEE_SAFE -All processors must agree on the order of delivery. Further all processors -must have a copy of the message before any delivery takes place. This mode is -unimplemented in the EVS library. -.PP -The -.I groups -argument is of the type evs_group_t which is defined by the structure: - -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef struct { - char key[32]; -} evs_groups_t; -.ta -.fi -.RE -.IP -.PP -.PP -The -.I group_entries -argument describes the number of entries in the -.I group -argument. -.PP - -The -.I iovec -argument describes the scatter/gather list which is used to transmit a message. This -is a standard socket structure described by: -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -struct iovec -{ - void *iov_base; /* Pointer to data. */ - unsigned int iov_len; /* Length of data. */ -}; -.ta -.fi -.RE -.IP -.PP -.PP -The -.I iovlen -argument describes the number of entires in the -.I iovec -argument. - -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_leave (3), -.BR evs_join (3), -.BR evs_mcast_joined (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_mcast_joined.3.in b/man/evs_mcast_joined.3.in deleted file mode 100644 index 4d7d78ed..00000000 --- a/man/evs_mcast_joined.3.in +++ /dev/null @@ -1,137 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_MCAST_JOINED 3 3004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_join \- Multicasts to all groups joined to an handle -.SH SYNOPSIS -.B #include -.B #include -.sp -.BI "int evs_mcast_joined(evs_handle_t " handle ", evs_guraantee_t " guarantee ", struct iovec *" iovec ", int " iov_len "); -.SH DESCRIPTION -The -.B evs_mcast_joined -function is multicast a message to all the groups that have been joined with the -.B evs_join(3) -function for the argument -.I handle. -Messages that are sent to any of the groups joined to the parameter -.I handle -will be delivered to all processors in the system. -.PP -The argument -.I guarantee -requests a delivery guarantee for the message to be sent. The evs_guarantee_t type is -defined by: -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -typedef enum { - EVS_TYPE_UNORDERED, /* not implemented */ - EVS_TYPE_FIFO, /* same as agreed */ - EVS_TYPE_AGREED, /* implemented */ - EVS_TYPE_SAFE /* not implemented */ -} evs_guarantee_t; -.ta -.fi -.RE -.IP -.PP -.PP -The meanings of the evs_guarantee_t typedef are: -.TP -.B EVS_GUARANTEE_UNORDERED -Messages are guaranteed to be delivered, but with no particular order. This -mode is unimplemented in the EVS library. -.TP -.B EVS_GUARANTEE_FIFO -Messages are guaranteed to be delivered in first sent first delivery order -from one one. In fact, this guarantee is actually the AGREED guarantee. -.TP -.B EVS_GUARANTEE_AGREED -All processors must agree on the order of delivery. If a message is sent -from two or more processors at about the same time, the delivery will occur -in the same order to all processors. -.TP -.B EVS_GUARANTEE_SAFE -All processors must agree on the order of delivery. Further all processors -must have a copy of the message before any delivery takes place. This mode is -unimplemented in the EVS library. -.PP -The -.I iovec -argument describes the scatter/gather list which is used to transmit a message. This -is a standard socket structure described by: -.IP -.RS -.ne 18 -.nf -.ta 4n 30n 33n -struct iovec -{ - void *iov_base; /* Pointer to data. */ - unsigned int iov_len; /* Length of data. */ -}; -.ta -.fi -.RE -.IP -.PP -.PP -The -.I iovlen -argument describes the number of entires in the -.I iovec -argument. - -.SH RETURN VALUE -This call returns the CS_OK value if successful, otherwise an error is returned. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_leave (3), -.BR evs_join (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_membership_get.3.in b/man/evs_membership_get.3.in deleted file mode 100644 index 657b2439..00000000 --- a/man/evs_membership_get.3.in +++ /dev/null @@ -1,74 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_JOIN 3 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_join \- Joins one or more groups in the EVS library -.SH SYNOPSIS -.B #include -.sp -.BI "int evs_membership_get(evs_handle_t " handle ", unsigned int *" local_nodeid ", unsigned int *" member_list ", int *" member_list_entries "); -.SH DESCRIPTION -The -.B evs_membership_get -function is used to determine the current processors in the configuration and also -the local processor identifier. -The argument -.I handle -is used to reference the evs instantiation. -The argument -.I local_nodeid -will return the local node id of the processor. -The argument -.I member_list -will return the list of processors in the current membership. -The argument -.I member_list_entries -should be set with the size of member_list and will return the size of the -member_list after return from the function. -.PP -.SH ERRORS -The errors are undocumented. -.SH "SEE ALSO" -.BR evs_overview (8), -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) -.PP diff --git a/man/evs_overview.8 b/man/evs_overview.8 deleted file mode 100644 index d12c0c16..00000000 --- a/man/evs_overview.8 +++ /dev/null @@ -1,185 +0,0 @@ -.\"/* -.\" * Copyright (c) 2004 MontaVista Software, Inc. -.\" * -.\" * All rights reserved. -.\" * -.\" * Author: Steven Dake (sdake@redhat.com) -.\" * -.\" * This software licensed under BSD license, the text of which follows: -.\" * -.\" * Redistribution and use in source and binary forms, with or without -.\" * modification, are permitted provided that the following conditions are met: -.\" * -.\" * - Redistributions of source code must retain the above copyright notice, -.\" * this list of conditions and the following disclaimer. -.\" * - Redistributions in binary form must reproduce the above copyright notice, -.\" * this list of conditions and the following disclaimer in the documentation -.\" * and/or other materials provided with the distribution. -.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its -.\" * contributors may be used to endorse or promote products derived from this -.\" * software without specific prior written permission. -.\" * -.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -.\" * THE POSSIBILITY OF SUCH DAMAGE. -.\" */ -.TH EVS_OVERVIEW 8 2004-08-31 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" -.SH NAME -evs_overview \- EvS Library Overview -.SH OVERVIEW -The EVS library is delivered with the corosync project. This library is used -to create distributed applications that operate properly during partitions, merges, -and faults. -.PP -The library provides a mechanism to: -* handle abstraction for multiple instances of an EVS library in one application -* Deliver messages -* Deliver configuration changes -* join one or more groups -* leave one or more groups -* send messages to one or more groups -* send messages to currently joined groups -.PP -The EVS library implements a messaging model known as Extended Virtual Synchrony. -This model allows one sender to transmit to many receivers using standard UDP/IP. -UDP/IP is unreliable and unordered, so the EVS library applies ordering and reliability -to messages. Hardware multicast is used to avoid duplicated packets with two or more -receivers. Erroneous messages are corrected automatically by the library. -.PP -Certain guarantees are provided by the EVS library. These guarantees are related to -message delivery and configuration change delivery. -.SH DEFINITIONS -.TP -.B multicast -A multicast occurs when a network interface card sends a UDP packet to multiple -receivers simulatenously. -.TP -.B processor -A processor is the entity that executes the extended virtual synchrony algorithms. -.TP -.B configuration -A configuration is the current description of the processors executing the extended -virtual syncrhony algorithm. -.TP -.B configuration change -A configuration change occurs when a new configuration is delivered. -.TP -.B partition -A partition occurs when a configuration splits into two or more configurations, or -a processor fails or is stopped and leaves the configuration. -.TP -.B merge -A merge occurs when two or more configurations join into a larger new configuration. When -a new processor starts up, it is treated as a configuration with only one processor -and a merge occurs. -.TP -.B fifo ordering -A message is FIFO ordered when one sender and one receiver agree on the order of the -messages sent. -.TP -.B agreed ordering -A message is AGREED ordered when all processors agree on the order of the messages sent. -.TP -.B safe ordering -A message is SAFE ordered when all processors agree on the order of messages sent and -those messages are not delivered until all processors have a copy of the message to -deliver. -.TP -.B virtual syncrhony -Virtual syncrhony is obtained when all processors agree on the order of messages -sent and configuration changes sent for each new configuration. -.SH USING VIRTUAL SYNCHRONY -The virtual synchrony messaging model has many benefits for developing distributed -applications. Applications designed using replication have the most benefits. Applications -that must be able to partition and merge also benefit from the virtual synchrony messaging -model. -.PP -All applications receive a copy of transmitted messages even if there are errors on the -transmission media. This allows optimiziations when every processor must receive a copy -of the message for replication. -.PP -All messages are ordered according to agreed ordering. This mechanism allows the avoidance -of race conditions. Consider a lock service implemented over several processors. Two -requests occur at the same time on two seperate processors. The requests are ordered for -every processor in the same order and delivered to the processors. Then all processors -will get request A before request B and can reject request B. Any type of creation or -deletion of a shared data structure can benefit from this mechanism. -.PP -Self delivery ensures that messages that are sent by a processor are also delivered back -to that processor. This allows the processor sending the message to execute logic when -the message is self delivered according to agreed ordering and the virtual synchrony rules. -It also permits all logic to be placed in one message handler instead of two seperate places. -.PP -Virtual Synchrony allows the current configuration to be used to make decisions in partitions -and merges. Since the configuration is sent in the stream of messages to the application, -the application can alter its behavior based upon the configuration changes. -.SH ARCHITECTURE AND ALGORITHM -The EVS library is a thin IPC interface to the corosync executive. The corosync executive -provides services for the SA Forum AIS libraries as well as the EVS library. -.PP -The corosync executive uses a ring protocol and membership protocol to send messages -according to the semantics required by extended virtual synchrony. The ring protocol -creates a virtual ring of processors. A token is rotated around the ring of processors. -When the token is possessed by a processor, that processor may multicast messages to -other processors in the system. -.PP -The token is called the ORF token (for ordering, reliability, flow control). The ORF -token orders all messages by increasing a sequence number every time a message is -multicasted. In this way, an ordering is placed on all messages that all processors -agree to. The token also contains a retransmission list. If a token is received by -a processor that has not yet received a message it should have, a message sequence -number is added to the retransmission list. A processor that has a copy of the message -then retransmits the message. The ORF token provides configuration-wide flow control -by tracking the number of messages sent and limiting the number of messages that may -be sent by one processor on each posession of the token. -.PP -The membership protocol is responsible for ring formation and detecting when a processor -within a ring has failed. If the token fails to make a rotation within a timeout period -known as the token rotation timeout, the membership protocol will form a new ring. -If a new processor starts, it will also form a new ring. Two or more configurations -may be used to form a new ring, allowing many partitions to merge together into one -new configuration. -.SH PERFORMANCE -The EVS library obtains 8.5MB/sec throughput on 100 mbit network links with -many processors. Larger messages obtain better throughput results because the -time to access Ethernet is about the same for a small message as it is for a -larger message. Smaller messages obtain better messages per second, because the -time to send a message is not exactly the same. -.PP -80% of CPU utilization occurs because of encryption and authentication. The corosync -can be built without encryption and authentication for those with no security -requirements and low CPU utilization requirements. Even without encryption or -authentication, under heavy load, processor utilization can reach 25% on 1.5 GHZ -CPU processors. -.PP -The current corosync executive supports 16 processors, however, support for more processors is possible by changing defines in the corosync executive. This is untested, however. -.SH SECURITY -The EVS library encrypts all messages sent over the network using the SOBER-128 -stream cipher. The EVS library uses HMAC and SHA1 to authenticate all messages. -The EVS library uses SOBER-128 as a pseudo random number generator. The EVS -library feeds the PRNG using the /dev/random Linux device. -.SH BUGS -This software is not yet production, so there may still be some bugs. But it appears -there are very few since nobody reports any unknown bugs at this point. -.SH "SEE ALSO" -.BR evs_initialize (3), -.BR evs_finalize (3), -.BR evs_fd_get (3), -.BR evs_dispatch (3), -.BR evs_join (3), -.BR evs_leave (3), -.BR evs_mcast_joined (3), -.BR evs_mcast_groups (3), -.BR evs_mmembership_get (3) -.BR evs_context_get (3) -.BR evs_context_set (3) - -.PP diff --git a/man/index.html b/man/index.html index 793d5117..6ce0ac78 100644 --- a/man/index.html +++ b/man/index.html @@ -138,49 +138,6 @@ Description of the cpg_iteration_finalize interface.
-

EVS service

- - evs_overview(8): - Overview of the evs extended virtual synchrony group - communication toolkit. -
- - evs_initialize(3): - Description of the evs_initialize interface. -
- - evs_finalize(3): - Description of the evs_finalize interface. -
- - evs_dispatch(3): - Description of the evs_dispatch interface. -
- - evs_fd_get(3): - Description of the evs_fd_get interface. -
- - evs_join(3): - Description of the evs_join interface. -
- - evs_leave(3): - Description of the evs_leave interface. -
- - evs_mcast_groups(3): - Description of the evs_mcast_groups interface. -
- - evs_mcast_joined(3): - Description of the evs_mcast_joined interface. -
- - evs_membership_get(3): - Description of the evs_membership_get interface. -
-

SAM service

sam_overview(8): diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am index a3731497..70fce1df 100644 --- a/pkgconfig/Makefile.am +++ b/pkgconfig/Makefile.am @@ -32,7 +32,7 @@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = libtemplate.pc.in corosync.pc.in -LIBS = cfg cpg evs quorum \ +LIBS = cfg cpg quorum \ totem_pg votequorum sam cmap corosync_common target_LIBS = $(LIBS:%=lib%.pc) diff --git a/test/.gitignore b/test/.gitignore index d0b2f276..11771ff8 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,8 +1,6 @@ cpgbench cpgbound cpgverify -evsbench -evsverify logsys_s logsys_t1 logsys_t2 @@ -12,7 +10,6 @@ stress_cpgcontext stress_cpgfdget testcpg testcpg2 -testevs testquorum testsam testvotequorum1 diff --git a/test/Makefile.am b/test/Makefile.am index 647aad2b..a7895f32 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -35,7 +35,7 @@ INCLUDES = -I$(top_builddir)/include/corosync -I$(top_srcdir)/include EXTRA_DIST = ploadstart.sh -noinst_PROGRAMS = testevs evsbench evsverify cpgverify testcpg testcpg2 cpgbench \ +noinst_PROGRAMS = cpgverify testcpg testcpg2 cpgbench \ testquorum testvotequorum1 testvotequorum2 \ stress_cpgfdget stress_cpgcontext cpgbound testsam \ testcpgzc cpgbenchzc testzcgc stress_cpgzc @@ -44,8 +44,6 @@ noinst_SCRIPTS = ploadstart COMMON_OPTS = -L../lib -L../common_lib -Wl,-rpath,../common_lib -testevs_LDADD = -levs $(LIBQB_LIBS) -testevs_LDFLAGS = $(COMMON_OPTS) testcpg_LDADD = -lcpg $(LIBQB_LIBS) testcpg_LDFLAGS = $(COMMON_OPTS) testcpg2_LDADD = -lcpg $(LIBQB_LIBS) @@ -66,14 +64,10 @@ testvotequorum1_LDADD = -lvotequorum $(LIBQB_LIBS) testvotequorum1_LDFLAGS = $(COMMON_OPTS) testvotequorum2_LDADD = -lvotequorum $(LIBQB_LIBS) testvotequorum2_LDFLAGS = $(COMMON_OPTS) -evsverify_LDADD = -levs -ltotem_pg $(LIBQB_LIBS) -evsverify_LDFLAGS = $(COMMON_OPTS) -L../exec cpgverify_LDADD = -lcpg -ltotem_pg $(LIBQB_LIBS) cpgverify_LDFLAGS = $(COMMON_OPTS) -L../exec cpgbound_LDADD = -lcpg $(LIBQB_LIBS) cpgbound_LDFLAGS = $(COMMON_OPTS) -evsbench_LDADD = -levs $(LIBQB_LIBS) -evsbench_LDFLAGS = $(COMMON_OPTS) cpgbench_LDADD = -lcpg $(LIBQB_LIBS) cpgbench_LDFLAGS = $(COMMON_OPTS) cpgbenchzc_LDADD = -lcpg -lcorosync_common $(LIBQB_LIBS) @@ -86,8 +80,7 @@ ploadstart: ploadstart.sh chmod 755 $@ LINT_FILES1:=$(filter-out sa_error.c, $(wildcard *.c)) -LINT_FILES2:=$(filter-out testevsth.c, $(LINT_FILES1)) -LINT_FILES:=$(filter-out testparse.c, $(LINT_FILES2)) +LINT_FILES:=$(filter-out testparse.c, $(LINT_FILES1)) lint: -for f in $(LINT_FILES) ; do echo Splint $$f ; splint $(INCLUDES) $(LINT_FLAGS) $(CFLAGS) $$f ; done diff --git a/test/evsbench.c b/test/evsbench.c deleted file mode 100644 index 786e0192..00000000 --- a/test/evsbench.c +++ /dev/null @@ -1,197 +0,0 @@ -#define _BSD_SOURCE -/* - * Copyright (c) 2004 MontaVista Software, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifdef COROSYNC_SOLARIS -#define timersub(a, b, result) \ - do { \ - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ - (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ - if ((result)->tv_usec < 0) { \ - --(result)->tv_sec; \ - (result)->tv_usec += 1000000; \ - } \ - } while (0) -#endif - -volatile static int alarm_notice = 0; - -static void evs_deliver_fn ( - hdb_handle_t handle, - unsigned int nodeid, - const void *msg, - size_t msg_len) -{ -} - -static void evs_confchg_fn ( - hdb_handle_t handle, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct evs_ring_id *ring_id) -{ - int i; - - printf ("CONFIGURATION CHANGE\n"); - printf ("--------------------\n"); - printf ("New configuration\n"); - for (i = 0; i < member_list_entries; i++) { - printf ("%x\n", member_list[i]); - } - printf ("Members Left:\n"); - for (i = 0; i < left_list_entries; i++) { - printf ("%x\n", left_list[i]); - } - printf ("Members Joined:\n"); - for (i = 0; i < joined_list_entries; i++) { - printf ("%x\n", joined_list[i]); - } -} - -static evs_callbacks_t callbacks = { - evs_deliver_fn, - evs_confchg_fn -}; - -struct evs_group groups[3] = { - { "key1" }, - { "key2" }, - { "key3" } -}; - -static char buffer[200000]; - -static struct iovec iov = { - .iov_base = buffer, - .iov_len = sizeof (buffer) -}; - -static void evs_benchmark (evs_handle_t handle, - int write_size) -{ - struct timeval tv1, tv2, tv_elapsed; - cs_error_t result; - int write_count = 0; - - /* - * Run benchmark for 10 seconds - */ - alarm (10); - gettimeofday (&tv1, NULL); - - iov.iov_len = write_size; - do { - sprintf (buffer, "This is message %d\n", write_count); - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, &iov, 1); - - if (result != CS_ERR_TRY_AGAIN) { - write_count += 1; - } - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } while (alarm_notice == 0); - gettimeofday (&tv2, NULL); - timersub (&tv2, &tv1, &tv_elapsed); - - printf ("%5d Writes ", write_count); - printf ("%5d bytes per write ", write_size); - printf ("%7.3f Seconds runtime ", - (tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0))); - printf ("%9.3f TP/s ", - ((float)write_count) / (tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0))); - printf ("%7.3f MB/s.\n", - ((float)write_count) * ((float)write_size) / ((tv_elapsed.tv_sec + (tv_elapsed.tv_usec / 1000000.0)) * 1000000.0)); - - alarm_notice = 0; -} - -static void sigalrm_handler (int num) -{ - alarm_notice = 1; -} - -static void sigintr_handler (int num) __attribute__((__noreturn__)); -static void sigintr_handler (int num) -{ - exit (1); -} - -int main (void) { - int size; - int i; - cs_error_t result; - evs_handle_t handle; - - signal (SIGALRM, sigalrm_handler); - signal (SIGINT, sigintr_handler); - - - result = evs_initialize (&handle, &callbacks); - printf ("Init result %d\n", result); - result = evs_join (handle, groups, 3); - printf ("Join result %d\n", result); - - size = 1; - - for (i = 0; i < 225; i++) { /* number of repetitions - up to 50k */ - evs_benchmark (handle, size); - /* - * Adjust count to 95% of previous count - * Adjust bytes to write per checkpoint up by 1500 - */ - size += 1000; - } - return (0); -} diff --git a/test/evsverify.c b/test/evsverify.c deleted file mode 100644 index 709bdd6c..00000000 --- a/test/evsverify.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2004 MontaVista Software, Inc. - * Copyright (c) 2006-2007, 2009 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../exec/crypto.h" - -const char *delivery_string; -struct my_msg { - unsigned int msg_size; - unsigned char sha1[20]; - unsigned char buffer[0]; -}; - -static int deliveries = 0; -static void evs_deliver_fn ( - hdb_handle_t handle, - unsigned int nodeid, - const void *m, - size_t msg_len) -{ - const struct my_msg *msg2 = m; - unsigned char sha1_compare[20]; - hash_state sha1_hash; - unsigned int i; - - printf ("API '%s' msg '%s'\n", delivery_string, msg2->buffer); - sha1_init (&sha1_hash); - sha1_process (&sha1_hash, msg2->buffer, msg2->msg_size); - sha1_done (&sha1_hash, sha1_compare); -printf ("SIZE %d HASH: ", msg2->msg_size); -for (i = 0; i < 20; i++) { -printf ("%x", sha1_compare[i]); -} -printf ("\n"); - if (memcmp (sha1_compare, msg2->sha1, 20) != 0) { - printf ("incorrect hash\n"); - exit (1); - } - deliveries++; -} - -static void evs_confchg_fn ( - hdb_handle_t handle, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct evs_ring_id *ring_id) -{ - int i; - - printf ("CONFIGURATION CHANGE\n"); - printf ("--------------------\n"); - printf ("New configuration\n"); - for (i = 0; i < member_list_entries; i++) { - printf ("%x\n", member_list[i]); - } - printf ("Members Left:\n"); - for (i = 0; i < left_list_entries; i++) { - printf ("%x\n", left_list[i]); - } - printf ("Members Joined:\n"); - for (i = 0; i < joined_list_entries; i++) { - printf ("%x\n", joined_list[i]); - } -} - -static evs_callbacks_t callbacks = { - evs_deliver_fn, - evs_confchg_fn -}; - -struct evs_group groups[3] = { - { "key1" }, - { "key2" }, - { "key3" } -}; - -static unsigned char buffer[200000]; -int main (void) -{ - evs_handle_t handle; - cs_error_t result; - unsigned int i = 0, j; - int fd; - unsigned int member_list[32]; - unsigned int local_nodeid; - size_t member_list_entries = 32; - struct my_msg msg; - hash_state sha1_hash; - struct iovec iov[2]; - - result = evs_initialize (&handle, &callbacks); - if (result != CS_OK) { - printf ("Couldn't initialize EVS service %d\n", result); - exit (0); - } - - result = evs_membership_get (handle, &local_nodeid, - member_list, &member_list_entries); - printf ("Current membership from evs_membership_get entries %lu\n", - (unsigned long int) member_list_entries); - for (i = 0; i < member_list_entries; i++) { - printf ("member [%d] is %x\n", i, member_list[i]); - } - printf ("local processor from evs_membership_get %x\n", local_nodeid); - - printf ("Init result %d\n", result); - result = evs_join (handle, groups, 3); - printf ("Join result %d\n", result); - result = evs_leave (handle, &groups[0], 1); - printf ("Leave result %d\n", result); - delivery_string = "evs_mcast_joined"; - - iov[0].iov_base = (void *)&msg; - iov[0].iov_len = sizeof (struct my_msg); - iov[1].iov_base = (void *)buffer; - - /* - * Demonstrate evs_mcast_joined - */ - for (i = 0; i < 1000000000; i++) { - msg.msg_size = 100 + rand() % 100000; - iov[1].iov_len = msg.msg_size; - for (j = 0; j < msg.msg_size; j++) { - buffer[j] = j; - } - sprintf ((char *)buffer, - "evs_mcast_joined: This is message %12d", i); - sha1_init (&sha1_hash); - sha1_process (&sha1_hash, buffer, msg.msg_size); - sha1_done (&sha1_hash, msg.sha1); -try_again_one: - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, - iov, 2); - if (result == CS_ERR_TRY_AGAIN) { - goto try_again_one; - } - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } - - evs_fd_get (handle, &fd); - - evs_finalize (handle); - - return (0); -} diff --git a/test/testevs.c b/test/testevs.c deleted file mode 100644 index 0730ac6b..00000000 --- a/test/testevs.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2004 MontaVista Software, Inc. - * Copyright (c) 2006-2009 Red Hat, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -static const char *delivery_string; - -static int deliveries = 0; -static void evs_deliver_fn ( - hdb_handle_t handle, - unsigned int nodeid, - const void *msg, - size_t msg_len) -{ - const char *buf = msg; - - printf ("API '%s' msg '%s'\n", delivery_string, buf); - deliveries++; -} - -static void evs_confchg_fn ( - hdb_handle_t handle, - const unsigned int *member_list, size_t member_list_entries, - const unsigned int *left_list, size_t left_list_entries, - const unsigned int *joined_list, size_t joined_list_entries, - const struct evs_ring_id *ring_id) -{ - int i; - - printf ("CONFIGURATION CHANGE\n"); - printf ("--------------------\n"); - printf ("New configuration\n"); - for (i = 0; i < member_list_entries; i++) { - printf ("%x\n", member_list[i]); - } - printf ("Members Left:\n"); - for (i = 0; i < left_list_entries; i++) { - printf ("%x\n", left_list[i]); - } - printf ("Members Joined:\n"); - for (i = 0; i < joined_list_entries; i++) { - printf ("%x\n", joined_list[i]); - } -} - -static evs_callbacks_t callbacks = { - evs_deliver_fn, - evs_confchg_fn -}; - -static struct evs_group groups[3] = { - { "key1" }, - { "key2" }, - { "key3" } -}; - -static char buffer[2000]; -struct iovec iov = { - .iov_base = buffer, - .iov_len = sizeof (buffer) -}; - -int main (void) -{ - evs_handle_t handle; - cs_error_t result; - int i = 0; - int fd; - unsigned int member_list[32]; - unsigned int local_nodeid; - size_t member_list_entries = 32; - - qb_log_init("testevs", LOG_USER, LOG_ERR); - qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE); - qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD, - QB_LOG_FILTER_FILE, "*", LOG_TRACE); - qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_ENABLED, QB_TRUE); - qb_log_format_set(QB_LOG_STDERR, "[%p] %f %b"); - - result = evs_initialize (&handle, &callbacks); - if (result != CS_OK) { - printf ("Couldn't initialize EVS service %d\n", result); - exit (0); - } - - result = evs_membership_get (handle, &local_nodeid, - member_list, &member_list_entries); - printf ("Current membership from evs_membership_get entries %lu\n", - (unsigned long int) member_list_entries); - for (i = 0; i < member_list_entries; i++) { - printf ("member [%d] is %x\n", i, member_list[i]); - } - printf ("local processor from evs_membership_get %x\n", local_nodeid); - - printf ("Init result %d\n", result); - result = evs_join (handle, groups, 3); - printf ("Join result %d\n", result); - delivery_string = "evs_mcast_joined"; - - /* - * Demonstrate evs_mcast_joined - */ - for (i = 0; i < 500; i++) { - sprintf (buffer, "evs_mcast_joined: This is message %d", i); -#ifdef COMPILE_OUT - sprintf (buffer, - "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", - i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, - i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i); -#endif -try_again_one: - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, - &iov, 1); - if (result == CS_ERR_TRY_AGAIN) { - goto try_again_one; - } - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } - - do { - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } while (deliveries < 20); - /* - * Demonstrate evs_mcast_joined - */ - delivery_string = "evs_mcast_groups"; - for (i = 0; i < 500; i++) { - sprintf (buffer, "evs_mcast_groups: This is message %d", i); -try_again_two: - result = evs_mcast_groups (handle, EVS_TYPE_AGREED, - &groups[1], 1, &iov, 1); - if (result == CS_ERR_TRY_AGAIN) { - goto try_again_two; - } - - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } - /* - * Flush any pending callbacks - */ - do { - result = evs_dispatch (handle, CS_DISPATCH_ALL); - } while (deliveries < 500); - - evs_fd_get (handle, &fd); - - evs_finalize (handle); - - return (0); -} diff --git a/test/testevsth.c b/test/testevsth.c deleted file mode 100644 index 14da44f9..00000000 --- a/test/testevsth.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2004 MontaVista Software, Inc. - * - * All rights reserved. - * - * Author: Steven Dake (sdake@redhat.com) - * - * This software licensed under BSD license, the text of which follows: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the MontaVista Software, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include "../include/evs.h" - -char *delivery_string; - -#define CALLBACKS 200000 -int callback_count = 0; -void evs_deliver_fn (struct in_addr source_addr, const void *msg, size_t msg_len) -{ -#ifdef PRINT_OUTPUT - char *buf; - buf += 100000; - printf ("Delivery callback\n"); - printf ("callback %d '%s' msg '%s'\n", callback_count, delivery_string, buf); -#endif - callback_count += 1; - if (callback_count % 50 == 0) { - printf ("Callback %d\n", callback_count); - } -} - -void evs_confchg_fn ( - const struct in_addr *member_list, size_t member_list_entries, - const struct in_addr *left_list, size_t left_list_entries, - const struct in_addr *joined_list, size_t joined_list_entries) -{ - int i; - - printf ("CONFIGURATION CHANGE\n"); - printf ("--------------------\n"); - printf ("New configuration\n"); - for (i = 0; i < member_list_entries; i++) { - printf ("%s\n", inet_ntoa (member_list[i])); - } - printf ("Members Left:\n"); - for (i = 0; i < left_list_entries; i++) { - printf ("%s\n", inet_ntoa (left_list[i])); - } - printf ("Members Joined:\n"); - for (i = 0; i < joined_list_entries; i++) { - printf ("%s\n", inet_ntoa (joined_list[i])); - } -} - -evs_callbacks_t callbacks = { - evs_deliver_fn, - evs_confchg_fn -}; - -struct evs_group groups[3] = { - { "key1" }, - { "key2" }, - { "key3" } -}; - -char buffer[1000]; -struct iovec iov = { - .iov_base = buffer, - .iov_len = sizeof (buffer) -}; - -void *th_dispatch (void *arg) -{ - cs_error_t result; - evs_handle_t handle = *(evs_handle_t *)arg; - - printf ("THREAD DISPATCH starting.\n"); - result = evs_dispatch (handle, CS_DISPATCH_BLOCKING); - printf ("THREAD DISPATCH return result is %d\n", result); - return (0); -} - -static struct sched_param sched_param = { - sched_priority: 99 -}; - -int main (void) -{ - evs_handle_t handle; - cs_error_t result; - int i = 0; - pthread_t dispatch_thread; - pthread_attr_t dispatch_thread_attribute; - - result = evs_initialize (&handle, &callbacks); - if (result != CS_OK) { - printf ("Couldn't initialize EVS service %d\n", result); - exit (0); - } - - pthread_attr_init (&dispatch_thread_attribute); - pthread_attr_setschedpolicy (&dispatch_thread_attribute, SCHED_FIFO); - pthread_attr_setschedparam (&dispatch_thread_attribute, &sched_param); - - pthread_create (&dispatch_thread, NULL, th_dispatch, &handle); - - printf ("Init result %d\n", result); - result = evs_join (handle, groups, 3); - printf ("Join result %d\n", result); - result = evs_leave (handle, &groups[0], 1); - printf ("Leave result %d\n", result); - delivery_string = "evs_mcast_joined"; - - /* - * Demonstrate evs_mcast_joined - */ - for (i = 0; i < CALLBACKS/2; i++) { - sprintf (buffer, "evs_mcast_joined: This is message %d", i); -try_again_one: - result = evs_mcast_joined (handle, EVS_TYPE_AGREED, &iov, 1); - if (result == CS_ERR_TRY_AGAIN) { - goto try_again_one; - } else - if (result != CS_OK) { - printf ("Got error result, exiting %d\n", result); - exit (1); - } - } - - /* - * Demonstrate evs_mcast_joined - */ - delivery_string = "evs_mcast_groups"; - for (i = 0; i < CALLBACKS/2; i++) { - sprintf (buffer, "evs_mcast_groups: This is message %d", i); -try_again_two: - result = evs_mcast_groups (handle, EVS_TYPE_AGREED, - &groups[1], 1, &iov, 1); - if (result == CS_ERR_TRY_AGAIN) { - goto try_again_two; - } - } - - /* - * Wait until all callbacks have been executed by dispatch thread - */ - for (;;) { - if (callback_count == CALLBACKS) { - printf ("Test completed successfully\n"); - exit (0); - } - } - return (0); -}