Package: postgresql-common
Version: 44
Severity: normal
Tags: patch

The init script currently does this:

Starting PostgreSQL 8.1 database server: main.
Starting PostgreSQL 8.1 database server: master.
Starting PostgreSQL 8.1 database server: slave.

It should, however, do this:

Starting PostgreSQL 8.1 database server: main master slave.

Additionally, the start action should not fail if the servers are already
running, and the stop action should not fail if the service is already
stopped (per LSB).

The attached patch implements this, but it could surely use a few more
eyes.
diff -Nru /tmp/VOmikdQ1Ui/postgresql-common-43/debian/init.d-functions 
/tmp/YB2dZ8PXBL/postgresql-common-44/debian/init.d-functions
--- /tmp/VOmikdQ1Ui/postgresql-common-43/debian/init.d-functions        
2005-12-22 22:36:53.000000000 +0100
+++ /tmp/YB2dZ8PXBL/postgresql-common-44/debian/init.d-functions        
2006-03-02 16:47:44.000000000 +0100
@@ -13,7 +13,8 @@
     [ "$(ls /etc/postgresql/$2)" ] || return
     [ -x "/usr/lib/postgresql/$2/bin/postmaster" ] || return
 
-    unset fail
+    status=0    
+    log_daemon_msg "$3"
     for c in /etc/postgresql/"$2"/*; do
        [ -e "$c/pgdata" ] || continue
        name=$(basename "$c")
@@ -26,10 +27,11 @@
        fi
        [ "$start" = "auto" ] || continue
 
-        log_begin_msg "$3 $name"
-        pg_ctlcluster "$2" "$name" $1
-        log_end_msg $?
+        log_progress_msg "$name"
+        pg_ctlcluster "$2" "$name" $1 >/dev/null
+        status=$(($status || $?))
     done
+    log_end_msg $status
     if [ "$fail" ]; then
        [ -z "$ERRMSG" ] || echo -e "\n$ERRMSG" >&2
        exit 1
@@ -46,26 +48,25 @@
        install -d -m 2775 -o postgres -g postgres /var/run/postgresql
     fi
 
-    do_ctl_all start "$1" "Starting PostgreSQL $1 database server:"
+    do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
 }
 
 # stop all clusters of version $1
 # output according to Debian Policy for init scripts
 stop() {
-    do_ctl_all stop "$1" "Stopping PostgreSQL $1 database server:"
+    do_ctl_all stop "$1" "Stopping PostgreSQL $1 database server"
 }
 
 # restart all clusters of version $1
 # output according to Debian Policy for init scripts
 restart() {
-    do_ctl_all stop "$1" "Stopping PostgreSQL $1 database server:"
-    do_ctl_all start "$1" "Starting PostgreSQL $1 database server:"
+    do_ctl_all restart "$1" "Restarting PostgreSQL $1 database server"
 }
 
 # reload all clusters of version $1
 # output according to Debian Policy for init scripts
 reload() {
-    do_ctl_all reload "$1" "Reloading PostgreSQL $1 database server:"
+    do_ctl_all reload "$1" "Reloading PostgreSQL $1 database server"
 }
 
 status() {
@@ -74,16 +75,15 @@
 
 # start pg_autovacuum for all clusters of version $1
 autovac_start() {
-    do_ctl_all autovac-start "$1" "Starting PostgreSQL $1 autovacuum daemon:"
+    do_ctl_all autovac-start "$1" "Starting PostgreSQL $1 autovacuum daemon"
 }
 
 # stop pg_autovacuum for all clusters of version $1
 autovac_stop() {
-    do_ctl_all autovac-stop "$1" "Stopping PostgreSQL $1 autovacuum daemon:"
+    do_ctl_all autovac-stop "$1" "Stopping PostgreSQL $1 autovacuum daemon"
 }
 
 # restart pg_autovacuum for all clusters of version $1
 autovac_restart() {
-    do_ctl_all autovac-restart "$1" "Restarting PostgreSQL $1 autovacuum 
daemon:"
+    do_ctl_all autovac-restart "$1" "Restarting PostgreSQL $1 autovacuum 
daemon"
 }
-
diff -Nru /tmp/VOmikdQ1Ui/postgresql-common-43/pg_ctlcluster 
/tmp/YB2dZ8PXBL/postgresql-common-44/pg_ctlcluster
--- /tmp/VOmikdQ1Ui/postgresql-common-43/pg_ctlcluster  2006-02-06 
23:43:54.000000000 +0100
+++ /tmp/YB2dZ8PXBL/postgresql-common-44/pg_ctlcluster  2006-03-02 
16:19:12.000000000 +0100
@@ -70,7 +70,7 @@
     my $pidfile = $info{'pgdata'}.'/postmaster.pid';
     if (check_running_postmaster $pidfile) {
         print "Cluster is already running.\n";
-        exit 1;
+        exit 0;
     }
 
     # Remove invalid or stale PID file
@@ -88,7 +88,8 @@
     if ($info{'running'}) {
        error 'pid file is invalid, please manually kill the stale server 
process.';
     }
-    error 'cluster is not running';
+    print 'Cluster is not running.';
+    exit 0;
 }
 
 # check if a cluster reliably connects or fails

Reply via email to