Thread

Commits

  1. Don't ask for bug reports about pthread_is_threaded_np() != 0.

  1. "postmaster became multithreaded" is reachable

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-01-23T18:22:13Z

    ExitPostmaster() says:
    
        /*
         * There is no known cause for a postmaster to become multithreaded after
         * startup.  Recheck to account for the possibility of unknown causes.
         * This message uses LOG level, because an unclean shutdown at this point
         * would usually not look much different from a clean shutdown.
         */
        if (pthread_is_threaded_np() != 0)
            ereport(LOG,
                    (errcode(ERRCODE_INTERNAL_ERROR),
                     errmsg_internal("postmaster became multithreaded"),
                     errdetail("Please report this to <%s>.", PACKAGE_BUGREPORT)));
    
    We now have a report[1] of a way to trigger this error message.
    It seems to boil down to "cause an error before PostmasterMain
    has reached its test of pthread_is_threaded_np()", for example
    
    $ # build with --enable-nls, using MacPorts' gettext package
    $ unset LANG
    $ postgres -D /foo
    postgres: could not access directory "/foo": No such file or directory
    Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
    2025-01-23 18:16:03.843 GMT [41524] LOG:  postmaster became multithreaded
    2025-01-23 18:16:03.843 GMT [41524] DETAIL:  Please report this to <pgsql-bugs@lists.postgresql.org>.
    
    I suggest therefore that we remove the "Please report a bug"
    bit and instead use the much more helpful hint appearing in
    PostmasterMain:
    
                     errhint("Set the LC_ALL environment variable to a valid locale.")));
    
    An alternative idea (that maybe should also be done in PostmasterMain)
    is to report the HINT only #ifdef __darwin__ and on other platforms
    use the "Please report a bug" text.
    
    			regards, tom lane
    
    [1] https://www.postgresql.org/message-id/18783-d1873b95a59b9103%40postgresql.org
    
    
    
    
  2. Re: "postmaster became multithreaded" is reachable

    Noah Misch <noah@leadboat.com> — 2025-01-23T18:38:37Z

    On Thu, Jan 23, 2025 at 01:22:13PM -0500, Tom Lane wrote:
    > ExitPostmaster() says:
    > 
    >     /*
    >      * There is no known cause for a postmaster to become multithreaded after
    >      * startup.  Recheck to account for the possibility of unknown causes.
    >      * This message uses LOG level, because an unclean shutdown at this point
    >      * would usually not look much different from a clean shutdown.
    >      */
    >     if (pthread_is_threaded_np() != 0)
    >         ereport(LOG,
    >                 (errcode(ERRCODE_INTERNAL_ERROR),
    >                  errmsg_internal("postmaster became multithreaded"),
    >                  errdetail("Please report this to <%s>.", PACKAGE_BUGREPORT)));
    > 
    > We now have a report[1] of a way to trigger this error message.
    > It seems to boil down to "cause an error before PostmasterMain
    > has reached its test of pthread_is_threaded_np()", for example
    > 
    > $ # build with --enable-nls, using MacPorts' gettext package
    > $ unset LANG
    > $ postgres -D /foo
    > postgres: could not access directory "/foo": No such file or directory
    > Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
    > 2025-01-23 18:16:03.843 GMT [41524] LOG:  postmaster became multithreaded
    > 2025-01-23 18:16:03.843 GMT [41524] DETAIL:  Please report this to <pgsql-bugs@lists.postgresql.org>.
    
    That makes sense.  Thanks for confirming it.
    
    > I suggest therefore that we remove the "Please report a bug"
    > bit and instead use the much more helpful hint appearing in
    > PostmasterMain:
    > 
    >                  errhint("Set the LC_ALL environment variable to a valid locale.")));
    
    That suffices.  It took a lot of years for the "Please report" message to
    yield a report, so I'm not much concerned about losing reports from this
    change.
    
    > An alternative idea (that maybe should also be done in PostmasterMain)
    > is to report the HINT only #ifdef __darwin__ and on other platforms
    > use the "Please report a bug" text.
    
    I gather pthread_is_threaded_np() is still macOS-only, in which case the
    !darwin branch would be future-proofing only.
    
    Another alternative would be to track whether we reached the startup-time
    check, emitting a message at exit only if we did reach the startup-time check.
    If a postmaster passes the startup-time check and fails the exit-time check,
    changing the environment won't help.  Even so, I'm content with your first
    proposal.
    
    > [1] https://www.postgresql.org/message-id/18783-d1873b95a59b9103%40postgresql.org
    
    
    
    
  3. Re: "postmaster became multithreaded" is reachable

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-01-23T18:51:32Z

    Noah Misch <noah@leadboat.com> writes:
    > On Thu, Jan 23, 2025 at 01:22:13PM -0500, Tom Lane wrote:
    >> An alternative idea (that maybe should also be done in PostmasterMain)
    >> is to report the HINT only #ifdef __darwin__ and on other platforms
    >> use the "Please report a bug" text.
    
    > I gather pthread_is_threaded_np() is still macOS-only, in which case the
    > !darwin branch would be future-proofing only.
    
    Ah, I had not realized that.  Perhaps the comments about this code
    should mention that?
    
    > Another alternative would be to track whether we reached the startup-time
    > check, emitting a message at exit only if we did reach the startup-time check.
    > If a postmaster passes the startup-time check and fails the exit-time check,
    > changing the environment won't help.  Even so, I'm content with your first
    > proposal.
    
    Yeah, seems like overcomplication.  Let's go with the simple way.
    
    			regards, tom lane
    
    
    
    
  4. Re: "postmaster became multithreaded" is reachable

    Noah Misch <noah@leadboat.com> — 2025-01-23T19:56:43Z

    On Thu, Jan 23, 2025 at 01:51:32PM -0500, Tom Lane wrote:
    > Noah Misch <noah@leadboat.com> writes:
    > > On Thu, Jan 23, 2025 at 01:22:13PM -0500, Tom Lane wrote:
    > >> An alternative idea (that maybe should also be done in PostmasterMain)
    > >> is to report the HINT only #ifdef __darwin__ and on other platforms
    > >> use the "Please report a bug" text.
    > 
    > > I gather pthread_is_threaded_np() is still macOS-only, in which case the
    > > !darwin branch would be future-proofing only.
    > 
    > Ah, I had not realized that.  Perhaps the comments about this code
    > should mention that?
    
    Sure, your committed comment works for me.
    
    > > Another alternative would be to track whether we reached the startup-time
    > > check, emitting a message at exit only if we did reach the startup-time check.
    > > If a postmaster passes the startup-time check and fails the exit-time check,
    > > changing the environment won't help.  Even so, I'm content with your first
    > > proposal.
    > 
    > Yeah, seems like overcomplication.  Let's go with the simple way.
    
    postgr.es/c/4f15759bdcddd23e874526a6b2c0ff86e0beb042 looks fine.  Thanks.