PERFORCE change 82195 for review

soc-bushman soc-bushman at FreeBSD.org
Thu Aug 18 13:50:46 GMT 2005


http://perforce.freebsd.org/chv.cgi?CH=82195

Change 82195 by soc-bushman at soc-bushman_stinger on 2005/08/18 13:50:00

	cached almost integrated into the nsdsiaptch architecture

Affected files ...

.. //depot/projects/soc2005/nsswitch_cached/cached/Makefile#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/cached.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/cached.conf#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/config.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/config.h#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/debug.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/debug.h#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/log.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/log.h#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/parser.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/parser.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/protocol.c#3 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/protocol.h#3 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/query.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/query.h#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/singletons.c#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cached/singletons.h#4 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/Makefile#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/cachelib.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/hashfuncs.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/hashfuncs.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/hashtable.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/hashtable.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/include/cachelib.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/policies.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/cachelib/policies.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/src/include/nsswitch.h#5 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getpwent.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/Makefile.inc#2 edit
.. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nsdispatch.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/Makefile#2 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client.h#2 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/cached_client_test/cached_client_test.c#2 edit
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/Makefile#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/cached_client.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/cached_client.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/getservent.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/getservent.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/group_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/group_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/host_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/host_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/libc_private.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/namespace.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/netgroup_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/netgroup_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/networks_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/networks_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscache.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscache.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscachedcli.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nscachedcli.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch_test.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsdispatch_test.core#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nss_backends.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nss_tls.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/nsswitch.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/passwd_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/passwd_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/protocols_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/protocols_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/reentrant.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/rpc_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/rpc_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/services_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/services_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/shells_marshal.c#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/shells_marshal.h#1 add
.. //depot/projects/soc2005/nsswitch_cached/tests/nsdispatch_test/un-namespace.h#1 add

Differences ...

==== //depot/projects/soc2005/nsswitch_cached/cached/Makefile#4 (text+ko) ====

@@ -4,7 +4,7 @@
 PROGNAME=cached
 MAN=
 
-SRCS=cached.c debug.c log.c config.c query.c singletons.c protocol.c parser.c
+SRCS=cached.c debug.c log.c config.c query.c mp_ws_query.c mp_rs_query.c singletons.c protocol.c parser.c
 CFLAGS+= -I${.CURDIR}/../
 WARNS?=2
 LDADD+=${.CURDIR}/../cachelib/libcachelib.a -lm

==== //depot/projects/soc2005/nsswitch_cached/cached/cached.c#4 (text+ko) ====

@@ -16,6 +16,12 @@
 #include "query.h"
 #include "singletons.h"
 
+void
+get_time_func(struct timeval *time)
+{
+	gettimeofday(time, NULL);
+}
+
 static void
 print_version_info(void)
 {
@@ -36,7 +42,8 @@
 	TRACE_IN(init_cache_);
 	
 	memset(&params, 0, sizeof(struct cache_params));		
-	params.num_levels = 2;	
+	params.get_time_func = get_time_func;
+//	params.num_levels = 2;	
 	retval = init_cache(&params);
 	
 /*	memset(&entry_params, 0, sizeof(struct common_cache_entry_params));
@@ -149,7 +156,7 @@
 	EV_SET(&eventlist[0], fd, EVFILT_READ, EV_ADD | EV_ONESHOT, 
 		NOTE_LOWAT, qstate->kevent_watermark, qstate);
 	EV_SET(&eventlist[1], fd, EVFILT_TIMER, EV_ADD | EV_ONESHOT,
-		0, config->query_timeout, qstate);
+		0, qstate->timeout.tv_sec * 1000, qstate);
 	res = kevent(env->queue, eventlist, 2, NULL, 0, &timeout);	
 	TRACE_INT(res);
 	TRACE_INT(fd);
@@ -162,17 +169,20 @@
 	struct configuration *config)
 {
 	struct kevent	eventlist[2];
-	struct timespec	timeout;
+	struct timeval	query_timeout;
+	struct timespec	kevent_timeout;
 	int				nevents;
-	int				res;
+	int				eof_res, res;
 	struct query_state	*qstate;
 		
 	TRACE_IN(process_socket_event);
-	memset(&timeout, 0, sizeof(struct timespec));
+	eof_res = event_data->flags & EV_EOF ? 1 : 0;
+	
+	memset(&kevent_timeout, 0, sizeof(struct timespec));
 	TRACE_INT(event_data->ident);
 	EV_SET(&eventlist[0], event_data->ident, EVFILT_TIMER, EV_DELETE,
 		0, 0, NULL);
-	nevents = kevent(env->queue, eventlist, 1, NULL, 0, &timeout);
+	nevents = kevent(env->queue, eventlist, 1, NULL, 0, &kevent_timeout);
 	if (nevents == -1) {
 		if (errno == ENOENT) {
 			/* the timer is already handling this event */
@@ -186,28 +196,57 @@
 			return;
 		}
 	}
