[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