[Openais] evs tests
David Teigland
teigland at redhat.com
Wed Feb 2 22:06:34 PST 2005
Hi, I'm having problems with a couple simple programs that use some evs
library calls described in openais/man. They're attached.
evs-conf.c -- I expect some confchg callbacks but get nothing
evs-msg.c -- the messages work ok but no confchg callbacks
Am I doing something wrong or don't confchg callbacks work?
Thanks
--
Dave Teigland <teigland at redhat.com>
-------------- next part --------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include "../include/evs.h"
static void deliver_fn(struct in_addr source_addr, void *msg, int msg_len)
{
printf("evs_deliver_fn\n");
}
static void confchg_fn(struct in_addr *member_list, int member_list_entries,
struct in_addr *left_list, int left_list_entries,
struct in_addr *joined_list, int joined_list_entries)
{
int i;
printf("evs_confchg_fn\n");
printf("member list\n");
for (i = 0; i < member_list_entries; i++)
printf("%s\n", inet_ntoa(member_list[i]));
printf("left list\n");
for (i = 0; i < left_list_entries; i++)
printf("%s\n", inet_ntoa(left_list[i]));
printf("joined list\n");
for (i = 0; i < joined_list_entries; i++)
printf("%s\n", inet_ntoa(joined_list[i]));
}
evs_callbacks_t callbacks = {
deliver_fn,
confchg_fn
};
int main(int argc, char **argv)
{
unsigned int h;
struct evs_group group;
evs_error_t rv;
rv = evs_initialize(&h, &callbacks);
if (rv != EVS_OK) {
printf("evs_initialize error %d\n", rv);
exit(EXIT_FAILURE);
}
printf("evs_initialize %d\n", rv);
memset(&group, 0, sizeof(struct evs_group));
strcpy(group.key, "foo");
rv = evs_join(&h, &group, 1);
if (rv != EVS_OK) {
printf("evs_join error %d\n", rv);
exit(EXIT_FAILURE);
}
printf("evs_join %d\n", rv);
while (1) {
rv = evs_dispatch(&h, EVS_DISPATCH_ONE);
if (rv != EVS_OK) {
printf("evs_dispatch error %d\n", rv);
exit(EXIT_FAILURE);
}
printf("evs_dispatch %d\n", rv);
}
return 0;
}
-------------- next part --------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include "../include/evs.h"
static void deliver_fn(struct in_addr source_addr, void *msg, int msg_len)
{
printf("%ld: %s\n", time(NULL), (char *)msg);
}
static void confchg_fn(struct in_addr *member_list, int member_list_entries,
struct in_addr *left_list, int left_list_entries,
struct in_addr *joined_list, int joined_list_entries)
{
int i;
printf("evs_confchg_fn\n");
printf("member list\n");
for (i = 0; i < member_list_entries; i++)
printf("%s\n", inet_ntoa(member_list[i]));
printf("left list\n");
for (i = 0; i < left_list_entries; i++)
printf("%s\n", inet_ntoa(left_list[i]));
printf("joined list\n");
for (i = 0; i < joined_list_entries; i++)
printf("%s\n", inet_ntoa(joined_list[i]));
}
evs_callbacks_t callbacks = {
deliver_fn,
confchg_fn
};
int main(int argc, char **argv)
{
unsigned int h, i;
struct evs_group group;
evs_error_t rv;
char *groupname;
char name[32];
char buf[128];
struct iovec iov = { .iov_base = buf, .iov_len = sizeof(buf) };
if (argc < 2) {
printf("usage: %s group_name\n", argv[0]);
exit(EXIT_FAILURE);
}
groupname = argv[1];
memset(name, 0, sizeof(name));
gethostname(name, sizeof(name));
rv = evs_initialize(&h, &callbacks);
if (rv != EVS_OK) {
printf("evs_initialize error %d\n", rv);
exit(EXIT_FAILURE);
}
printf("evs_initialize %d\n", rv);
memset(&group, 0, sizeof(struct evs_group));
strcpy(group.key, groupname);
rv = evs_join(&h, &group, 1);
if (rv != EVS_OK) {
printf("evs_join error %d\n", rv);
exit(EXIT_FAILURE);
}
printf("evs_join %d\n", rv);
for (i = 0; ; i++) {
memset(buf, 0, sizeof(buf));
sprintf(buf, "hello %3d from %s at %ld", i, name, time(NULL));
rv = evs_mcast_groups(&h, EVS_TYPE_AGREED, &group, 1, &iov, 1);
if (rv != EVS_OK)
printf("evs_mcast_groups error %d iter %d\n", rv, i);
rv = evs_dispatch(&h, EVS_DISPATCH_ALL);
if (rv != EVS_OK)
printf("evs_dispatch error %d iter %d\n", rv, i);
sleep(1);
}
return 0;
}
More information about the Openais
mailing list