+	TRACE_POINT();
+	qstate = (struct query_state *)event_data->udata;		
+/*	if ((qstate->process_func == NULL) || (res != 0)) {
+		TRACE_INT(res);
+		destroy_query_state(qstate);
+		//shutdown(event_data->ident, SHUT_RDWR);
+		close(event_data->ident);
+		TRACE_POINT();
+		TRACE_OUT(process_socket_event);
+		return;
+	}		*/
 	
-	qstate = (struct query_state *)event_data->udata;
-	do {
-		res = qstate->process_func(qstate);
-	} while ((qstate->kevent_watermark == 0) && 
-			(qstate->process_func != NULL) &&
-			(res == 0));
+	TRACE_POINT();
+	if (qstate->kevent_watermark <= event_data->data) {
+		do {
+			res = qstate->process_func(qstate);
+		} while ((qstate->kevent_watermark == 0) && 
+				(qstate->process_func != NULL) &&
+				(res == 0));
+		
+		if (res != 0)
+			qstate->process_func = NULL;
+	} else {
+		/* assuming that socket was closed */
+		qstate->process_func = NULL;
+	}
 
 	TRACE_INT(qstate->kevent_watermark);
 	TRACE_PTR(qstate->process_func);
-	if ((qstate->process_func == NULL) || (res != 0)) {
+	if ((qstate->process_func == NULL) || (eof_res != 0) || (res != 0)) {
 		destroy_query_state(qstate);
+		//shutdown(event_data->ident, SHUT_RDWR);
+		close(event_data->ident);
 		TRACE_POINT();
 		TRACE_OUT(process_socket_event);
 		return;
 	}
+
+	get_time_func(&query_timeout);
+	query_timeout.tv_usec = 0;
+	query_timeout.tv_sec -= qstate->creation_time.tv_sec;
+	if (query_timeout.tv_sec > qstate->timeout.tv_sec)
+		query_timeout.tv_sec = 0;
+	else
+		query_timeout.tv_sec = qstate->timeout.tv_sec - query_timeout.tv_sec;		
 	
 	EV_SET(&eventlist[0], event_data->ident, qstate->kevent_filter,
 		EV_ADD | EV_ONESHOT, NOTE_LOWAT, qstate->kevent_watermark, qstate);
 	EV_SET(&eventlist[1], event_data->ident, EVFILT_TIMER, EV_ADD | EV_ONESHOT,
-		0, config->query_timeout, qstate);	
-	kevent(env->queue, eventlist, 2, NULL, 0, &timeout);
+		0, query_timeout.tv_sec * 1000, qstate);	
+	kevent(env->queue, eventlist, 2, NULL, 0, &kevent_timeout);
 		
 	TRACE_OUT(process_socket_event);
 }
@@ -221,7 +260,9 @@
 	TRACE_IN(process_timer_event);
 	qstate = (struct query_state *)event_data->udata;
 	destroy_query_state(qstate);
-	TRACE_OUT(process_timer_event);
+	//shutdown(event_data->ident, SHUT_RDWR);
+	close(event_data->ident);	
+	TRACE_OUT(process_timer_event);	
 }
 
 static void
@@ -295,7 +336,9 @@
 	/* runtime environment initialization */
 	s_runtime_env = init_runtime_env(s_configuration);
 	
+	//TRACE_OFF();
 	processing_loop(s_cache, s_runtime_env, s_configuration);
+	//TRACE_ON();
 	
 	/* runtime environment destruction */
 	destroy_runtime_env(s_runtime_env);

==== //depot/projects/soc2005/nsswitch_cached/cached/cached.conf#2 (text+ko) ====

@@ -1,17 +1,45 @@
 socket_path = "/tmp/cached"
 
+entry "services" {
+        type = common
+        policy = fifo
+        max_lifetime = 200
+        max_elemsize = 20
+}
+
+entry "services_mp" {
+	type = multipart
+	max_lifetime = 200
+	timeout = 60
+}
+
 entry "users" {
 	type = common
 	policy = fifo
 	max_lifetime = 60
 	max_elemsize = 1000
+	euid = 0
 }
 
+entry "users" {
+        type = common
+        policy = fifo
+        max_lifetime = 60
+        max_elemsize = 1000
+}
+
 entry "groups" {
 	type = common
 	policy = fifo
 	max_lifetime = 60
 	max_elemsize = 1000
+	euid = 0
 }
 
+entry "users_mp" {
+	type = multipart
+	max_lifetime = 60
+	max_elemsize = 1000
+	euid = 1002
+}
 

