svn commit: r219900 - head/sbin/hastd
Pawel Jakub Dawidek
pjd at FreeBSD.org
Wed Mar 23 11:09:04 UTC 2011
Author: pjd
Date: Wed Mar 23 11:09:04 2011
New Revision: 219900
URL: http://svn.freebsd.org/changeset/base/219900
Log:
Don't create socketpair for connection forwarding between parent and secondary.
Secondary doesn't need to connect anywhere.
MFC after: 1 week
Modified:
head/sbin/hastd/hastd.c
head/sbin/hastd/secondary.c
Modified: head/sbin/hastd/hastd.c
==============================================================================
--- head/sbin/hastd/hastd.c Wed Mar 23 08:33:12 2011 (r219899)
+++ head/sbin/hastd/hastd.c Wed Mar 23 11:09:04 2011 (r219900)
@@ -224,7 +224,8 @@ descriptors_assert(const struct hast_res
fd, dtype2str(mode), dtype2str(S_IFSOCK));
break;
}
- } else if (fd == proto_descriptor(res->hr_conn)) {
+ } else if (res->hr_role == HAST_ROLE_PRIMARY &&
+ fd == proto_descriptor(res->hr_conn)) {
if (!isopen) {
(void)snprintf(msg, sizeof(msg),
"Descriptor %d (conn) is closed, but should be open.",
@@ -238,6 +239,15 @@ descriptors_assert(const struct hast_res
break;
}
} else if (res->hr_role == HAST_ROLE_SECONDARY &&
+ res->hr_conn != NULL &&
+ fd == proto_descriptor(res->hr_conn)) {
+ if (isopen) {
+ (void)snprintf(msg, sizeof(msg),
+ "Descriptor %d (conn) is open, but should be closed.",
+ fd);
+ break;
+ }
+ } else if (res->hr_role == HAST_ROLE_SECONDARY &&
fd == proto_descriptor(res->hr_remotein)) {
if (!isopen) {
(void)snprintf(msg, sizeof(msg),
@@ -851,6 +861,8 @@ connection_migrate(struct hast_resource
pjdlog_prefix_set("[%s] (%s) ", res->hr_name, role2str(res->hr_role));
+ PJDLOG_ASSERT(res->hr_role == HAST_ROLE_PRIMARY);
+
if (proto_recv(res->hr_conn, &val, sizeof(val)) < 0) {
pjdlog_errno(LOG_WARNING,
"Unable to receive connection command");
@@ -951,17 +963,19 @@ main_loop(void)
TAILQ_FOREACH(res, &cfg->hc_resources, hr_next) {
if (res->hr_event == NULL)
continue;
- PJDLOG_ASSERT(res->hr_conn != NULL);
fd = proto_descriptor(res->hr_event);
PJDLOG_ASSERT(fd >= 0);
FD_SET(fd, &rfds);
maxfd = fd > maxfd ? fd : maxfd;
if (res->hr_role == HAST_ROLE_PRIMARY) {
/* Only primary workers asks for connections. */
+ PJDLOG_ASSERT(res->hr_conn != NULL);
fd = proto_descriptor(res->hr_conn);
PJDLOG_ASSERT(fd >= 0);
FD_SET(fd, &rfds);
maxfd = fd > maxfd ? fd : maxfd;
+ } else {
+ PJDLOG_ASSERT(res->hr_conn == NULL);
}
}
@@ -998,20 +1012,26 @@ main_loop(void)
TAILQ_FOREACH(res, &cfg->hc_resources, hr_next) {
if (res->hr_event == NULL)
continue;
- PJDLOG_ASSERT(res->hr_conn != NULL);
if (FD_ISSET(proto_descriptor(res->hr_event), &rfds)) {
if (event_recv(res) == 0)
continue;
/* The worker process exited? */
proto_close(res->hr_event);
res->hr_event = NULL;
- proto_close(res->hr_conn);
- res->hr_conn = NULL;
+ if (res->hr_conn != NULL) {
+ proto_close(res->hr_conn);
+ res->hr_conn = NULL;
+ }
continue;
}
- if (res->hr_role == HAST_ROLE_PRIMARY &&
- FD_ISSET(proto_descriptor(res->hr_conn), &rfds)) {
- connection_migrate(res);
+ if (res->hr_role == HAST_ROLE_PRIMARY) {
+ PJDLOG_ASSERT(res->hr_conn != NULL);
+ if (FD_ISSET(proto_descriptor(res->hr_conn),
+ &rfds)) {
+ connection_migrate(res);
+ }
+ } else {
+ PJDLOG_ASSERT(res->hr_conn == NULL);
}
}
}
Modified: head/sbin/hastd/secondary.c
==============================================================================
--- head/sbin/hastd/secondary.c Wed Mar 23 08:33:12 2011 (r219899)
+++ head/sbin/hastd/secondary.c Wed Mar 23 11:09:04 2011 (r219900)
@@ -378,16 +378,6 @@ hastd_secondary(struct hast_resource *re
pjdlog_exit(EX_OSERR,
"Unable to create event sockets between child and parent");
}
- /*
- * Create communication channel for sending connection requests from
- * parent to child.
- */
- if (proto_client(NULL, "socketpair://", &res->hr_conn) < 0) {
- /* TODO: There's no need for this to be fatal error. */
- KEEP_ERRNO((void)pidfile_remove(pfh));
- pjdlog_exit(EX_OSERR,
- "Unable to create connection sockets between parent and child");
- }
pid = fork();
if (pid < 0) {
@@ -405,7 +395,6 @@ hastd_secondary(struct hast_resource *re
proto_recv(res->hr_event, NULL, 0);
/* Declare that we are sender. */
proto_send(res->hr_ctrl, NULL, 0);
- proto_send(res->hr_conn, NULL, 0);
res->hr_workerpid = pid;
return;
}
@@ -418,7 +407,6 @@ hastd_secondary(struct hast_resource *re
proto_send(res->hr_event, NULL, 0);
/* Declare that we are receiver. */
proto_recv(res->hr_ctrl, NULL, 0);
- proto_recv(res->hr_conn, NULL, 0);
descriptors_cleanup(res);
descriptors_assert(res, mode);
More information about the svn-src-head
mailing list