enable logging of start time/cookie for all backend processes - Mailing list pgsql-patches

From Andrew Dunstan
Subject enable logging of start time/cookie for all backend processes
Date
Msg-id 46ACDD44.7060903@dunslane.net
Whole thread Raw
Responses Re: enable logging of start time/cookie for all backend processes  (Andrew Dunstan <andrew@dunslane.net>)
Re: enable logging of start time/cookie for all backend processes  (Alvaro Herrera <alvherre@commandprompt.com>)
List pgsql-patches
The attached patch makes a very small but useful change to the behaviour
of log_line_prefix, by enabling the start time (%s) and cookie (%c)
logging to occur for all backends rather than just for session processes
(i.e. backends started for a client connection). We actually need almost
all of this patch, with or without the change in behaviour, so we can
put the cookie in CSVlogs (which I'm still working on), since the
cookie+line number make the natural primary key for the logs. The actual
change in behaviour from this patch comes from the removal of 2 "if
(MyProcPort)" lines in elog.c. Given that, can I sneak this in or should
I wait for 8.4 given we're long past feature freeze?

Most of this has been factored out (and cleaned up) from my previous
CSVlog patch, so it's not new. I did that so that what is left when I
finish will have a rather smaller footprint, as this part seemed fairly
seperable.

cheers

andrew
Index: doc/src/sgml/config.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/config.sgml,v
retrieving revision 1.133
diff -c -r1.133 config.sgml
*** doc/src/sgml/config.sgml    24 Jul 2007 04:54:08 -0000    1.133
--- doc/src/sgml/config.sgml    29 Jul 2007 18:14:12 -0000
***************
*** 2861,2867 ****
              <row>
               <entry><literal>%c</literal></entry>
               <entry>Session ID: see below</entry>
!              <entry>yes</entry>
              </row>
              <row>
               <entry><literal>%l</literal></entry>
--- 2861,2867 ----
              <row>
               <entry><literal>%c</literal></entry>
               <entry>Session ID: see below</entry>
!              <entry>no</entry>
              </row>
              <row>
               <entry><literal>%l</literal></entry>
***************
*** 2871,2877 ****
              <row>
               <entry><literal>%s</literal></entry>
               <entry>Session start time stamp</entry>
!              <entry>yes</entry>
              </row>
              <row>
               <entry><literal>%x</literal></entry>
--- 2871,2877 ----
              <row>
               <entry><literal>%s</literal></entry>
               <entry>Session start time stamp</entry>
!              <entry>no</entry>
              </row>
              <row>
               <entry><literal>%x</literal></entry>
Index: src/backend/postmaster/autovacuum.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/autovacuum.c,v
retrieving revision 1.55
diff -c -r1.55 autovacuum.c
*** src/backend/postmaster/autovacuum.c    1 Jul 2007 18:30:54 -0000    1.55
--- src/backend/postmaster/autovacuum.c    29 Jul 2007 18:14:14 -0000
***************
*** 385,390 ****
--- 385,393 ----
      /* reset MyProcPid */
      MyProcPid = getpid();

+     /* record Start Time for logging */
+     MyStartTime = time(NULL);
+
      /* Identify myself via ps */
      init_ps_display("autovacuum launcher process", "", "", "");

***************
*** 1403,1408 ****
--- 1406,1414 ----
      /* reset MyProcPid */
      MyProcPid = getpid();

+     /* record Start Time for logging */
+     MyStartTime = time(NULL);
+
      /* Identify myself via ps */
      init_ps_display("autovacuum worker process", "", "", "");

Index: src/backend/postmaster/pgarch.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgarch.c,v
retrieving revision 1.29
diff -c -r1.29 pgarch.c
*** src/backend/postmaster/pgarch.c    10 Feb 2007 14:58:54 -0000    1.29
--- src/backend/postmaster/pgarch.c    29 Jul 2007 18:14:15 -0000
***************
*** 223,228 ****
--- 223,230 ----

      MyProcPid = getpid();        /* reset MyProcPid */

+     MyStartTime = time(NULL);   /* record Start Time for logging */
+
      /*
       * If possible, make this process a group leader, so that the postmaster
       * can signal any child processes too.
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.161
diff -c -r1.161 pgstat.c
*** src/backend/postmaster/pgstat.c    8 Jul 2007 22:23:16 -0000    1.161
--- src/backend/postmaster/pgstat.c    29 Jul 2007 18:14:17 -0000
***************
*** 2168,2173 ****
--- 2168,2175 ----

      MyProcPid = getpid();        /* reset MyProcPid */

+     MyStartTime = time(NULL);      /* record Start Time for logging */
+
      /*
       * If possible, make this process a group leader, so that the postmaster
       * can signal any child processes too.  (pgstat probably never has
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v
retrieving revision 1.535
diff -c -r1.535 postmaster.c
*** src/backend/postmaster/postmaster.c    24 Jul 2007 04:54:09 -0000    1.535
--- src/backend/postmaster/postmaster.c    29 Jul 2007 18:14:19 -0000
***************
*** 386,391 ****
--- 386,393 ----

      MyProcPid = PostmasterPid = getpid();

+     MyStartTime = time(NULL);
+
      IsPostmasterEnvironment = true;

      /*
***************
*** 1103,1108 ****
--- 1105,1112 ----

      MyProcPid = PostmasterPid = getpid();        /* reset PID vars to child */

+     MyStartTime = time(NULL);
+
  /* GH: If there's no setsid(), we hopefully don't need silent mode.
   * Until there's a better solution.
   */
***************
*** 2661,2666 ****
--- 2665,2672 ----

          MyProcPid = getpid();    /* reset MyProcPid */

+         MyStartTime = time(NULL);
+
          /* We don't want the postmaster's proc_exit() handlers */
          on_exit_reset();

***************
*** 2803,2809 ****

      /* save process start time */
      port->SessionStartTime = GetCurrentTimestamp();
!     port->session_start = timestamptz_to_time_t(port->SessionStartTime);

      /* set these to empty in case they are needed before we set them up */
      port->remote_host = "";
--- 2809,2815 ----

      /* save process start time */
      port->SessionStartTime = GetCurrentTimestamp();
!     MyStartTime = timestamptz_to_time_t(port->SessionStartTime);

      /* set these to empty in case they are needed before we set them up */
      port->remote_host = "";
***************
*** 3385,3390 ****
--- 3391,3398 ----

      MyProcPid = getpid();        /* reset MyProcPid */

+     MyStartTime = time(NULL);
+
      /* Lose the postmaster's on-exit routines (really a no-op) */
      on_exit_reset();

Index: src/backend/utils/error/elog.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/error/elog.c,v
retrieving revision 1.190
diff -c -r1.190 elog.c
*** src/backend/utils/error/elog.c    21 Jul 2007 22:12:04 -0000    1.190
--- src/backend/utils/error/elog.c    29 Jul 2007 18:14:20 -0000
***************
*** 1485,1496 ****
                  }
                  break;
              case 'c':