==== //depot/projects/soc2005/nsswitch_cached/cached/config.c#4 (text+ko) ====

@@ -12,7 +12,7 @@
 
 static	int		configuration_entry_cmp(const void *, const void *);
 static	struct configuration_entry *create_configuration_entry(const char *,
-	uid_t, int, struct cache_entry_params const *);
+	uid_t, int, struct timeval const *, struct cache_entry_params const *);
 static	void	destroy_configuration_entry(struct configuration_entry *);
 static	int		add_configuration_entry(struct configuration *,
 	struct configuration_entry *);
@@ -29,27 +29,34 @@
 	struct configuration_entry	*entry2;
 	int res;
 	
-	entry1 = (struct configuration_entry *)e1;
-	entry2 = (struct configuration_entry *)e2;
+	entry1 = *((struct configuration_entry **)e1);
+	entry2 = *((struct configuration_entry **)e2);
 	
+	//TRACE_STR(entry1->name);
+	//TRACE_INT(entry1->use_desired_euid);
+	//TRACE_INT(entry1->desired_euid);
+	//TRACE_STR(entry2->name);
+	//TRACE_INT(entry2->use_desired_euid);
+	//TRACE_INT(entry2->desired_euid);
 	res = strcmp(entry1->name, entry2->name);
-	if (res == 0) {
+	if (res == 0) {		
 		if ((entry1->use_desired_euid == 0) && (entry2->use_desired_euid != 0))
-			return (-1);
+			res = -1;
 		else if ((entry1->use_desired_euid != 0) && (entry2->use_desired_euid == 0))
-			return (1);
+			res = 1;
 		else if ((entry1->use_desired_euid != 0) && (entry2->use_desired_euid != 0))
-			return (entry1->desired_euid - entry2->desired_euid);
+			res = entry1->desired_euid - entry2->desired_euid;
 		else
-			return (0);
+			res = 0;
 	}
 	
+	//TRACE_INT(res);
 	return (res);
 }
 
 static struct configuration_entry *
 create_configuration_entry(const char *name, uid_t desired_euid, int use_desired_euid,
-	struct cache_entry_params const *params)
+	struct timeval const *timeout, struct cache_entry_params const *params)
 {
 	struct configuration_entry	*retval;
 	size_t	size;
@@ -58,10 +65,10 @@
 	assert(name != NULL);
 	
 	switch (params->entry_type) {
-	case CEL_COMMON:
+	case CET_COMMON:
 		size = sizeof(struct common_cache_entry_params);
 	break;
-	case CEL_MULTIPART:
+	case CET_MULTIPART:
 		size = sizeof(struct mp_cache_entry_params);
 	break;
 	default:
@@ -87,15 +94,15 @@
 	if (use_desired_euid == 0)
 		retval->c_params->entry_name = retval->name;
 	else {
-		size = strlen(name) + floor(log(desired_euid)) + 1;
-		retval->c_params->entry_name = (char *)malloc(size + 1);
+		asprintf(&retval->c_params->entry_name, "%s_%d", name, desired_euid);
 		assert(retval->c_params->entry_name != NULL);
-		memset(retval->c_params->entry_name, 0, size + 1);
-		snprintf(retval->c_params->entry_name, size, "%s_%d", name, desired_euid);
+		TRACE_STR(name);
+		TRACE_STR(retval->c_params->entry_name);		
 	}
 
 	retval->desired_euid = desired_euid;
 	retval->use_desired_euid = use_desired_euid;
+	memcpy(&retval->query_timeout, timeout, sizeof(struct timeval));
 	
 	TRACE_OUT(create_configuration_entry);
 	return (retval);
@@ -237,12 +244,46 @@
 process_parser_mp_group_pair(struct mp_cache_entry_params *params, 
 	struct parser_pair_ *pair, char const **error_str, int *error_line)
 {
-	int	res;
-	
+	char	*endp;
+	long	l;
+	int		res;
+		
 	TRACE_IN(process_parser_mp_group_pair);
-	res = -1;
-	TRACE_OUT(process_parser_mp_group_pair);
-	
+	res = 0;
+	if (strcmp(pair->key, "max_sessions") == 0) {
+		l = strtol(pair->value, &endp, 10);
+		if ((*endp == '\0') && (l >= 0)) {
+			params->max_sessions = l;
+		} else {
+			*error_str = "max_sessions must be a positive integer";
+			*error_line = pair->fline;
+			res = -1;
+		}		
+	} else if (strcmp(pair->key, "max_lifetime") == 0) {
+		l = strtol(pair->value, &endp, 10);
+		if ((*endp == '\0') && (l >= 0)) {
+			params->max_lifetime.tv_sec = l;
+		} else {
+			*error_str = "max_lifetime must be a positive integer";
+			*error_line = pair->fline;
+			res = -1;
+		}
+	} else if (strcmp(pair->key, "max_elemsize") == 0) {
+		l = strtol(pair->value, &endp, 10);
+		if ((*endp == '\0') && (l >= 0)) {
+			params->max_elemsize = l;
+		} else {
+			*error_str = "max_elemsize must be a positive integer";
+			*error_line = pair->fline;
+			res = -1;
+		}
+	} else {
+		*error_str = "unexpected parameter";
+		*error_line = pair->fline;
+		res = -1;
+	}
+
+	TRACE_OUT(process_parser_mp_group_pair);	
 	return (res);
 }
 
@@ -257,6 +298,7 @@
 	struct cache_entry_params	*params;
 	uid_t	desired_euid;
 	int		use_desired_euid;
+	struct timeval	timeout;
 	
 	struct parser_pair_	*pair;
 	size_t	size, i;
@@ -270,6 +312,7 @@
 	params = NULL;
 	desired_euid = -1;
 	use_desired_euid = 0;
+	memset(&timeout, 0, sizeof(struct timeval));
 	size = parser_group_get_pairs_size(group);
 	if (size > 1) {
 		pair = parser_group_get_pair(group, 0);
@@ -281,14 +324,14 @@
 				assert(params != NULL);
 				memset(params, 0, sizeof(struct common_cache_entry_params));
 					
-				params->entry_type = CEL_COMMON;
+				params->entry_type = CET_COMMON;
 			} else if (strcmp(pair->value, "multipart") == 0) {
 				params = (struct cache_entry_params *)malloc(sizeof(
 					struct mp_cache_entry_params));
 				assert(params != NULL);
 				memset(params, 0, sizeof(struct mp_cache_entry_params));
 					
-				params->entry_type = CEL_MULTIPART;
+				params->entry_type = CET_MULTIPART;
 			} else {
 				*error_str = "entry type must be one of 'common' and 'multipart' values";
 				*error_line = pair->fline;
@@ -304,7 +347,7 @@
 		
 		for (i = 1; i < size; ++i) {
 			pair = parser_group_get_pair(group, i);
-			if (params->entry_type == CEL_COMMON) {
+			if (params->entry_type == CET_COMMON) {
 				res = process_parser_common_group_pair((struct common_cache_entry_params *)params, 
 					pair, error_str, error_line);
 			} else {
@@ -315,21 +358,34 @@
 			if (res != 0) {
 				if (strcmp(pair->key, "euid") == 0) {
 					l = strtol(pair->value, &endp, 10);
-					if ((*endp != '\0') && (l >= 0)) {
+					if ((*endp == '\0') && (l >= 0)) {
 						desired_euid = l;
 						use_desired_euid = 1;
 					} else {
+						TRACE_STR(pair->value);
 						*error_str = "euid parameter must be a positive integer";
 						*error_line = pair->fline;
 						res = -1;
 						goto fin;
 					}
+				} else if (strcmp(pair->key, "timeout") == 0) {
+					l = strtol(pair->value, &endp, 10);
+					if ((*endp == '\0') && (l >= 0)) {
+						timeout.tv_sec = l;
+						timeout.tv_usec = 0;
+					} else {
+						*error_str = "timeout must be a positive integer";
+						*error_line = pair->fline;
+						res = -1;
+						goto fin;
+					}
 				} else
 					goto fin;
 			}
 		}
 
-		config_entry = create_configuration_entry(group->name, desired_euid, use_desired_euid, params);
+		config_entry = create_configuration_entry(group->name, desired_euid, 
+			use_desired_euid, &timeout, params);
 		res = add_configuration_entry(config, config_entry);
 		if (res != 0) {
 			*error_str = "duplicate entry";
@@ -373,7 +429,7 @@
 	struct configuration_entry	**retval;
 		
 	TRACE_IN(configuration_find_entry);
-	retval = bsearch(model, config->entries, config->entries_size,
+	retval = bsearch(&model, config->entries, config->entries_size,
 		sizeof(struct configuration_entry *), configuration_entry_cmp);
 	TRACE_OUT(configuration_find_entry);
 		
@@ -421,7 +477,7 @@
 		S_IROTH | S_IWOTH;
 	config->force_unlink = 1;
 	
-	config->query_timeout = 8000;
+	config->query_timeout = 8;
 
 	for (i = 0; i < config->entries_size; ++i)
 		destroy_configuration_entry(config->entries[i]);		

==== //depot/projects/soc2005/nsswitch_cached/cached/config.h#4 (text+ko) ====

@@ -9,8 +9,10 @@
 struct configuration_entry {
 	char	*name;
 	
+	
 	uid_t	desired_euid;
 	int		use_desired_euid;
+	struct timeval	query_timeout;
 	
 	struct cache_entry_params	*c_params;
 };

==== //depot/projects/soc2005/nsswitch_cached/cached/debug.c#4 (text+ko) ====


==== //depot/projects/soc2005/nsswitch_cached/cached/debug.h#4 (text+ko) ====

@@ -5,7 +5,7 @@
 
 #define TRACE_IN(x)		__trace_in(#x, __FILE__, __LINE__)
 #define TRACE_POINT()	__trace_point(__FILE__, __LINE__)
-#define TRACE_MSG(x)	__trage_msg(x, __FILE__, __LINE__)
+#define TRACE_MSG(x)	__trace_msg(x, __FILE__, __LINE__)
 #define TRACE_PTR(p)	__trace_ptr(#p, p, __FILE__, __LINE__)
 #define TRACE_INT(i)	__trace_int(#i, i, __FILE__, __LINE__)
 #define TRACE_STR(s)	__trace_str(#s, s, __FILE__, __LINE__)

==== //depot/projects/soc2005/nsswitch_cached/cached/log.c#4 (text+ko) ====


==== //depot/projects/soc2005/nsswitch_cached/cached/log.h#4 (text+ko) ====


==== //depot/projects/soc2005/nsswitch_cached/cached/parser.c#2 (text+ko) ====

@@ -229,6 +229,7 @@
 		if (pair != NULL)
 			add_parser_group_pair(*group, pair);
 
+		parser_skip_spaces(the_parser);
 		res = parser_expect_char(the_parser, '}');
 		if (res == PARSER_SUCCESS)
 			break;

==== //depot/projects/soc2005/nsswitch_cached/cached/parser.h#2 (text+ko) ====


==== //depot/projects/soc2005/nsswitch_cached/cached/protocol.c#3 (text+ko) ====

@@ -31,6 +31,27 @@
 	case CET_TRANSFORM_RESPONSE:
 		init_cache_transform_response(&element->c_transform_response);
 		break;
+	case CET_MP_WRITE_SESSION_REQUEST:
+		init_cache_mp_write_session_request(&element->c_mp_ws_request);
+		break;
+	case CET_MP_WRITE_SESSION_RESPONSE:
+		init_cache_mp_write_session_response(&element->c_mp_ws_response);
+		break;
+	case CET_MP_WRITE_SESSION_WRITE_REQUEST:
+		init_cache_mp_write_session_write_request(&element->c_mp_ws_write_request);
+		break;
+	case CET_MP_WRITE_SESSION_WRITE_RESPONSE:
+		init_cache_mp_write_session_write_response(&element->c_mp_ws_write_response);
+		break;
+	case CET_MP_READ_SESSION_REQUEST:
+		init_cache_mp_read_session_request(&element->c_mp_rs_request);
+		break;
+	case CET_MP_READ_SESSION_RESPONSE:
+		init_cache_mp_read_session_response(&element->c_mp_rs_response);
+		break;
+	case CET_MP_READ_SESSION_READ_RESPONSE:
+		init_cache_mp_read_session_read_response(&element->c_mp_rs_read_response);
+		break;
 	default:
 		TRACE_OUT(init_comm_element);
 	return;
@@ -63,9 +84,32 @@
 	case CET_TRANSFORM_RESPONSE:
 		finalize_cache_transform_response(&element->c_transform_response);
 		break;
+	case CET_MP_WRITE_SESSION_REQUEST:
+		finalize_cache_mp_write_session_request(&element->c_mp_ws_request);
+		break;
+	case CET_MP_WRITE_SESSION_RESPONSE:
+		finalize_cache_mp_write_session_response(&element->c_mp_ws_response);
+		break;
+	case CET_MP_WRITE_SESSION_WRITE_REQUEST:
+		finalize_cache_mp_write_session_write_request(&element->c_mp_ws_write_request);
+		break;
+	case CET_MP_WRITE_SESSION_WRITE_RESPONSE:
+		finalize_cache_mp_write_session_write_response(&element->c_mp_ws_write_response);
+		break;
+	case CET_MP_READ_SESSION_REQUEST:
+		finalize_cache_mp_read_session_request(&element->c_mp_rs_request);
+		break;
+	case CET_MP_READ_SESSION_RESPONSE:
+		finalize_cache_mp_read_session_response(&element->c_mp_rs_response);
+		break;
+	case CET_MP_READ_SESSION_READ_RESPONSE:
+		finalize_cache_mp_read_session_read_response(&element->c_mp_rs_read_response);
+		break;	
 	default:
 	break;
 	}
+	
+	element->type = CET_UNDEFINED;
 	TRACE_OUT(finalize_comm_element);
 }
 	
@@ -219,3 +263,176 @@
 	TRACE_OUT(get_cache_transform_response);
 	return (&element->c_transform_response);
 }
+
+
+void
+init_cache_mp_write_session_request(struct cache_mp_write_session_request *mp_ws_request)
+{
+	TRACE_IN(init_cache_mp_write_session_request);
+	memset(mp_ws_request, 0, sizeof(struct cache_mp_write_session_request));
+	TRACE_OUT(init_cache_mp_write_session_request);
+}
+
+void 
+finalize_cache_mp_write_session_request(struct cache_mp_write_session_request *mp_ws_request)
+{
+	TRACE_IN(finalize_cache_mp_write_session_request);
+	free(mp_ws_request->entry);
+	TRACE_OUT(finalize_cache_mp_write_session_request);	
+}
+
+struct cache_mp_write_session_request *
+get_cache_mp_write_session_request(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_write_session_request);
+	assert(element->type == CET_MP_WRITE_SESSION_REQUEST);
+	TRACE_OUT(get_cache_mp_write_session_request);	
+	return (&element->c_mp_ws_request);
+}
+
+void
+init_cache_mp_write_session_response(struct cache_mp_write_session_response *mp_ws_response)
+{
+	TRACE_IN(init_cache_mp_write_session_response);
+	memset(mp_ws_response, 0, sizeof(struct cache_mp_write_session_response));
+	TRACE_OUT(init_cache_mp_write_session_response);	
+}
+
+void 
+finalize_cache_mp_write_session_response(struct cache_mp_write_session_response *mp_ws_response)
+{
+	TRACE_IN(finalize_cache_mp_write_session_response);
+	TRACE_OUT(finalize_cache_mp_write_session_response);	
+}
+
+struct cache_mp_write_session_response *
+get_cache_mp_write_session_response(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_write_session_response);
+	assert(element->type == CET_MP_WRITE_SESSION_RESPONSE);
+	TRACE_OUT(get_cache_mp_write_session_response);	
+	return (&element->c_mp_ws_response);
+}
+
+void
+init_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *mp_ws_write_request)
+{
+	TRACE_IN(init_cache_mp_write_session_write_request);
+	memset(mp_ws_write_request, 0, sizeof(struct cache_mp_write_session_write_request));
+	TRACE_OUT(init_cache_mp_write_session_write_response);
+}
+
+void
+finalize_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *mp_ws_write_request)
+{
+	TRACE_IN(finalize_cache_mp_write_session_write_request);
+	free(mp_ws_write_request->data);
+	TRACE_OUT(finalize_cache_mp_write_session_write_request);
+}
+
+struct cache_mp_write_session_write_request *
+get_cache_mp_write_session_write_request(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_write_session_write_request);
+	assert(element->type == CET_MP_WRITE_SESSION_WRITE_REQUEST);
+	TRACE_OUT(get_cache_mp_write_session_write_request);
+	return (&element->c_mp_ws_write_request);	
+}
+
+void
+init_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *mp_ws_write_response)
+{
+	TRACE_IN(init_cache_mp_write_session_write_response);
+	memset(mp_ws_write_response, 0, sizeof(struct cache_mp_write_session_write_response));
+	TRACE_OUT(init_cache_mp_write_session_write_response);
+}
+
+void 
+finalize_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *mp_ws_write_response)
+{
+	TRACE_IN(finalize_cache_mp_write_session_write_response);
+	TRACE_OUT(finalize_cache_mp_write_session_write_response);	
+}
+
+struct cache_mp_write_session_write_response *
+get_cache_mp_write_session_write_response(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_write_session_write_response);
+	assert(element->type == CET_MP_WRITE_SESSION_WRITE_RESPONSE);
+	TRACE_OUT(get_cache_mp_write_session_write_response);
+	return (&element->c_mp_ws_write_response);		
+}
+
+void
+init_cache_mp_read_session_request(struct cache_mp_read_session_request *mp_rs_request)
+{
+	TRACE_IN(init_cache_mp_read_session_request);
+	memset(mp_rs_request, 0, sizeof(struct cache_mp_read_session_request));
+	TRACE_OUT(init_cache_mp_read_session_request);
+}
+
+void 
+finalize_cache_mp_read_session_request(struct cache_mp_read_session_request *mp_rs_request)
+{
+	TRACE_IN(finalize_cache_mp_read_session_request);
+	free(mp_rs_request->entry);
+	TRACE_OUT(finalize_cache_mp_read_session_request);	
+}
+
+struct cache_mp_read_session_request *
+get_cache_mp_read_session_request(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_read_session_request);
+	assert(element->type == CET_MP_READ_SESSION_REQUEST);
+	TRACE_OUT(get_cache_mp_read_session_request);	
+	return (&element->c_mp_rs_request);
+}
+
+void
+init_cache_mp_read_session_response(struct cache_mp_read_session_response *mp_rs_response)
+{
+	TRACE_IN(init_cache_mp_read_session_response);
+	memset(mp_rs_response, 0, sizeof(struct cache_mp_read_session_response));
+	TRACE_OUT(init_cache_mp_read_session_response);	
+}
+
+void 
+finalize_cache_mp_read_session_response(struct cache_mp_read_session_response *mp_rs_response)
+{
+	TRACE_IN(finalize_cache_mp_read_session_response);
+	TRACE_OUT(finalize_cache_mp_read_session_response);	
+}
+
+struct cache_mp_read_session_response *
+get_cache_mp_read_session_response(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_read_session_response);
+	assert(element->type == CET_MP_READ_SESSION_RESPONSE);
+	TRACE_OUT(get_cache_mp_read_session_response);	
+	return (&element->c_mp_rs_response);
+}
+
+void
+init_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *mp_ws_read_response)
+{
+	TRACE_IN(init_cache_mp_read_session_read_response);
+	memset(mp_ws_read_response, 0, sizeof(struct cache_mp_read_session_read_response));
+	TRACE_OUT(init_cache_mp_read_session_read_response);
+}
+
+void 
+finalize_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *mp_rs_read_response)
+{
+	TRACE_IN(finalize_cache_mp_read_session_read_response);
+	free(mp_rs_read_response->data);
+	TRACE_OUT(finalize_cache_mp_read_session_read_response);
+}
+
+struct cache_mp_read_session_read_response *
+get_cache_mp_read_session_read_response(struct comm_element *element)
+{
+	TRACE_IN(get_cache_mp_read_session_read_response);
+	assert(element->type == CET_MP_READ_SESSION_READ_RESPONSE);
+	TRACE_OUT(get_cache_mp_read_session_read_response);
+	return (&element->c_mp_rs_read_response);		
+}

