1. 25 Jun, 2021 8 commits
  2. 24 Jun, 2021 8 commits
  3. 23 Jun, 2021 6 commits
    • Tom Lane's avatar
      Allow non-quoted identifiers as isolation test session/step names. · a443c1b2
      Tom Lane authored
      For no obvious reason, isolationtester has always insisted that
      session and step names be written with double quotes.  This is
      fairly tedious and does little for test readability, especially
      since the names that people actually choose almost always look
      like normal identifiers.  Hence, let's tweak the lexer to allow
      SQL-like identifiers not only double-quoted strings.
      
      (They're SQL-like, not exactly SQL, because I didn't add any
      case-folding logic.  Also there's no provision for U&"..." names,
      not that anyone's likely to care.)
      
      There is one incompatibility introduced by this change: if you write
      "foo""bar" with no space, that used to be taken as two identifiers,
      but now it's just one identifier with an embedded quote mark.
      
      I converted all the src/test/isolation/ specfiles to remove
      unnecessary double quotes, but stopped there because my
      eyes were glazing over already.
      
      Like 741d7f10, back-patch to all supported branches, so that this
      isn't a stumbling block for back-patching isolation test changes.
      
      Discussion: https://postgr.es/m/759113.1623861959@sss.pgh.pa.us
      a443c1b2
    • Tom Lane's avatar
      Doc: fix confusion about LEAKPROOF in syntax summaries. · 2031e166
      Tom Lane authored
      The syntax summaries for CREATE FUNCTION and allied commands
      made it look like LEAKPROOF is an alternative to
      IMMUTABLE/STABLE/VOLATILE, when of course it is an orthogonal
      option.  Improve that.
      
      Per gripe from aazamrafeeque0.  Thanks to David Johnston for
      suggestions.
      
      Discussion: https://postgr.es/m/162444349581.694.5818572718530259025@wrigleys.postgresql.org
      2031e166
    • Tom Lane's avatar
      Don't assume GSSAPI result strings are null-terminated. · 126cdaf4
      Tom Lane authored
      Our uses of gss_display_status() and gss_display_name() assumed
      that the gss_buffer_desc strings returned by those functions are
      null-terminated.  It appears that they generally are, given the
      lack of field complaints up to now.  However, the available
      documentation does not promise this, and some man pages
      for gss_display_status() show examples that rely on the
      gss_buffer_desc.length field instead of expecting null
      termination.  Also, we now have a report that on some
      implementations, clang's address sanitizer is of the opinion
      that the byte after the specified length is undefined.
      
      Hence, change the code to rely on the length field instead.
      
      This might well be cosmetic rather than fixing any real bug, but
      it's hard to be sure, so back-patch to all supported branches.
      While here, also back-patch the v12 changes that made pg_GSS_error
      deal honestly with multiple messages available from
      gss_display_status.
      
      Per report from Sudheer H R.
      
      Discussion: https://postgr.es/m/5372B6D4-8276-42C0-B8FB-BD0918826FC3@tekenlight.com
      126cdaf4
    • Tom Lane's avatar
      Improve display of query results in isolation tests. · 4a054069
      Tom Lane authored
      Previously, isolationtester displayed SQL query results using some
      ad-hoc code that clearly hadn't had much effort expended on it.
      Field values longer than 14 characters weren't separated from
      the next field, and usually caused misalignment of the columns
      too.  Also there was no visual separation of a query's result
      from subsequent isolationtester output.  This made test result
      files confusing and hard to read.
      
      To improve matters, let's use libpq's PQprint() function.  Although
      that's long since unused by psql, it's still plenty good enough
      for the purpose here.
      
      Like 741d7f10, back-patch to all supported branches, so that this
      isn't a stumbling block for back-patching isolation test changes.
      
      Discussion: https://postgr.es/m/582362.1623798221@sss.pgh.pa.us
      4a054069
    • Alvaro Herrera's avatar
      Add test case for obsoleting slot with active walsender, take 2 · 24043c27
      Alvaro Herrera authored
      The code to signal a running walsender when its reserved WAL size grows
      too large is completely uncovered before this commit; this adds coverage
      for that case.
      
      This test involves sending SIGSTOP to walsender and walreceiver, then
      advancing enough WAL for a checkpoint to trigger, then sending SIGCONT.
      
      There's no precedent for STOP signalling in Perl tests, and my reading
      of relevant manpages says it's likely to fail on Windows.  Because of
      this, this test is always skipped on that platform.
      
      This version fixes a couple of rarely hit race conditions in the
      previous attempt 09126984; most notably, both LOG string searches
      are loops, not just the second one; we acquire the start-of-log position
      before STOP-signalling; and reference the correct process name in the
      test description.  All per Tom Lane.
      
      Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
      Discussion: https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql
      24043c27
    • Tom Lane's avatar
      Use annotations to reduce instability of isolation-test results. · 741d7f10
      Tom Lane authored
      We've long contended with isolation test results that aren't entirely
      stable.  Some test scripts insert long delays to try to force stable
      results, which is not terribly desirable; but other erratic failure
      modes remain, causing unrepeatable buildfarm failures.  I've spent a
      fair amount of time trying to solve this by improving the server-side
      support code, without much success: that way is fundamentally unable
      to cope with diffs that stem from chance ordering of arrival of
      messages from different server processes.
      
      We can improve matters on the client side, however, by annotating
      the test scripts themselves to show the desired reporting order
      of events that might occur in different orders.  This patch adds
      three types of annotations to deal with (a) test steps that might or
      might not complete their waits before the isolationtester can see them
      waiting; (b) test steps in different sessions that can legitimately
      complete in either order; and (c) NOTIFY messages that might arrive
      before or after the completion of a step in another session.  We might
      need more annotation types later, but this seems to be enough to deal
      with the instabilities we've seen in the buildfarm.  It also lets us
      get rid of all the long delays that were previously used, cutting more
      than a minute off the runtime of the isolation tests.
      
      Back-patch to all supported branches, because the buildfarm
      instabilities affect all the branches, and because it seems desirable
      to keep isolationtester's capabilities the same across all branches
      to simplify possible future back-patching of tests.
      
      Discussion: https://postgr.es/m/327948.1623725828@sss.pgh.pa.us
      741d7f10
  4. 22 Jun, 2021 2 commits
  5. 21 Jun, 2021 9 commits
  6. 20 Jun, 2021 2 commits
  7. 19 Jun, 2021 3 commits
    • Tom Lane's avatar
      Provide feature-test macros for libpq features added in v14. · 6991e774
      Tom Lane authored
      We had a request to provide a way to test at compile time for the
      availability of the new pipeline features.  More generally, it
      seems like a good idea to provide a way to test via #ifdef for
      all new libpq API features.  People have been using the version
      from pg_config.h for that; but that's more likely to represent the
      server version than the libpq version, in the increasingly-common
      scenario where they're different.  It's safer if libpq-fe.h itself
      is the source of truth about what features it offers.
      
      Hence, establish a policy that starting in v14 we'll add a suitable
      feature-is-present macro to libpq-fe.h when we add new API there.
      (There doesn't seem to be much point in applying this policy
      retroactively, but it's not too late for v14.)
      
      Tom Lane and Alvaro Herrera, per suggestion from Boris Kolpackov.
      
      Discussion: https://postgr.es/m/boris.20210617102439@codesynthesis.com
      6991e774
    • Amit Kapila's avatar
      Handle no replica identity index case in RelationGetIdentityKeyBitmap. · 2731ce1b
      Amit Kapila authored
      Commit e7eea52b has introduced a new function
      RelationGetIdentityKeyBitmap which omits to handle the case where there is
      no replica identity index on a relation.
      
      Author: Mark Dilger
      Reviewed-by: Takamichi Osumi, Amit Kapila
      Discussion: https://www.postgresql.org/message-id/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com
      2731ce1b
    • Peter Geoghegan's avatar
      Support disabling index bypassing by VACUUM. · 3499df0d
      Peter Geoghegan authored
      Generalize the INDEX_CLEANUP VACUUM parameter (and the corresponding
      reloption): make it into a ternary style boolean parameter.  It now
      exposes a third option, "auto".  The "auto" option (which is now the
      default) enables the "bypass index vacuuming" optimization added by
      commit 1e55e7d1.
      
      "VACUUM (INDEX_CLEANUP TRUE)" is redefined to once again make VACUUM
      simply do any required index vacuuming, regardless of how few dead
      tuples are encountered during the first scan of the target heap relation
      (unless there are exactly zero).  This gives users a way of opting out
      of the "bypass index vacuuming" optimization, if for whatever reason
      that proves necessary.  It is also expected to be used by PostgreSQL
      developers as a testing option from time to time.
      
      "VACUUM (INDEX_CLEANUP FALSE)" does the same thing as it always has: it
      forcibly disables both index vacuuming and index cleanup.  It's not
      expected to be used much in PostgreSQL 14.  The failsafe mechanism added
      by commit 1e55e7d1 addresses the same problem in a simpler way.
      INDEX_CLEANUP can now be thought of as a testing and compatibility
      option.
      
      Author: Peter Geoghegan <pg@bowt.ie>
      Reviewed-By: default avatarMasahiko Sawada <sawada.mshk@gmail.com>
      Reviewed-By: default avatarJustin Pryzby <pryzby@telsasoft.com>
      Discussion: https://postgr.es/m/CAH2-WznrBoCST4_Gxh_G9hA8NzGUbeBGnOUC8FcXcrhqsv6OHQ@mail.gmail.com
      3499df0d
  8. 18 Jun, 2021 2 commits
    • Alvaro Herrera's avatar
      Add test case for obsoleting slot with active walsender · 09126984
      Alvaro Herrera authored
      The code to signal a running walsender when its reserved WAL size grows
      too large is completely uncovered before this commit; this adds coverage
      for that case.
      
      This test involves sending SIGSTOP to walsender and walreceiver and
      running a checkpoint while advancing WAL, then sending SIGCONT.  There's
      no precedent for this coding in Perl tests, and my reading of relevant
      manpages says it's likely to fail on Windows.  Because of this, this
      test is always skipped on that platform.
      
      Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
      Discussion: https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql
      09126984
    • Tom Lane's avatar
      Fix misbehavior of DROP OWNED BY with duplicate polroles entries. · d21fca08
      Tom Lane authored
      Ordinarily, a pg_policy.polroles array wouldn't list the same role
      more than once; but CREATE POLICY does not prevent that.  If we
      perform DROP OWNED BY on a role that is listed more than once,
      RemoveRoleFromObjectPolicy either suffered an assertion failure
      or encountered a tuple-updated-by-self error.  Rewrite it to cope
      correctly with duplicate entries, and add a CommandCounterIncrement
      call to prevent the other problem.
      
      Per discussion, there's other cleanup that ought to happen here,
      but this seems like the minimum essential fix.
      
      Per bug #17062 from Alexander Lakhin.  It's been broken all along,
      so back-patch to all supported branches.
      
      Discussion: https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org
      d21fca08