!                 if (MyProcPort)
!                 {
!                     appendStringInfo(buf, "%lx.%x",
!                                      (long) (MyProcPort->session_start),
!                                      MyProcPid);
!                 }
                  break;
              case 'p':
                  appendStringInfo(buf, "%d", MyProcPid);
--- 1485,1491 ----
                  }
                  break;
              case 'c':
!                 appendStringInfo(buf, "%lx.%x", (long)(MyStartTime),MyProcPid);
                  break;
              case 'p':
                  appendStringInfo(buf, "%d", MyProcPid);
***************
*** 1552,1558 ****
                  }
                  break;
              case 's':
-                 if (MyProcPort)
                  {
                      char        strfbuf[128];

--- 1547,1552 ----
***************
*** 1563,1569 ****
  #else
                               "%Y-%m-%d %H:%M:%S",
  #endif
!                              localtime(&MyProcPort->session_start));
                      appendStringInfoString(buf, strfbuf);
                  }
                  break;
--- 1557,1563 ----
  #else
                               "%Y-%m-%d %H:%M:%S",
  #endif
!                              localtime(&MyStartTime));
                      appendStringInfoString(buf, strfbuf);
                  }
                  break;
Index: src/backend/utils/init/globals.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/init/globals.c,v
retrieving revision 1.101
diff -c -r1.101 globals.c
*** src/backend/utils/init/globals.c    16 Apr 2007 18:29:54 -0000    1.101
--- src/backend/utils/init/globals.c    29 Jul 2007 18:14:21 -0000
***************
*** 33,38 ****
--- 33,39 ----
  volatile uint32 CritSectionCount = 0;

  int            MyProcPid;
+ time_t      MyStartTime;
  struct Port *MyProcPort;
  long        MyCancelKey;

Index: src/include/miscadmin.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/miscadmin.h,v
retrieving revision 1.195
diff -c -r1.195 miscadmin.h
*** src/include/miscadmin.h    25 Jul 2007 12:22:53 -0000    1.195
--- src/include/miscadmin.h    29 Jul 2007 18:14:22 -0000
***************
*** 23,28 ****
--- 23,30 ----
  #ifndef MISCADMIN_H
  #define MISCADMIN_H

+ #include <time.h> /* for time_t */
+

  #define PG_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"

***************
*** 132,137 ****
--- 134,140 ----
  extern int    MaxConnections;

  extern PGDLLIMPORT int MyProcPid;
+ extern PGDLLIMPORT time_t MyStartTime;
  extern PGDLLIMPORT struct Port *MyProcPort;
  extern long MyCancelKey;

Index: src/include/libpq/libpq-be.h
===================================================================
RCS file: /cvsroot/pgsql/src/include/libpq/libpq-be.h,v
retrieving revision 1.62
diff -c -r1.62 libpq-be.h
*** src/include/libpq/libpq-be.h    23 Jul 2007 10:16:54 -0000    1.62
--- src/include/libpq/libpq-be.h    29 Jul 2007 18:14:22 -0000
***************
*** 130,136 ****
       * other members of this struct, we may as well keep it here.
       */
      TimestampTz SessionStartTime;        /* backend start time */
-     time_t        session_start;    /* same, in time_t format */

      /*
       * TCP keepalive settings.
--- 130,135 ----

pgsql-patches by date:

Previous
From: Decibel!
Date:
Subject: Re: Repair cosmetic damage (done by pg_indent?)
Next
From: Alvaro Herrera
Date:
Subject: Re: allow CSV quote in NULL