diff --git a/debian/changelog b/debian/changelog index b8b9430..5245d7d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ nut (2.7.2-1) UNRELEASED; urgency=low * New upstream release - Fix the undefined references (Closes: #731156) - debian/patches/0004-fix-systemd-service.patch: Refreshed + - Drop d/p/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch: + Merged upstream * debian/rules, debian/control, d/p/0004-fix-systemd-service.patch: Use a symlink instead of an Alias= to mask the SysV initscript * debian/control: Bump Standards-Version to 3.9.5 (no further changes) @@ -11,7 +13,7 @@ nut (2.7.2-1) UNRELEASED; urgency=low * debian/control, debian/rules: Call dh-autoreconf and pass LDFLAGS to minimize runtime dependencies - -- Laurent Bigonville Tue, 22 Apr 2014 20:55:27 +0200 + -- Laurent Bigonville Tue, 22 Apr 2014 20:56:12 +0200 nut (2.7.1-1) unstable; urgency=low diff --git a/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch b/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch deleted file mode 100644 index ee3cb8f..0000000 --- a/debian/patches/0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch +++ /dev/null @@ -1,133 +0,0 @@ -From ad1e78a22dc91b70bee871425cd5f74bb3c34c9f Mon Sep 17 00:00:00 2001 -From: Laurent Bigonville -Date: Thu, 21 Nov 2013 17:52:16 +0100 -Subject: [PATCH] Provide retry options for upsdrvctl and driver(s) - -As recently seen in Debian (bugs #694717 and #677143), it may be required to -have upsdrvctl retrying to start the driver in case of failure. More -specifically, a mix of init system (V and systemd), udev and USB device(s) can -result in the /dev entry not being available at driver startup, thus resulting -in a general failure to start NUT. This commit provides at least a way to -overcome this issue. A more suitable solution will require more work on NUT -design. - -This patch if based on Arnaud Quette proposal ---- - docs/man/ups.conf.txt | 15 +++++++++++++++ - docs/man/upsdrvctl.txt | 3 ++- - drivers/upsdrvctl.c | 37 ++++++++++++++++++++++++++++++++++--- - 3 files changed, 51 insertions(+), 4 deletions(-) - -diff --git a/docs/man/ups.conf.txt b/docs/man/ups.conf.txt -index 8a72a83..4877852 100644 ---- a/docs/man/ups.conf.txt -+++ b/docs/man/ups.conf.txt -@@ -58,6 +58,21 @@ directory, which is often /usr/local/ups/bin. - Optional. Same as the UPS field of the same name, but this is the - default for UPSes that don't have the field. - -+*maxretry*:: -+Optional. Specify the number of attempts to start the driver(s), in case of -+failure, before giving up. A delay of 'retrydelay' is inserted between each -+attempt. Caution should be taken when using this option, since it can -+impact the time taken by your system to start. -++ -+The default is 1 attempt. -+ -+*retrydelay*:: -+Optional. Specify the delay between each restart attempt of the driver(s), -+as specified by 'maxretry'. Caution should be taken when using this option, -+since it can impact the time taken by your system to start. -++ -+The default is 5 seconds. -+ - *pollinterval*:: - - Optional. The status of the UPS will be refreshed after a maximum -diff --git a/docs/man/upsdrvctl.txt b/docs/man/upsdrvctl.txt -index f19fd77..52e5509 100644 ---- a/docs/man/upsdrvctl.txt -+++ b/docs/man/upsdrvctl.txt -@@ -63,7 +63,8 @@ Without that argument, they operate on every UPS that is currently - configured. - - *start*:: --Start the UPS driver(s). -+Start the UPS driver(s). In case of failure, further attempts may be executed -+by using the 'maxretry' and 'retrydelay' options - see linkman:ups.conf[5]. - - *stop*:: - Stop the UPS driver(s). -diff --git a/drivers/upsdrvctl.c b/drivers/upsdrvctl.c -index 623f753..0cdaa2c 100644 ---- a/drivers/upsdrvctl.c -+++ b/drivers/upsdrvctl.c -@@ -45,6 +45,12 @@ - /* timer - keeps us from getting stuck if a driver hangs */ - static int maxstartdelay = 45; - -+ /* counter - retry that many time(s) to start the driver if it fails to */ -+static int maxretry = 1; -+ -+ /* timer - delay between each restart attempt of the driver(s) */ -+static int retrydelay = 5; -+ - /* Directory where driver executables live */ - static char *driverpath = NULL; - -@@ -65,6 +71,12 @@ void do_upsconf_args(char *upsname, char *var, char *val) - driverpath = xstrdup(val); - } - -+ if (!strcmp(var, "maxretry")) -+ maxretry = atoi(val); -+ -+ if (!strcmp(var, "retrydelay")) -+ retrydelay = atoi(val); -+ - /* ignore anything else - it's probably for main */ - - return; -@@ -248,6 +260,7 @@ static void start_driver(const ups_t *ups) - char *argv[8]; - char dfn[SMALLBUF]; - int ret, arg = 0; -+ int initial_exec_error = exec_error, drv_maxretry = maxretry; - struct stat fs; - - upsdebugx(1, "Starting UPS: %s", ups->upsname); -@@ -276,10 +289,28 @@ static void start_driver(const ups_t *ups) - /* tie it off */ - argv[arg++] = NULL; - -- debugcmdline(2, "exec: ", argv); - -- if (!testmode) { -- forkexec(argv, ups); -+ while (drv_maxretry > 0) { -+ int cur_exec_error = exec_error; -+ -+ upsdebugx(2, "%i remaining attempts", drv_maxretry); -+ debugcmdline(2, "exec: ", argv); -+ drv_maxretry--; -+ -+ if (!testmode) { -+ forkexec(argv, ups); -+ } -+ -+ /* driver command succeeded */ -+ if (cur_exec_error == exec_error) { -+ drv_maxretry = 0; -+ exec_error = initial_exec_error; -+ } -+ else { -+ /* otherwise, retry if still needed */ -+ if (drv_maxretry > 0) -+ sleep (retrydelay); -+ } - } - } - --- -1.8.4 - diff --git a/debian/patches/series b/debian/patches/series index 45dbe55..09a762e 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,6 +1,5 @@ 0003-install-dev-files-in-usr.patch 0002-nut-monitor-paths.patch 0004-fix-systemd-service.patch -0005-Provide-retry-options-for-upsdrvctl-and-drivers.patch 0006-ups-conf-maxretry.patch 0007-killpower-path.patch