==== //depot/projects/soc2005/nsswitch_cached/cached/protocol.h#3 (text+ko) ====

@@ -34,7 +34,7 @@
 	int		error_code;
 
 	size_t	data_size;		// ignored if error_code is not 0
-	void	*data;			// ignored if error_code is not 0
+	char	*data;			// ignored if error_code is not 0
 };
 
 struct cache_transform_request
@@ -50,6 +50,41 @@
 	int		error_code;
 };
 
+struct cache_mp_write_session_request {
+	size_t	entry_length;
+	char	*entry;
+};
+
+struct cache_mp_write_session_response {
+	int		error_code;
+};
+
+struct cache_mp_write_session_write_request {
+	size_t	data_size;
+	char	*data;
+};
+
+struct cache_mp_write_session_write_response {
+	int		error_code;
+};
+
+struct cache_mp_read_session_request {
+	size_t	entry_length;
+	char	*entry;	
+};
+
+struct cache_mp_read_session_response {
+	int		error_code;
+};
+
+struct cache_mp_read_session_read_response {
+	int		error_code;
+	
+	size_t	data_size;
+	char	*data;
+};
+
+
 enum comm_element_t { 
 	CET_UNDEFINED = 0,
 	CET_WRITE_REQUEST = 1,
@@ -57,7 +92,18 @@
 	CET_READ_REQUEST = 3,
 	CET_READ_RESPONSE = 4,
 	CET_TRANSFORM_REQUEST = 5,
-	CET_TRANSFORM_RESPONSE = 6
+	CET_TRANSFORM_RESPONSE = 6,
+	CET_MP_WRITE_SESSION_REQUEST = 7,
+	CET_MP_WRITE_SESSION_RESPONSE = 8,
+	CET_MP_WRITE_SESSION_WRITE_REQUEST = 9,
+	CET_MP_WRITE_SESSION_WRITE_RESPONSE = 10,
+	CET_MP_WRITE_SESSION_CLOSE_NOTIFICATION = 11,
+	CET_MP_WRITE_SESSION_ABANDON_NOTIFICATION = 12,
+	CET_MP_READ_SESSION_REQUEST = 13,
+	CET_MP_READ_SESSION_RESPONSE = 14,
+	CET_MP_READ_SESSION_READ_REQUEST = 15,
+	CET_MP_READ_SESSION_READ_RESPONSE = 16,
+	CET_MP_READ_SESSION_CLOSE_NOTIFICATION = 17
 };
 
 struct comm_element
