Thread: ps_status.h on FreeBSD 4.0 problems and fix

ps_status.h on FreeBSD 4.0 problems and fix

From
Matthew Altus
Date:
Your name               :       Matthew Altus
Your email address      :    matt@senet.com.au


System Configuration
---------------------
  Architecture : Intel Pentium 3 Dual CPU

  Operating System : FreeBSD 4.0 - STABLE

  PostgreSQL version :   PostgreSQL-6.5.1 (also effects 7.0 as well)

  Compiler used : gcc 2.95.2


Please enter a FULL description of your problem:
------------------------------------------------
The ps output of child postgres process doesn't change to display
hostname etc...  It displays the same as the postmaster.
I noticed there are links (PS_STATUS marco) from the ps_status to the
lockmgr files, which means it may use this to help determine deadlock
status, which is very bad, as freebsd 4.0 doesn't allow you to write the
argv memory, although I might me completely wrong about this one.

If this problem had already been posted to pgsql-bugs, I couldn't tell
as your seach doesn't work.



Please describe a way to repeat the problem.   Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
Install postgres on freeBSD 4.0 and open a connection, type ps axwwwwww
| grep postgres.  all children will look the same as the postmaster.




If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------

Below is my replacement to src/include/utils/ps_status.h , you should
place checks for the setproctitle function in the configure script and
use this if its available (most BSD's) instead of overwriting the argv
memory space.  You will also need to link against libutil (-lutil).


/*-------------------------------------------------------------------------
 *
 * ps_status.h
 *
 *      Defines macros to show backend status on the ps status line.
 *      Unfortunately this is system dpendent.
 *
 *      Below is the FreeBSD version should work FreeBSD 2.2. and
higher.
 *
 *      needs -lutil in makefile/configure script
 *
 *      Written by Matthew Altus
 *

*-------------------------------------------------------------------------
 */

#ifndef PS_STATUS_H
#define PS_STATUS_H


#include <sys/types.h>
#include <libutil.h>

extern char ps_status_buffer[];
extern char ps_status[];

#define BUFFERPATHLEN     255

#define PS_DEFINE_BUFFER \
char ps_status_buffer[BUFFERPATHLEN]; \
char ps_status[BUFFERPATHLEN];

#define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
\
        { \
                bzero (ps_status_buffer, BUFFERPATHLEN); \
                bzero (ps_status, BUFFERPATHLEN); \
                sprintf(ps_status_buffer, "%s %s %s %s ", execname,
username, hostname, dbname); \
                setproctitle("%s", ps_status_buffer); \
        }

#define PS_CLEAR_STATUS() \
        { \
                bzero (ps_status, BUFFERPATHLEN); \
                setproctitle("%s", ps_status_buffer); \
        }

#define PS_SET_STATUS(status) \
        { \
                PS_CLEAR_STATUS(); \
                strcpy(ps_status, status); \
                setproctitle("%s%s", ps_status_buffer, ps_status); \
        }

#define PS_STATUS (ps_status)



#endif   /* PS_STATUS_H */



--
_____________________________________________________________________
Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
Software Development Engineer       Support : (08) 8221 5792
SE Network Access Pty Ltd           Fax     : (08) 8221 5220
222 Grote Street                    E-Mail  : matt@senet.com.au
Adelaide  SA  5000                  WWW     : http://www.senet.com.au

Re: ps_status.h on FreeBSD 4.0 problems and fix

From
Bruce Momjian
Date:
We already did this.  This will be in 7.1.


> Your name               :       Matthew Altus
> Your email address      :    matt@senet.com.au
>
>
> System Configuration
> ---------------------
>   Architecture : Intel Pentium 3 Dual CPU
>
>   Operating System : FreeBSD 4.0 - STABLE
>
>   PostgreSQL version :   PostgreSQL-6.5.1 (also effects 7.0 as well)
>
>   Compiler used : gcc 2.95.2
>
>
> Please enter a FULL description of your problem:
> ------------------------------------------------
> The ps output of child postgres process doesn't change to display
> hostname etc...  It displays the same as the postmaster.
> I noticed there are links (PS_STATUS marco) from the ps_status to the
> lockmgr files, which means it may use this to help determine deadlock
> status, which is very bad, as freebsd 4.0 doesn't allow you to write the
> argv memory, although I might me completely wrong about this one.
>
> If this problem had already been posted to pgsql-bugs, I couldn't tell
> as your seach doesn't work.
>
>
>
> Please describe a way to repeat the problem.   Please try to provide a
> concise reproducible example, if at all possible:
> ----------------------------------------------------------------------
> Install postgres on freeBSD 4.0 and open a connection, type ps axwwwwww
> | grep postgres.  all children will look the same as the postmaster.
>
>
>
>
> If you know how this problem might be fixed, list the solution below:
> ---------------------------------------------------------------------
>
> Below is my replacement to src/include/utils/ps_status.h , you should
> place checks for the setproctitle function in the configure script and
> use this if its available (most BSD's) instead of overwriting the argv
> memory space.  You will also need to link against libutil (-lutil).
>
>
> /*-------------------------------------------------------------------------
>  *
>  * ps_status.h
>  *
>  *      Defines macros to show backend status on the ps status line.
>  *      Unfortunately this is system dpendent.
>  *
>  *      Below is the FreeBSD version should work FreeBSD 2.2. and
> higher.
>  *
>  *      needs -lutil in makefile/configure script
>  *
>  *      Written by Matthew Altus
>  *
>
> *-------------------------------------------------------------------------
>  */
>
> #ifndef PS_STATUS_H
> #define PS_STATUS_H
>
>
> #include <sys/types.h>
> #include <libutil.h>
>
> extern char ps_status_buffer[];
> extern char ps_status[];
>
> #define BUFFERPATHLEN     255
>
> #define PS_DEFINE_BUFFER \
> char ps_status_buffer[BUFFERPATHLEN]; \
> char ps_status[BUFFERPATHLEN];
>
> #define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
> \
>         { \
>                 bzero (ps_status_buffer, BUFFERPATHLEN); \
>                 bzero (ps_status, BUFFERPATHLEN); \
>                 sprintf(ps_status_buffer, "%s %s %s %s ", execname,
> username, hostname, dbname); \
>                 setproctitle("%s", ps_status_buffer); \
>         }
>
> #define PS_CLEAR_STATUS() \
>         { \
>                 bzero (ps_status, BUFFERPATHLEN); \
>                 setproctitle("%s", ps_status_buffer); \
>         }
>
> #define PS_SET_STATUS(status) \
>         { \
>                 PS_CLEAR_STATUS(); \
>                 strcpy(ps_status, status); \
>                 setproctitle("%s%s", ps_status_buffer, ps_status); \
>         }
>
> #define PS_STATUS (ps_status)
>
>
>
> #endif   /* PS_STATUS_H */
>
>
>
> --
> _____________________________________________________________________
> Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
> Software Development Engineer       Support : (08) 8221 5792
> SE Network Access Pty Ltd           Fax     : (08) 8221 5220
> 222 Grote Street                    E-Mail  : matt@senet.com.au
> Adelaide  SA  5000                  WWW     : http://www.senet.com.au
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Re: ps_status.h on FreeBSD 4.0 problems and fix

From
Matthew Altus
Date:
Excellent, but as we are using 6.5.1 at the moment, due to performance
issues with 6.5.2/3 and optimizer concerns with 7.0.x is this change ok,
ie nothing should break due to it.  I have been thrashing this db over
the entire weekend, and died only due to a 1 corrupt index, so I believe
it should be ok, but to get a view from people who know about this would
be great.

Thanks

Bruce Momjian wrote:
>
> We already did this.  This will be in 7.1.
>
> > Your name               :       Matthew Altus
> > Your email address      :     matt@senet.com.au
> >
> >
> > System Configuration
> > ---------------------
> >   Architecture : Intel Pentium 3 Dual CPU
> >
> >   Operating System : FreeBSD 4.0 - STABLE
> >
> >   PostgreSQL version :   PostgreSQL-6.5.1 (also effects 7.0 as well)
> >
> >   Compiler used : gcc 2.95.2
> >
> >
> > Please enter a FULL description of your problem:
> > ------------------------------------------------
> > The ps output of child postgres process doesn't change to display
> > hostname etc...  It displays the same as the postmaster.
> > I noticed there are links (PS_STATUS marco) from the ps_status to the
> > lockmgr files, which means it may use this to help determine deadlock
> > status, which is very bad, as freebsd 4.0 doesn't allow you to write the
> > argv memory, although I might me completely wrong about this one.
> >
> > If this problem had already been posted to pgsql-bugs, I couldn't tell
> > as your seach doesn't work.
> >
> >
> >
> > Please describe a way to repeat the problem.   Please try to provide a
> > concise reproducible example, if at all possible:
> > ----------------------------------------------------------------------
> > Install postgres on freeBSD 4.0 and open a connection, type ps axwwwwww
> > | grep postgres.  all children will look the same as the postmaster.
> >
> >
> >
> >
> > If you know how this problem might be fixed, list the solution below:
> > ---------------------------------------------------------------------
> >
> > Below is my replacement to src/include/utils/ps_status.h , you should
> > place checks for the setproctitle function in the configure script and
> > use this if its available (most BSD's) instead of overwriting the argv
> > memory space.  You will also need to link against libutil (-lutil).
> >
> >
> > /*-------------------------------------------------------------------------
> >  *
> >  * ps_status.h
> >  *
> >  *      Defines macros to show backend status on the ps status line.
> >  *      Unfortunately this is system dpendent.
> >  *
> >  *      Below is the FreeBSD version should work FreeBSD 2.2. and
> > higher.
> >  *
> >  *      needs -lutil in makefile/configure script
> >  *
> >  *      Written by Matthew Altus
> >  *
> >
> > *-------------------------------------------------------------------------
> >  */
> >
> > #ifndef PS_STATUS_H
> > #define PS_STATUS_H
> >
> >
> > #include <sys/types.h>
> > #include <libutil.h>
> >
> > extern char ps_status_buffer[];
> > extern char ps_status[];
> >
> > #define BUFFERPATHLEN     255
> >
> > #define PS_DEFINE_BUFFER \
> > char ps_status_buffer[BUFFERPATHLEN]; \
> > char ps_status[BUFFERPATHLEN];
> >
> > #define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
> > \
> >         { \
> >                 bzero (ps_status_buffer, BUFFERPATHLEN); \
> >                 bzero (ps_status, BUFFERPATHLEN); \
> >                 sprintf(ps_status_buffer, "%s %s %s %s ", execname,
> > username, hostname, dbname); \
> >                 setproctitle("%s", ps_status_buffer); \
> >         }
> >
> > #define PS_CLEAR_STATUS() \
> >         { \
> >                 bzero (ps_status, BUFFERPATHLEN); \
> >                 setproctitle("%s", ps_status_buffer); \
> >         }
> >
> > #define PS_SET_STATUS(status) \
> >         { \
> >                 PS_CLEAR_STATUS(); \
> >                 strcpy(ps_status, status); \
> >                 setproctitle("%s%s", ps_status_buffer, ps_status); \
> >         }
> >
> > #define PS_STATUS (ps_status)
> >
> >
> >
> > #endif   /* PS_STATUS_H */
> >
> >
> >
> > --
> > _____________________________________________________________________
> > Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
> > Software Development Engineer       Support : (08) 8221 5792
> > SE Network Access Pty Ltd           Fax     : (08) 8221 5220
> > 222 Grote Street                    E-Mail  : matt@senet.com.au
> > Adelaide  SA  5000                  WWW     : http://www.senet.com.au
> >
>
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

--
_____________________________________________________________________
Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
Software Development Engineer       Support : (08) 8221 5792
SE Network Access Pty Ltd           Fax     : (08) 8221 5220
222 Grote Street                    E-Mail  : matt@senet.com.au
Adelaide  SA  5000                  WWW     : http://www.senet.com.au

Re: ps_status.h on FreeBSD 4.0 problems and fix

From
Bruce Momjian
Date:
7.0.2 is has less bugs than any previous release.

> Excellent, but as we are using 6.5.1 at the moment, due to performance
> issues with 6.5.2/3 and optimizer concerns with 7.0.x is this change ok,
> ie nothing should break due to it.  I have been thrashing this db over
> the entire weekend, and died only due to a 1 corrupt index, so I believe
> it should be ok, but to get a view from people who know about this would
> be great.
>
> Thanks
>
> Bruce Momjian wrote:
> >
> > We already did this.  This will be in 7.1.
> >
> > > Your name               :       Matthew Altus
> > > Your email address      :     matt@senet.com.au
> > >
> > >
> > > System Configuration
> > > ---------------------
> > >   Architecture : Intel Pentium 3 Dual CPU
> > >
> > >   Operating System : FreeBSD 4.0 - STABLE
> > >
> > >   PostgreSQL version :   PostgreSQL-6.5.1 (also effects 7.0 as well)
> > >
> > >   Compiler used : gcc 2.95.2
> > >
> > >
> > > Please enter a FULL description of your problem:
> > > ------------------------------------------------
> > > The ps output of child postgres process doesn't change to display
> > > hostname etc...  It displays the same as the postmaster.
> > > I noticed there are links (PS_STATUS marco) from the ps_status to the
> > > lockmgr files, which means it may use this to help determine deadlock
> > > status, which is very bad, as freebsd 4.0 doesn't allow you to write the
> > > argv memory, although I might me completely wrong about this one.
> > >
> > > If this problem had already been posted to pgsql-bugs, I couldn't tell
> > > as your seach doesn't work.
> > >
> > >
> > >
> > > Please describe a way to repeat the problem.   Please try to provide a
> > > concise reproducible example, if at all possible:
> > > ----------------------------------------------------------------------
> > > Install postgres on freeBSD 4.0 and open a connection, type ps axwwwwww
> > > | grep postgres.  all children will look the same as the postmaster.
> > >
> > >
> > >
> > >
> > > If you know how this problem might be fixed, list the solution below:
> > > ---------------------------------------------------------------------
> > >
> > > Below is my replacement to src/include/utils/ps_status.h , you should
> > > place checks for the setproctitle function in the configure script and
> > > use this if its available (most BSD's) instead of overwriting the argv
> > > memory space.  You will also need to link against libutil (-lutil).
> > >
> > >
> > > /*-------------------------------------------------------------------------
> > >  *
> > >  * ps_status.h
> > >  *
> > >  *      Defines macros to show backend status on the ps status line.
> > >  *      Unfortunately this is system dpendent.
> > >  *
> > >  *      Below is the FreeBSD version should work FreeBSD 2.2. and
> > > higher.
> > >  *
> > >  *      needs -lutil in makefile/configure script
> > >  *
> > >  *      Written by Matthew Altus
> > >  *
> > >
> > > *-------------------------------------------------------------------------
> > >  */
> > >
> > > #ifndef PS_STATUS_H
> > > #define PS_STATUS_H
> > >
> > >
> > > #include <sys/types.h>
> > > #include <libutil.h>
> > >
> > > extern char ps_status_buffer[];
> > > extern char ps_status[];
> > >
> > > #define BUFFERPATHLEN     255
> > >
> > > #define PS_DEFINE_BUFFER \
> > > char ps_status_buffer[BUFFERPATHLEN]; \
> > > char ps_status[BUFFERPATHLEN];
> > >
> > > #define PS_INIT_STATUS(argc, argv, execname, username, hostname, dbname)
> > > \
> > >         { \
> > >                 bzero (ps_status_buffer, BUFFERPATHLEN); \
> > >                 bzero (ps_status, BUFFERPATHLEN); \
> > >                 sprintf(ps_status_buffer, "%s %s %s %s ", execname,
> > > username, hostname, dbname); \
> > >                 setproctitle("%s", ps_status_buffer); \
> > >         }
> > >
> > > #define PS_CLEAR_STATUS() \
> > >         { \
> > >                 bzero (ps_status, BUFFERPATHLEN); \
> > >                 setproctitle("%s", ps_status_buffer); \
> > >         }
> > >
> > > #define PS_SET_STATUS(status) \
> > >         { \
> > >                 PS_CLEAR_STATUS(); \
> > >                 strcpy(ps_status, status); \
> > >                 setproctitle("%s%s", ps_status_buffer, ps_status); \
> > >         }
> > >
> > > #define PS_STATUS (ps_status)
> > >
> > >
> > >
> > > #endif   /* PS_STATUS_H */
> > >
> > >
> > >
> > > --
> > > _____________________________________________________________________
> > > Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
> > > Software Development Engineer       Support : (08) 8221 5792
> > > SE Network Access Pty Ltd           Fax     : (08) 8221 5220
> > > 222 Grote Street                    E-Mail  : matt@senet.com.au
> > > Adelaide  SA  5000                  WWW     : http://www.senet.com.au
> > >
> >
> > --
> >   Bruce Momjian                        |  http://candle.pha.pa.us
> >   pgman@candle.pha.pa.us               |  (610) 853-3000
> >   +  If your life is a hard drive,     |  830 Blythe Avenue
> >   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
>
> --
> _____________________________________________________________________
> Matthew Altus  B.Eng. C.S.E.        Sales   : (08) 8221 5221
> Software Development Engineer       Support : (08) 8221 5792
> SE Network Access Pty Ltd           Fax     : (08) 8221 5220
> 222 Grote Street                    E-Mail  : matt@senet.com.au
> Adelaide  SA  5000                  WWW     : http://www.senet.com.au
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026