Author: trociny
Date: Thu Mar 17 21:02:14 2011
New Revision: 219721
URL: http://svn.freebsd.org/changeset/base/219721

Log:
  For secondary, set 2 * HAST_KEEPALIVE seconds timeout for incoming
  connection so the worker will exit if it does not receive packets from
  the primary during this interval.
  
  Reported by:  Christian Vogt <christian.v...@haw-hamburg.de>
  Tested by:    Christian Vogt <christian.v...@haw-hamburg.de>
  Approved by:  pjd (mentor)
  MFC after:    1 week

Modified:
  head/sbin/hastd/hast.h
  head/sbin/hastd/primary.c
  head/sbin/hastd/secondary.c

Modified: head/sbin/hastd/hast.h
==============================================================================
--- head/sbin/hastd/hast.h      Thu Mar 17 19:48:31 2011        (r219720)
+++ head/sbin/hastd/hast.h      Thu Mar 17 21:02:14 2011        (r219721)
@@ -98,6 +98,9 @@
 #define        HAST_ADDRSIZE   1024
 #define        HAST_TOKEN_SIZE 16
 
+/* Number of seconds to sleep between reconnect retries or keepalive packets. 
*/
+#define        HAST_KEEPALIVE  10
+
 struct hastd_config {
        /* Address to communicate with hastctl(8). */
        char     hc_controladdr[HAST_ADDRSIZE];

Modified: head/sbin/hastd/primary.c
==============================================================================
--- head/sbin/hastd/primary.c   Thu Mar 17 19:48:31 2011        (r219720)
+++ head/sbin/hastd/primary.c   Thu Mar 17 21:02:14 2011        (r219721)
@@ -150,10 +150,6 @@ static pthread_mutex_t metadata_lock;
  * and remote components.
  */
 #define        HAST_NCOMPONENTS        2
-/*
- * Number of seconds to sleep between reconnect retries or keepalive packets.
- */
-#define        RETRY_SLEEP             10
 
 #define        ISCONNECTED(res, no)    \
        ((res)->hr_remotein != NULL && (res)->hr_remoteout != NULL)
@@ -1318,10 +1314,10 @@ remote_send_thread(void *arg)
 
        for (;;) {
                pjdlog_debug(2, "remote_send: Taking request.");
-               QUEUE_TAKE1(hio, send, ncomp, RETRY_SLEEP);
+               QUEUE_TAKE1(hio, send, ncomp, HAST_KEEPALIVE);
                if (hio == NULL) {
                        now = time(NULL);
-                       if (lastcheck + RETRY_SLEEP <= now) {
+                       if (lastcheck + HAST_KEEPALIVE <= now) {
                                keepalive_send(res, ncomp);
                                lastcheck = now;
                        }
@@ -2098,7 +2094,7 @@ guard_thread(void *arg)
        PJDLOG_VERIFY(sigaddset(&mask, SIGINT) == 0);
        PJDLOG_VERIFY(sigaddset(&mask, SIGTERM) == 0);
 
-       timeout.tv_sec = RETRY_SLEEP;
+       timeout.tv_sec = HAST_KEEPALIVE;
        timeout.tv_nsec = 0;
        signo = -1;
 
@@ -2116,7 +2112,7 @@ guard_thread(void *arg)
 
                pjdlog_debug(2, "remote_guard: Checking connections.");
                now = time(NULL);
-               if (lastcheck + RETRY_SLEEP <= now) {
+               if (lastcheck + HAST_KEEPALIVE <= now) {
                        for (ii = 0; ii < ncomps; ii++)
                                guard_one(res, ii);
                        lastcheck = now;

Modified: head/sbin/hastd/secondary.c
==============================================================================
--- head/sbin/hastd/secondary.c Thu Mar 17 19:48:31 2011        (r219720)
+++ head/sbin/hastd/secondary.c Thu Mar 17 21:02:14 2011        (r219721)
@@ -418,7 +418,7 @@ hastd_secondary(struct hast_resource *re
        PJDLOG_VERIFY(sigprocmask(SIG_SETMASK, &mask, NULL) == 0);
 
        /* Error in setting timeout is not critical, but why should it fail? */
-       if (proto_timeout(res->hr_remotein, 0) < 0)
+       if (proto_timeout(res->hr_remotein, 2 * HAST_KEEPALIVE) < 0)
                pjdlog_errno(LOG_WARNING, "Unable to set connection timeout");
        if (proto_timeout(res->hr_remoteout, res->hr_timeout) < 0)
                pjdlog_errno(LOG_WARNING, "Unable to set connection timeout");
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to