@@ -69,6 +115,15 @@
 		struct cache_read_response		c_read_response;
 		struct cache_transform_request	c_transform_request;
 		struct cache_transform_response	c_transform_response;
+			
+		struct cache_mp_write_session_request				c_mp_ws_request;
+		struct cache_mp_write_session_response				c_mp_ws_response;
+		struct cache_mp_write_session_write_request		c_mp_ws_write_request;
+		struct cache_mp_write_session_write_response		c_mp_ws_write_response;
+			
+		struct cache_mp_read_session_request				c_mp_rs_request;
+		struct cache_mp_read_session_response				c_mp_rs_response;
+		struct cache_mp_read_session_read_response			c_mp_rs_read_response;
 	};
 	enum comm_element_t	type;
 };
@@ -99,5 +154,33 @@
 void	init_cache_transform_response(struct cache_transform_response *);
 void	finalize_cache_transform_response(struct cache_transform_response *);
 struct cache_transform_response *get_cache_transform_response(struct comm_element *);
+	
+void	init_cache_mp_write_session_request(struct cache_mp_write_session_request *);
+void 	finalize_cache_mp_write_session_request(struct cache_mp_write_session_request *);
+struct cache_mp_write_session_request *get_cache_mp_write_session_request(struct comm_element *);
+
+void	init_cache_mp_write_session_response(struct cache_mp_write_session_response *);
+void 	finalize_cache_mp_write_session_response(struct cache_mp_write_session_response *);
+struct cache_mp_write_session_response *get_cache_mp_write_session_response(struct comm_element *);
+
+void	init_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *);
+void 	finalize_cache_mp_write_session_write_request(struct cache_mp_write_session_write_request *);
+struct cache_mp_write_session_write_request *get_cache_mp_write_session_write_request(struct comm_element *);
+
+void	init_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *);
+void 	finalize_cache_mp_write_session_write_response(struct cache_mp_write_session_write_response *);
+struct cache_mp_write_session_write_response *get_cache_mp_write_session_write_response(struct comm_element *);
+
+void	init_cache_mp_read_session_request(struct cache_mp_read_session_request *);
+void 	finalize_cache_mp_read_session_request(struct cache_mp_read_session_request *);
+struct cache_mp_read_session_request *get_cache_mp_read_session_request(struct comm_element *);
+
+void	init_cache_mp_read_session_response(struct cache_mp_read_session_response *);
+void 	finalize_cache_mp_read_session_response(struct cache_mp_read_session_response *);
+struct cache_mp_read_session_response *get_cache_mp_read_session_response(struct comm_element *);
+
+void	init_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *);
+void 	finalize_cache_mp_read_session_read_response(struct cache_mp_read_session_read_response *);
+struct cache_mp_read_session_read_response *get_cache_mp_read_session_read_response(struct comm_element *);
 
 #endif

