]> Zhao Yanbai Git Server - minix.git/commitdiff
Switch to disable bin. exp. wait time in RS
authorLionel Sambuc <lionel@minix3.org>
Sat, 16 Feb 2013 15:50:18 +0000 (16:50 +0100)
committerLionel Sambuc <lionel@minix3.org>
Sat, 16 Feb 2013 18:35:19 +0000 (19:35 +0100)
commands/service/Makefile
commands/service/service.8 [moved from man/man8/service.8 with 98% similarity]
commands/service/service.c
include/minix/rs.h
man/man8/Makefile
servers/rs/const.h
servers/rs/manager.c

index 8b96043751462beabd5a47f878a11f9546d57621..dc406fb33c9b9dbbdf36f02026f1c81a996ea14e 100644 (file)
@@ -4,7 +4,7 @@ SRCS.service=service.c parse.c util.c
 SRCS.printconfig=print.c parse.c util.c
 
 BINDIR= /bin
-MAN.service=
+MAN.service=   service.8
 MAN.printconfig=
 
 CPPFLAGS+=     -I${NETBSDSRCDIR}
similarity index 98%
rename from man/man8/service.8
rename to commands/service/service.8
index 4c018016f65bd14af51af0f839c8ee86747ac9a0..d46d29bbbb4523361bbcd4c06548c8617200a87c 100644 (file)
@@ -3,7 +3,7 @@
 service \- Manage an operating system service.
 .SH SYNOPSIS
 .PP
-\fBservice [-c -r -n -p] (up|run|edit|update)\fR \fI<binary|self>\fR
+\fBservice [-b -c -n -p -r] (up|run|edit|update)\fR \fI<binary|self>\fR
 [\fB-args\fR \fI<args>\fR] [\fB-dev\fR \fI<special>\fR]
 [\fB-devstyle\fR \fI<style>\fR] [\fB-period\fR \fI<ticks>\fR]
 [\fB-script\fR \fI<path>\fR] [\fB-label\fR \fI<name>\fR]
@@ -63,6 +63,9 @@ it down allowing for graceful degradation of service. If a critical
 system service fails to restart, \fBRS\fR will immediately resort to
 a system-wide panic. The \fBup\fR action takes the following options:
 .TP
+.BI \-b "          "
+disable the usage of binary exponential restart time in \fBRS\fR.
+.TP
 .BI \-c "          "
 \fBRS\fR normally relies on the binary on the disk to restart a
 system service. The
@@ -72,10 +75,6 @@ use the copy to restart the service upon termination. This is necessary
 when the location on the disk may change or if the service itself is
 required to read the binary from the disk (e.g. the disk driver).
 .TP
-.BI \-r "          "
-when saving an in-memory copy, instructs \fBRS\fR to reuse and share the copy
-of an existing service with the same program name, if available.
-.TP
 .BI \-n "          "
 by default, \fBRS\fR performs blocking startup of the system service. As
 a result, the \fBup\fR action does not terminate until the system service
@@ -92,6 +91,10 @@ and use the replica to restart the service upon termination. This is
 necessary when the service itself is required to create a working
 service instance (e.g. \fBPM\fR).
 .TP
+.BI \-r "          "
+when saving an in-memory copy, instructs \fBRS\fR to reuse and share the copy
+of an existing service with the same program name, if available.
+.TP
 .BI \-args " <args>"
 specifies the command line arguments to use to run the program
 given by \fI<binary>\fR. The default is to use no arguments.
index 65fe1998fcf000228f5a105d7d5d225ecb8a517e..09a4f4c1c20b2e52dbdc19246657e66bebee9d84 100644 (file)
@@ -161,20 +161,24 @@ static int parse_arguments(int argc, char **argv, u32_t *rss_flags)
   char *hz, *buff;
   int req_nr;
   int c, i, j;
-  int c_flag, r_flag, n_flag, p_flag;
+  int b_flag, c_flag, r_flag, n_flag, p_flag;
   int label_required;
 
+  b_flag = 0;
   c_flag = 0;
   r_flag = 0;
   n_flag = 0;
   p_flag = 0;