==== //depot/projects/soc2005/nsswitch_cached/cached/query.c#4 (text+ko) ====

@@ -1,18 +1,25 @@
 #include "query.h"
-#include <cachelib/include/cachelib.h>
 #include <sys/socket.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/event.h>
 #include <assert.h>
+#include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include "config.h"
 #include "debug.h"
 #include "log.h"
 #include "singletons.h"
+#include "mp_ws_query.h"
+#include "mp_rs_query.h"
 
+extern	void	get_time_func(struct timeval *);
+
 static	int		on_query_startup(struct query_state *);
 static	void	on_query_destroy(struct query_state *);
+static	int		on_rw_mapper(struct query_state *);
 	
 static	int		on_write_request_read1(struct query_state *);
 static	int		on_write_request_read2(struct query_state *);
@@ -26,8 +33,42 @@
 static	int		on_read_response_write2(struct query_state *);
 	
 static	int		on_transform_request_read1(struct query_state *);
-//static	int		on_transform_request_process(struct query_state *);
-//static	int		on_transform_response_write(struct query_state *);
+/*static	int		on_transform_request_read2(struct query_state *);
+static	int		on_transform_request_process(struct query_state *);
+static	int		on_transform_response_write1(struct query_state *);*/
+
+struct configuration_entry *
+find_config_entry_by_name_and_euid(struct configuration *config, char *name, uid_t euid)
+{
+	struct configuration_entry	config_entry_model;
+	struct configuration_entry	*config_lookup_result;
+	
+	TRACE_IN(finc_config_entry_by_name_and_euid);
+	memset(&config_entry_model, 0, sizeof(struct configuration_entry));
+	config_entry_model.name = name;
+	config_entry_model.desired_euid = euid;
+	config_entry_model.use_desired_euid = 1;
+	
+	config_lookup_result = configuration_find_entry(config, &config_entry_model);
+	if (config_lookup_result == NULL) {
+		config_entry_model.desired_euid = -1;
+		config_entry_model.use_desired_euid = 0;
+		config_lookup_result = configuration_find_entry(config, &config_entry_model);
+	}
+	
+	TRACE_OUT(find_config_entry_by_name_and_euid);
+	return (config_lookup_result);	

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list