-  while (c= getopt(argc, argv, "rcnp?"), c != -1)
+  while (c= getopt(argc, argv, "rbcnp?"), c != -1)
   {
        switch(c)
        {
        case '?':
                print_usage(argv[ARG_NAME], "wrong number of arguments");
                exit(EINVAL);
+       case 'b':
+               b_flag = 1;
+               break;
        case 'c':
                c_flag = 1;
                break;
@@ -236,6 +240,9 @@ static int parse_arguments(int argc, char **argv, u32_t *rss_flags)
       if(p_flag)
         *rss_flags |= RSS_REPLICA;
 
+      if(b_flag)
+       *rss_flags |= RSS_NO_BIN_EXP;
+
       req_path = argv[optind+ARG_PATH];
       if(req_nr == RS_UPDATE && !strcmp(req_path, SELF_BINARY)) {
           /* Self update needs no real path or configuration file. */
index b47973c34291f325c45aa60e96d86e30fc5aa28a..71f9868b8f5dc4c83facac1b6814eb76fe8e5ffe 100644 (file)
@@ -28,6 +28,7 @@ Interface to the reincarnation server
 #define RSS_SELF_LU    0x20    /* perform self update */
 #define RSS_SYS_BASIC_CALLS    0x40    /* include basic kernel calls */
 #define RSS_VM_BASIC_CALLS     0x80    /* include basic vm calls */
+#define RSS_NO_BIN_EXP 0x100   /* suppress binary exponential offset */
 
 /* Common definitions. */
 #define RS_NR_CONTROL           8
index 37cb25a3a320a472b0dc90cb9ec91cac1f64bdba..170bfe0ca1fbe644e60b0ac1d999c3b66c342a16 100644 (file)
@@ -7,7 +7,7 @@ MAN=    add_route.8 backup.8 boot.8 btrace.8 \
        ossdevlinks.8 part.8 partition.8 \
        poweroff.8 printroot.8 pr_routes.8 pwdauth.8 rarpd.8 \
        rdate.8 readclock.8 reboot.8 repartition.8 \
-       rshd.8  screendump.8 serial-ip.8 service.8 \
+       rshd.8  screendump.8 serial-ip.8 \
        setup.8 shutdown.8 slip.8 srccrc.8 syslogd.8 tcpd.8 \
        unix.8 update.8 usage.8 vbfs.8
 
index 4df7f5b960b7ca5240b8f936b78ea570ece8f6f4..9917a7c99a071646cee4873f655d313449dfc3bf 100644 (file)
@@ -42,8 +42,9 @@
 #define SF_USE_COPY     0x008    /* set when process has a copy in memory */
 #define SF_NEED_REPL    0x010    /* set when process needs replica to start */
 #define SF_USE_REPL     0x020    /* set when process has a replica */
+#define SF_NO_BIN_EXP  0x040    /* set when we should ignore binary exp. offset */
 #define IMM_SF          \
-    (SF_CORE_SRV | SF_SYNCH_BOOT | SF_NEED_COPY | SF_NEED_REPL) /* immutable */
+    (SF_NO_BIN_EXP | SF_CORE_SRV | SF_SYNCH_BOOT | SF_NEED_COPY | SF_NEED_REPL) /* immutable */
 
 /* Constants determining RS period and binary exponential backoff. */
 #define RS_INIT_T      (system_hz * 10)        /* allow T ticks for init */
index 9b4d69030fba5e2abfd19353eaa688631d9d2dd9..f05ed3d08d5e1f48d68f351f4fe56601031440fd 100644 (file)
@@ -1066,10 +1066,15 @@ void terminate_service(struct rproc *rp)
        * a binary exponential backoff.
        */
       if (rp->r_restarts > 0) {
-          rp->r_backoff = 1 << MIN(rp->r_restarts,(BACKOFF_BITS-2));
-          rp->r_backoff = MIN(rp->r_backoff,MAX_BACKOFF); 
-          if ((rpub->sys_flags & SF_USE_COPY) && rp->r_backoff > 1)
-              rp->r_backoff= 1;
+          if (!(rpub->sys_flags & SF_NO_BIN_EXP)) {
+              rp->r_backoff = 1 << MIN(rp->r_restarts,(BACKOFF_BITS-2));
+              rp->r_backoff = MIN(rp->r_backoff,MAX_BACKOFF); 
+              if ((rpub->sys_flags & SF_USE_COPY) && rp->r_backoff > 1)
+                  rp->r_backoff= 1;
+         }
+         else {
+              rp->r_backoff = 1;
+         }
           return;
       }
 
@@ -1545,6 +1550,9 @@ endpoint_t source;
   if (rs_start->rss_flags & RSS_REPLICA) {
       rpub->sys_flags |= SF_USE_REPL;
   }
+  if (rs_start->rss_flags & RSS_NO_BIN_EXP) {
+      rpub->sys_flags |= SF_NO_BIN_EXP;
+  }
 
   /* Update period. */
   if(rpub->endpoint != RS_PROC_NR) {